Skip to content

Commit 2e242ed

Browse files
authored
Merge pull request #39 from kabulov/add_credentials_2 add credentials. set in connect_args for engine.
2 parents 94b8885 + cade7c5 commit 2e242ed

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

test/test_core.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,57 @@ def ydb_pool(self, ydb_driver):
597597
loop.run_until_complete(session_pool.stop())
598598

599599

600+
class TestCredentials(TestBase):
601+
__backend__ = True
602+
__only_on__ = "yql+ydb"
603+
604+
@pytest.fixture(scope="class")
605+
def table_client_settings(self):
606+
yield (
607+
ydb.TableClientSettings()
608+
.with_native_date_in_result_sets(True)
609+
.with_native_datetime_in_result_sets(True)
610+
.with_native_timestamp_in_result_sets(True)
611+
.with_native_interval_in_result_sets(True)
612+
.with_native_json_in_result_sets(False)
613+
)
614+
615+
@pytest.fixture(scope="class")
616+
def driver_config_for_credentials(self, table_client_settings):
617+
url = config.db_url
618+
endpoint = f"grpc://{url.host}:{url.port}"
619+
database = url.database
620+
621+
yield ydb.DriverConfig(
622+
endpoint=endpoint,
623+
database=database,
624+
table_client_settings=table_client_settings,
625+
)
626+
627+
def test_ydb_credentials_good(self, table_client_settings, driver_config_for_credentials):
628+
credentials_good = ydb.StaticCredentials(
629+
driver_config=driver_config_for_credentials,
630+
user="root",
631+
password="1234",
632+
)
633+
engine = sa.create_engine(config.db_url, connect_args={"credentials": credentials_good})
634+
with engine.connect() as conn:
635+
result = conn.execute(sa.text("SELECT 1 as value"))
636+
assert result.fetchone()
637+
638+
def test_ydb_credentials_bad(self, table_client_settings, driver_config_for_credentials):
639+
credentials_bad = ydb.StaticCredentials(
640+
driver_config=driver_config_for_credentials,
641+
user="root",
642+
password="56",
643+
)
644+
engine = sa.create_engine(config.db_url, connect_args={"credentials": credentials_bad})
645+
with pytest.raises(Exception) as excinfo:
646+
with engine.connect() as conn:
647+
conn.execute(sa.text("SELECT 1 as value"))
648+
assert "Invalid password" in str(excinfo.value)
649+
650+
600651
class TestUpsert(TablesTest):
601652
__backend__ = True
602653

ydb_sqlalchemy/dbapi/connection.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def __init__(
3737
self.endpoint = f"grpc://{host}:{port}"
3838
self.database = database
3939
self.conn_kwargs = conn_kwargs
40+
self.credentials = self.conn_kwargs.pop("credentials", None)
4041

4142
if "ydb_session_pool" in self.conn_kwargs: # Use session pool managed manually
4243
self._shared_session_pool = True
@@ -157,6 +158,7 @@ def _create_driver(self):
157158
endpoint=self.endpoint,
158159
database=self.database,
159160
table_client_settings=self._get_table_client_settings(),
161+
credentials=self.credentials,
160162
)
161163
driver = self._ydb_driver_class(driver_config)
162164
try:

0 commit comments

Comments
 (0)