18
18
from .errors import InternalError
19
19
from .errors import NotSupportedError
20
20
from .utils import handle_ydb_errors
21
+ from .utils import maybe_get_current_trace_id
21
22
22
23
23
24
class IsolationLevel (str , Enum ):
@@ -101,6 +102,9 @@ def __init__(
101
102
self ._session_pool = self ._pool_cls (self ._driver , size = 5 )
102
103
103
104
self ._session : ydb .QuerySession | ydb .aio .QuerySession | None = None
105
+ self .request_settings : ydb .BaseRequestSettings = (
106
+ ydb .BaseRequestSettings ()
107
+ )
104
108
105
109
def set_isolation_level (self , isolation_level : IsolationLevel ) -> None :
106
110
if self ._tx_context and self ._tx_context .tx_id :
@@ -129,6 +133,20 @@ def get_isolation_level(self) -> str:
129
133
msg = f"{ self ._tx_mode .name } is not supported"
130
134
raise NotSupportedError (msg )
131
135
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
+
132
150
def _get_client_settings (self ) -> ydb .QueryClientSettings :
133
151
return (
134
152
ydb .QueryClientSettings ()
@@ -172,6 +190,7 @@ def cursor(self) -> Cursor:
172
190
tx_mode = self ._tx_mode ,
173
191
tx_context = self ._tx_context ,
174
192
table_path_prefix = self .table_path_prefix ,
193
+ request_settings = self .request_settings ,
175
194
)
176
195
177
196
def wait_ready (self , timeout : int = 10 ) -> None :
@@ -197,15 +216,17 @@ def begin(self) -> None:
197
216
@handle_ydb_errors
198
217
def commit (self ) -> None :
199
218
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 )
201
221
self ._session_pool .release (self ._session )
202
222
self ._tx_context = None
203
223
self ._session = None
204
224
205
225
@handle_ydb_errors
206
226
def rollback (self ) -> None :
207
227
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 )
209
230
self ._session_pool .release (self ._session )
210
231
self ._tx_context = None
211
232
self ._session = None
@@ -223,10 +244,15 @@ def close(self) -> None:
223
244
224
245
@handle_ydb_errors
225
246
def describe (self , table_path : str ) -> ydb .TableSchemeEntry :
247
+ settings = self ._get_request_settings ()
248
+
226
249
abs_table_path = posixpath .join (
227
250
self .database , self .table_path_prefix , table_path
228
251
)
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
+ )
230
256
231
257
@handle_ydb_errors
232
258
def check_exists (self , table_path : str ) -> bool :
@@ -243,9 +269,12 @@ def get_table_names(self) -> list[str]:
243
269
244
270
def _check_path_exists (self , table_path : str ) -> bool :
245
271
try :
272
+ settings = self ._get_request_settings ()
246
273
247
274
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
+ )
249
278
250
279
retry_operation_sync (callee )
251
280
except ydb .SchemeError :
@@ -254,8 +283,13 @@ def callee() -> None:
254
283
return True
255
284
256
285
def _get_table_names (self , abs_dir_path : str ) -> list [str ]:
286
+ settings = self ._get_request_settings ()
287
+
257
288
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
+ )
259
293
260
294
directory = retry_operation_sync (callee )
261
295
result = []
@@ -300,6 +334,7 @@ def cursor(self) -> AsyncCursor:
300
334
tx_mode = self ._tx_mode ,
301
335
tx_context = self ._tx_context ,
302
336
table_path_prefix = self .table_path_prefix ,
337
+ request_settings = self .request_settings ,
303
338
)
304
339
305
340
async def wait_ready (self , timeout : int = 10 ) -> None :
@@ -325,15 +360,17 @@ async def begin(self) -> None:
325
360
@handle_ydb_errors
326
361
async def commit (self ) -> None :
327
362
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 )
329
365
await self ._session_pool .release (self ._session )
330
366
self ._session = None
331
367
self ._tx_context = None
332
368
333
369
@handle_ydb_errors
334
370
async def rollback (self ) -> None :
335
371
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 )
337
374
await self ._session_pool .release (self ._session )
338
375
self ._session = None
339
376
self ._tx_context = None
@@ -351,10 +388,15 @@ async def close(self) -> None:
351
388
352
389
@handle_ydb_errors
353
390
async def describe (self , table_path : str ) -> ydb .TableSchemeEntry :
391
+ settings = self ._get_request_settings ()
392
+
354
393
abs_table_path = posixpath .join (
355
394
self .database , self .table_path_prefix , table_path
356
395
)
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
+ )
358
400
359
401
@handle_ydb_errors
360
402
async def check_exists (self , table_path : str ) -> bool :
@@ -371,9 +413,13 @@ async def get_table_names(self) -> list[str]:
371
413
372
414
async def _check_path_exists (self , table_path : str ) -> bool :
373
415
try :
416
+ settings = self ._get_request_settings ()
374
417
375
418
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
+ )
377
423
378
424
await retry_operation_async (callee )
379
425
except ydb .SchemeError :
@@ -382,9 +428,12 @@ async def callee() -> None:
382
428
return True
383
429
384
430
async def _get_table_names (self , abs_dir_path : str ) -> list [str ]:
431
+ settings = self ._get_request_settings ()
432
+
385
433
async def callee () -> ydb .Directory :
386
434
return await self ._driver .scheme_client .list_directory (
387
- abs_dir_path
435
+ abs_dir_path ,
436
+ settings = settings ,
388
437
)
389
438
390
439
directory = await retry_operation_async (callee )
0 commit comments