20
20
class QueryClientSettings : ...
21
21
22
22
23
- class QuerySessionStateEnum (enum .Enum ):
24
- NOT_INITIALIZED = "NOT_INITIALIZED"
25
- CREATED = "CREATED"
26
- CLOSED = "CLOSED"
27
-
28
-
29
- class QuerySessionStateHelper (abc .ABC ):
30
- _VALID_TRANSITIONS = {
31
- QuerySessionStateEnum .NOT_INITIALIZED : [QuerySessionStateEnum .CREATED ],
32
- QuerySessionStateEnum .CREATED : [QuerySessionStateEnum .CLOSED ],
33
- QuerySessionStateEnum .CLOSED : []
34
- }
35
-
36
- @classmethod
37
- def valid_transition (cls , before : QuerySessionStateEnum , after : QuerySessionStateEnum ) -> bool :
38
- return after in cls ._VALID_TRANSITIONS [before ]
39
-
40
-
41
- class QueryTxStateEnum (enum .Enum ):
42
- NOT_INITIALIZED = "NOT_INITIALIZED"
43
- BEGINED = "BEGINED"
44
- COMMITTED = "COMMITTED"
45
- ROLLBACKED = "ROLLBACKED"
46
- DEAD = "DEAD"
47
-
48
-
49
- class QueryTxStateHelper (abc .ABC ):
50
- _VALID_TRANSITIONS = {
51
- QueryTxStateEnum .NOT_INITIALIZED : [QueryTxStateEnum .BEGINED , QueryTxStateEnum .DEAD ],
52
- QueryTxStateEnum .BEGINED : [QueryTxStateEnum .COMMITTED , QueryTxStateEnum .ROLLBACKED , QueryTxStateEnum .DEAD ],
53
- QueryTxStateEnum .COMMITTED : [],
54
- QueryTxStateEnum .ROLLBACKED : [],
55
- QueryTxStateEnum .DEAD : [],
56
- }
57
-
58
- @classmethod
59
- def valid_transition (cls , before : QueryTxStateEnum , after : QueryTxStateEnum ) -> bool :
60
- return after in cls ._VALID_TRANSITIONS [before ]
61
-
62
-
63
- class QuerySessionState :
64
- _session_id : Optional [str ]
65
- _node_id : Optional [int ]
66
- _attached : bool = False
67
- _settings : Optional [QueryClientSettings ]
68
-
23
+ class IQuerySessionState (abc .ABC ):
69
24
def __init__ (self , settings : QueryClientSettings = None ):
70
- self ._settings = settings
71
- self .reset ()
25
+ pass
72
26
27
+ @abc .abstractmethod
73
28
def reset (self ) -> None :
74
- self ._session_id = None
75
- self ._node_id = None
76
- self ._attached = False
29
+ pass
77
30
78
31
@property
32
+ @abc .abstractmethod
79
33
def session_id (self ) -> Optional [str ]:
80
- return self . _session_id
34
+ pass
81
35
82
- def set_session_id ( self , session_id : str ) -> "QuerySessionState" :
83
- self . _session_id = session_id
84
- return self
36
+ @ abc . abstractmethod
37
+ def set_session_id ( self , session_id : str ) -> "IQuerySessionState" :
38
+ pass
85
39
86
40
@property
41
+ @abc .abstractmethod
87
42
def node_id (self ) -> Optional [int ]:
88
- return self . _node_id
43
+ pass
89
44
90
- def set_node_id ( self , node_id : int ) -> "QuerySessionState" :
91
- self . _node_id = node_id
92
- return self
45
+ @ abc . abstractmethod
46
+ def set_node_id ( self , node_id : int ) -> "IQuerySessionState" :
47
+ pass
93
48
94
49
@property
50
+ @abc .abstractmethod
95
51
def attached (self ) -> bool :
96
- return self . _attached
52
+ pass
97
53
98
- def set_attached (self , attached : bool ) -> None :
99
- self ._attached = attached
54
+ @abc .abstractmethod
55
+ def set_attached (self , attached : bool ) -> "IQuerySessionState" :
56
+ pass
100
57
101
58
102
59
class IQuerySession (abc .ABC ):
@@ -120,7 +77,7 @@ def transaction(self, tx_mode: BaseQueryTxMode) -> "IQueryTxContext":
120
77
class IQueryTxContext (abc .ABC ):
121
78
122
79
@abc .abstractmethod
123
- def __init__ (self , driver : SupportedDriverType , session_state : QuerySessionState , session : IQuerySession , tx_mode : BaseQueryTxMode = None ):
80
+ def __init__ (self , driver : SupportedDriverType , session_state : IQuerySessionState , session : IQuerySession , tx_mode : BaseQueryTxMode = None ):
124
81
pass
125
82
126
83
@abc .abstractmethod
@@ -184,17 +141,17 @@ def create_execute_query_request(query: str, session_id: str, commit_tx: bool):
184
141
return req .to_proto ()
185
142
186
143
def wrap_execute_query_response (rpc_state , response_pb ):
187
-
188
144
return convert .ResultSet .from_message (response_pb .result_set )
189
145
146
+
190
147
X_YDB_SERVER_HINTS = "x-ydb-server-hints"
191
148
X_YDB_SESSION_CLOSE = "session-close"
192
149
193
150
194
151
def _check_session_is_closing (rpc_state , session_state ):
195
152
metadata = rpc_state .trailing_metadata ()
196
153
if X_YDB_SESSION_CLOSE in metadata .get (X_YDB_SERVER_HINTS , []):
197
- session_state .set_closing ()
154
+ session_state .set_closing () # TODO: clarify & implement
198
155
199
156
200
157
def bad_session_handler (func ):
0 commit comments