1818from .errors import InternalError
1919from .errors import NotSupportedError
2020from .utils import handle_ydb_errors
21+ from .utils import maybe_get_current_trace_id
2122
2223
2324class IsolationLevel (str , Enum ):
@@ -101,6 +102,9 @@ def __init__(
101102 self ._session_pool = self ._pool_cls (self ._driver , size = 5 )
102103
103104 self ._session : ydb .QuerySession | ydb .aio .QuerySession | None = None
105+ self .request_settings : ydb .BaseRequestSettings = (
106+ ydb .BaseRequestSettings ()
107+ )
104108
105109 def set_isolation_level (self , isolation_level : IsolationLevel ) -> None :
106110 if self ._tx_context and self ._tx_context .tx_id :
@@ -129,6 +133,20 @@ def get_isolation_level(self) -> str:
129133 msg = f"{ self ._tx_mode .name } is not supported"
130134 raise NotSupportedError (msg )
131135
136+ def set_ydb_request_settings (self , value : ydb .BaseRequestSettings ) -> None :
137+ self .request_settings = value
138+
139+ def get_ydb_request_settings (self ) -> ydb .BaseRequestSettings :
140+ return self .request_settings
141+
142+ def _get_request_settings (self ) -> ydb .BaseRequestSettings :
143+ settings = self .request_settings .make_copy ()
144+
145+ if self .request_settings .trace_id is None :
146+ settings = settings .with_trace_id (maybe_get_current_trace_id ())
147+
148+ return settings
149+
132150 def _get_client_settings (self ) -> ydb .QueryClientSettings :
133151 return (
134152 ydb .QueryClientSettings ()
@@ -172,6 +190,7 @@ def cursor(self) -> Cursor:
172190 tx_mode = self ._tx_mode ,
173191 tx_context = self ._tx_context ,
174192 table_path_prefix = self .table_path_prefix ,
193+ request_settings = self .request_settings ,
175194 )
176195
177196 def wait_ready (self , timeout : int = 10 ) -> None :
@@ -197,15 +216,17 @@ def begin(self) -> None:
197216 @handle_ydb_errors
198217 def commit (self ) -> None :
199218 if self ._tx_context and self ._tx_context .tx_id :
200- self ._tx_context .commit ()
219+ settings = self ._get_request_settings ()
220+ self ._tx_context .commit (settings = settings )
201221 self ._session_pool .release (self ._session )
202222 self ._tx_context = None
203223 self ._session = None
204224
205225 @handle_ydb_errors
206226 def rollback (self ) -> None :
207227 if self ._tx_context and self ._tx_context .tx_id :
208- self ._tx_context .rollback ()
228+ settings = self ._get_request_settings ()
229+ self ._tx_context .rollback (settings = settings )
209230 self ._session_pool .release (self ._session )
210231 self ._tx_context = None
211232 self ._session = None
@@ -223,10 +244,15 @@ def close(self) -> None:
223244
224245 @handle_ydb_errors
225246 def describe (self , table_path : str ) -> ydb .TableSchemeEntry :
247+ settings = self ._get_request_settings ()
248+
226249 abs_table_path = posixpath .join (
227250 self .database , self .table_path_prefix , table_path
228251 )
229- return self ._driver .table_client .describe_table (abs_table_path )
252+ return self ._driver .table_client .describe_table (
253+ abs_table_path ,
254+ settings = settings ,
255+ )
230256
231257 @handle_ydb_errors
232258 def check_exists (self , table_path : str ) -> bool :
@@ -243,9 +269,12 @@ def get_table_names(self) -> list[str]:
243269
244270 def _check_path_exists (self , table_path : str ) -> bool :
245271 try :
272+ settings = self ._get_request_settings ()
246273
247274 def callee () -> None :
248- self ._driver .scheme_client .describe_path (table_path )
275+ self ._driver .scheme_client .describe_path (
276+ table_path , settings = settings
277+ )
249278
250279 retry_operation_sync (callee )
251280 except ydb .SchemeError :
@@ -254,8 +283,13 @@ def callee() -> None:
254283 return True
255284
256285 def _get_table_names (self , abs_dir_path : str ) -> list [str ]:
286+ settings = self ._get_request_settings ()
287+
257288 def callee () -> ydb .Directory :
258- return self ._driver .scheme_client .list_directory (abs_dir_path )
289+ return self ._driver .scheme_client .list_directory (
290+ abs_dir_path ,
291+ settings = settings ,
292+ )
259293
260294 directory = retry_operation_sync (callee )
261295 result = []
@@ -300,6 +334,7 @@ def cursor(self) -> AsyncCursor:
300334 tx_mode = self ._tx_mode ,
301335 tx_context = self ._tx_context ,
302336 table_path_prefix = self .table_path_prefix ,
337+ request_settings = self .request_settings ,
303338 )
304339
305340 async def wait_ready (self , timeout : int = 10 ) -> None :
@@ -325,15 +360,17 @@ async def begin(self) -> None:
325360 @handle_ydb_errors
326361 async def commit (self ) -> None :
327362 if self ._session and self ._tx_context and self ._tx_context .tx_id :
328- await self ._tx_context .commit ()
363+ settings = self ._get_request_settings ()
364+ await self ._tx_context .commit (settings = settings )
329365 await self ._session_pool .release (self ._session )
330366 self ._session = None
331367 self ._tx_context = None
332368
333369 @handle_ydb_errors
334370 async def rollback (self ) -> None :
335371 if self ._session and self ._tx_context and self ._tx_context .tx_id :
336- await self ._tx_context .rollback ()
372+ settings = self ._get_request_settings ()
373+ await self ._tx_context .rollback (settings = settings )
337374 await self ._session_pool .release (self ._session )
338375 self ._session = None
339376 self ._tx_context = None
@@ -351,10 +388,15 @@ async def close(self) -> None:
351388
352389 @handle_ydb_errors
353390 async def describe (self , table_path : str ) -> ydb .TableSchemeEntry :
391+ settings = self ._get_request_settings ()
392+
354393 abs_table_path = posixpath .join (
355394 self .database , self .table_path_prefix , table_path
356395 )
357- return await self ._driver .table_client .describe_table (abs_table_path )
396+ return await self ._driver .table_client .describe_table (
397+ abs_table_path ,
398+ settings = settings ,
399+ )
358400
359401 @handle_ydb_errors
360402 async def check_exists (self , table_path : str ) -> bool :
@@ -371,9 +413,13 @@ async def get_table_names(self) -> list[str]:
371413
372414 async def _check_path_exists (self , table_path : str ) -> bool :
373415 try :
416+ settings = self ._get_request_settings ()
374417
375418 async def callee () -> None :
376- await self ._driver .scheme_client .describe_path (table_path )
419+ await self ._driver .scheme_client .describe_path (
420+ table_path ,
421+ settings = settings ,
422+ )
377423
378424 await retry_operation_async (callee )
379425 except ydb .SchemeError :
@@ -382,9 +428,12 @@ async def callee() -> None:
382428 return True
383429
384430 async def _get_table_names (self , abs_dir_path : str ) -> list [str ]:
431+ settings = self ._get_request_settings ()
432+
385433 async def callee () -> ydb .Directory :
386434 return await self ._driver .scheme_client .list_directory (
387- abs_dir_path
435+ abs_dir_path ,
436+ settings = settings ,
388437 )
389438
390439 directory = await retry_operation_async (callee )
0 commit comments