Skip to content

Commit a0294fc

Browse files
author
tretyak-rd
committed
Use named tuple instead of the bare dict
1 parent 6546d71 commit a0294fc

File tree

2 files changed

+32
-20
lines changed

2 files changed

+32
-20
lines changed

test/test_core.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
from decimal import Decimal
21
from datetime import date, datetime
2+
from decimal import Decimal
3+
from typing import NamedTuple
34

45
import pytest
56
import sqlalchemy as sa
7+
import ydb
68
from sqlalchemy import Table, Column, Integer, Unicode
79
from sqlalchemy.testing.fixtures import TestBase, TablesTest
8-
9-
import ydb
1010
from ydb._grpc.v4.protos import ydb_common_pb2
1111

12-
from ydb_sqlalchemy.sqlalchemy import types
13-
1412
from ydb_sqlalchemy import dbapi, IsolationLevel
13+
from ydb_sqlalchemy.sqlalchemy import types
1514

1615

1716
def clear_sql(stm):
@@ -459,13 +458,19 @@ def test_not_interactive_transaction(
459458

460459

461460
class TestTransactionIsolationLevel(TestBase):
461+
class IsolationSettings(NamedTuple):
462+
ydb_mode: ydb.AbstractTransactionModeBuilder
463+
interactive: bool
464+
462465
YDB_ISOLATION_SETTINGS_MAP = {
463-
IsolationLevel.AUTOCOMMIT: (ydb.SerializableReadWrite().name, False),
464-
IsolationLevel.SERIALIZABLE: (ydb.SerializableReadWrite().name, True),
465-
IsolationLevel.ONLINE_READONLY: (ydb.OnlineReadOnly().name, False),
466-
IsolationLevel.ONLINE_READONLY_INCONSISTENT: (ydb.OnlineReadOnly().with_allow_inconsistent_reads().name, False),
467-
IsolationLevel.STALE_READONLY: (ydb.StaleReadOnly().name, False),
468-
IsolationLevel.SNAPSHOT_READONLY: (ydb.SnapshotReadOnly().name, True),
466+
IsolationLevel.AUTOCOMMIT: IsolationSettings(ydb.SerializableReadWrite().name, False),
467+
IsolationLevel.SERIALIZABLE: IsolationSettings(ydb.SerializableReadWrite().name, True),
468+
IsolationLevel.ONLINE_READONLY: IsolationSettings(ydb.OnlineReadOnly().name, False),
469+
IsolationLevel.ONLINE_READONLY_INCONSISTENT: IsolationSettings(
470+
ydb.OnlineReadOnly().with_allow_inconsistent_reads().name, False
471+
),
472+
IsolationLevel.STALE_READONLY: IsolationSettings(ydb.StaleReadOnly().name, False),
473+
IsolationLevel.SNAPSHOT_READONLY: IsolationSettings(ydb.SnapshotReadOnly().name, True),
469474
}
470475

471476
def test_connection_set(self, connection_no_trans: sa.Connection):

ydb_sqlalchemy/dbapi/connection.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import posixpath
2-
from typing import Optional
2+
from typing import Optional, NamedTuple
33

44
import ydb
5+
56
from .cursor import Cursor
67
from .errors import InterfaceError, ProgrammingError, DatabaseError, InternalError, NotSupportedError
78

@@ -48,19 +49,25 @@ def check_exists(self, table_path):
4849
return False
4950

5051
def set_isolation_level(self, isolation_level: str):
52+
class IsolationSettings(NamedTuple):
53+
ydb_mode: ydb.AbstractTransactionModeBuilder
54+
interactive: bool
55+
5156
ydb_isolation_settings_map = {
52-
IsolationLevel.AUTOCOMMIT: (ydb.SerializableReadWrite(), False),
53-
IsolationLevel.SERIALIZABLE: (ydb.SerializableReadWrite(), True),
54-
IsolationLevel.ONLINE_READONLY: (ydb.OnlineReadOnly(), False),
55-
IsolationLevel.ONLINE_READONLY_INCONSISTENT: (ydb.OnlineReadOnly().with_allow_inconsistent_reads(), False),
56-
IsolationLevel.STALE_READONLY: (ydb.StaleReadOnly(), False),
57-
IsolationLevel.SNAPSHOT_READONLY: (ydb.SnapshotReadOnly(), True),
57+
IsolationLevel.AUTOCOMMIT: IsolationSettings(ydb.SerializableReadWrite(), interactive=False),
58+
IsolationLevel.SERIALIZABLE: IsolationSettings(ydb.SerializableReadWrite(), interactive=True),
59+
IsolationLevel.ONLINE_READONLY: IsolationSettings(ydb.OnlineReadOnly(), interactive=False),
60+
IsolationLevel.ONLINE_READONLY_INCONSISTENT: IsolationSettings(
61+
ydb.OnlineReadOnly().with_allow_inconsistent_reads(), interactive=False
62+
),
63+
IsolationLevel.STALE_READONLY: IsolationSettings(ydb.StaleReadOnly(), interactive=False),
64+
IsolationLevel.SNAPSHOT_READONLY: IsolationSettings(ydb.SnapshotReadOnly(), interactive=True),
5865
}
5966
ydb_isolation_settings = ydb_isolation_settings_map[isolation_level]
6067
if self.transaction and self.transaction.tx_id:
6168
raise InternalError("Failed to set transaction mode: transaction is already began")
62-
self.tx_mode = ydb_isolation_settings[0]
63-
self.interactive_transaction = ydb_isolation_settings[1]
69+
self.tx_mode = ydb_isolation_settings.ydb_mode
70+
self.interactive_transaction = ydb_isolation_settings.interactive
6471

6572
def get_isolation_level(self) -> str:
6673
if self.tx_mode.name == ydb.SerializableReadWrite().name:

0 commit comments

Comments
 (0)