arpakitlib 1.7.94__py3-none-any.whl → 1.7.95__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,8 @@ def get_operation_for_execution(
31
31
  *,
32
32
  session: Session | None = None,
33
33
  sqlalchemy_db: SQLAlchemyDB | None = None,
34
- filter_operation_types: list[str] | str | None = None
34
+ filter_operation_types: list[str] | str | None = None,
35
+ lock: bool = False
35
36
  ) -> OperationDBM | None:
36
37
  if isinstance(filter_operation_types, str):
37
38
  filter_operation_types = [filter_operation_types]
@@ -44,6 +45,10 @@ def get_operation_for_execution(
44
45
  )
45
46
  if filter_operation_types:
46
47
  query = query.filter(OperationDBM.type.in_(filter_operation_types))
48
+
49
+ if lock:
50
+ query = query.with_for_update()
51
+
47
52
  query = query.order_by(asc(OperationDBM.creation_dt))
48
53
  operation_dbm: OperationDBM | None = query.first()
49
54
  return operation_dbm
@@ -160,7 +165,7 @@ class BaseOperationExecutor:
160
165
 
161
166
  with self.sql_alchemy_db.new_session() as session:
162
167
  operation_dbm: OperationDBM = get_operation_by_id(
163
- session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True
168
+ session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True, lock=True
164
169
  )
165
170
  operation_dbm.execution_start_dt = now_utc_dt()
166
171
  operation_dbm.status = OperationDBM.Statuses.executing
@@ -189,7 +194,7 @@ class BaseOperationExecutor:
189
194
  with self.sql_alchemy_db.new_session() as session:
190
195
 
191
196
  operation_dbm: OperationDBM = get_operation_by_id(
192
- session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True
197
+ session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True, lock=True
193
198
  )
194
199
  operation_dbm.execution_finish_dt = now_utc_dt()
195
200
  if exception:
@@ -251,7 +256,7 @@ class BaseOperationExecutor:
251
256
 
252
257
  with self.sql_alchemy_db.new_session() as session:
253
258
  operation_dbm: OperationDBM = get_operation_by_id(
254
- session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True
259
+ session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True, lock=True
255
260
  )
256
261
  operation_dbm.execution_start_dt = now_utc_dt()
257
262
  operation_dbm.status = OperationDBM.Statuses.executing
@@ -280,7 +285,7 @@ class BaseOperationExecutor:
280
285
  with self.sql_alchemy_db.new_session() as session:
281
286
 
282
287
  operation_dbm: OperationDBM = get_operation_by_id(
283
- session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True
288
+ session=session, filter_operation_id=operation_dbm.id, raise_if_not_found=True, lock=True
284
289
  )
285
290
  operation_dbm.execution_finish_dt = now_utc_dt()
286
291
  if exception:
@@ -352,7 +357,8 @@ class OperationExecutorWorker(BaseWorker):
352
357
  def sync_run(self):
353
358
  operation_dbm: OperationDBM | None = get_operation_for_execution(
354
359
  sqlalchemy_db=self.sqlalchemy_db,
355
- filter_operation_types=self.filter_operation_types
360
+ filter_operation_types=self.filter_operation_types,
361
+ lock=True
356
362
  )
357
363
  if not operation_dbm:
358
364
  return
@@ -371,7 +377,8 @@ class OperationExecutorWorker(BaseWorker):
371
377
  async def async_run(self):
372
378
  operation_dbm: OperationDBM | None = get_operation_for_execution(
373
379
  sqlalchemy_db=self.sqlalchemy_db,
374
- filter_operation_types=self.filter_operation_types
380
+ filter_operation_types=self.filter_operation_types,
381
+ lock=True
375
382
  )
376
383
  if not operation_dbm:
377
384
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arpakitlib
3
- Version: 1.7.94
3
+ Version: 1.7.95
4
4
  Summary: arpakitlib
5
5
  Home-page: https://github.com/ARPAKIT-Company/arpakitlib
6
6
  License: Apache-2.0
@@ -164,7 +164,7 @@ arpakitlib/ar_logging_util.py,sha256=mx3H6CzX9dsh29ruFmYnva8lL6mwvdBXmeHH9E2tvu8
164
164
  arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
165
165
  arpakitlib/ar_need_type_util.py,sha256=GETiREPMEYhch-yU6T--Bdawlbb04Jp1Qy7cOsUlIeA,2228
166
166
  arpakitlib/ar_openai_api_client_util.py,sha256=_XmlApvHFMSyjvZydPa_kASIt9LsFrZmSC7YEzIG8Bg,1806
167
- arpakitlib/ar_operation_execution_util.py,sha256=IxHn-Kv5W5BE-MK7Ok7SEiBaV3UEZK-dyS4HcBiKx2Y,18528
167
+ arpakitlib/ar_operation_execution_util.py,sha256=pSOpYDDT7HE0MgoW3eolJ2bI4eIYI8TUy0jlulmcRHQ,18709
168
168
  arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy4,3447
169
169
  arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
170
170
  arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
@@ -178,9 +178,9 @@ arpakitlib/ar_str_util.py,sha256=tFoGSDYoGpfdVHWor5Li9pEOFmDFlHkX-Z8iOy1LK7Y,353
178
178
  arpakitlib/ar_type_util.py,sha256=s0NsTM7mV3HuwyRwyYLdNn7Ep2HbyI4FIr-dd8x0lfI,3734
179
179
  arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
180
180
  arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
181
- arpakitlib-1.7.94.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
182
- arpakitlib-1.7.94.dist-info/METADATA,sha256=NgOHw48sxSmfiHkvGRrQbEtwEHA-zJakMbaeet98Wko,2824
183
- arpakitlib-1.7.94.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
184
- arpakitlib-1.7.94.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
185
- arpakitlib-1.7.94.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
186
- arpakitlib-1.7.94.dist-info/RECORD,,
181
+ arpakitlib-1.7.95.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
182
+ arpakitlib-1.7.95.dist-info/METADATA,sha256=7AdfJVZL5IKD-fAW1diQvDtisHJlpoQ1EaAxaWbHnEU,2824
183
+ arpakitlib-1.7.95.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
184
+ arpakitlib-1.7.95.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
185
+ arpakitlib-1.7.95.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
186
+ arpakitlib-1.7.95.dist-info/RECORD,,