edu-rdm-integration 3.2.2__py3-none-any.whl → 3.2.3__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.
@@ -318,23 +318,17 @@ class BaseCollectLatestModelsData(BaseCollectModelsData):
318
318
  """
319
319
  logger.info('collect models data..')
320
320
 
321
- managers_max_period_ended_dates = get_collecting_managers_max_period_ended_dates(
321
+ managers_last_period_ended_at = get_collecting_managers_max_period_ended_dates(
322
322
  self._collecting_data_managers.values()
323
323
  )
324
324
 
325
325
  for model_key, manager_class in self._collecting_data_managers.items():
326
326
  model_logs = logs.get(model_key) if logs else None
327
- manager_max_dates = managers_max_period_ended_dates.get(manager_class.uuid, {})
327
+ manager_last_period_ended_at = managers_last_period_ended_at.get(manager_class.uuid)
328
328
 
329
- kwargs['logs_period_started_at'] = (
330
- manager_max_dates.get('max_period_ended_at')
331
- or get_today_min_datetime()
332
- )
329
+ kwargs['logs_period_started_at'] = manager_last_period_ended_at or get_today_min_datetime()
333
330
  kwargs['logs_period_ended_at'] = timezone.now()
334
331
 
335
- if kwargs['logs_period_started_at'] > kwargs['logs_period_ended_at']:
336
- kwargs['logs_period_started_at'] = manager_max_dates['max_started_at']
337
-
338
332
  manager = manager_class(*args, logs=model_logs, **kwargs)
339
333
 
340
334
  if self.command_id:
@@ -367,19 +367,16 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
367
367
  # Массив с выгружаемыми сущностями для поля "Описание" в асинхронной задаче
368
368
  exported_entities = []
369
369
 
370
- managers_max_period_ended_dates = get_exporting_managers_max_period_ended_dates(
370
+ managers_max_period_ended = get_exporting_managers_max_period_ended_dates(
371
371
  self._exporting_data_managers
372
372
  )
373
373
 
374
374
  for manager_class in self._exporting_data_managers:
375
- manager_max_dates = managers_max_period_ended_dates.get(manager_class.uuid, {})
375
+ manager_last_exported = managers_max_period_ended.get(manager_class.uuid)
376
376
 
377
- kwargs['period_started_at'] = manager_max_dates.get('max_period_ended_at') or timezone.now()
377
+ kwargs['period_started_at'] = manager_last_exported or timezone.now()
378
378
  kwargs['period_ended_at'] = get_today_max_datetime()
379
379
 
380
- if kwargs['period_started_at'] > kwargs['period_ended_at']:
381
- kwargs['period_started_at'] = manager_max_dates['max_started_at']
382
-
383
380
  # Обновить поля modified у модели сущности:
384
381
  self._update_model_modified_field(
385
382
  manager_id=manager_class.uuid,
@@ -25,11 +25,13 @@ from django.db import (
25
25
  )
26
26
  from django.db.models import (
27
27
  CharField,
28
- Max,
28
+ OuterRef,
29
29
  QuerySet,
30
+ Subquery,
30
31
  )
31
32
  from django.db.models.functions import (
32
33
  Cast,
34
+ Least,
33
35
  )
34
36
 
35
37
  from educommon import (
@@ -304,51 +306,49 @@ def save_command_log_link(
304
306
 
305
307
  def get_collecting_managers_max_period_ended_dates(
306
308
  collecting_managers: Iterable['BaseCollectingExportedDataRunnerManager'],
307
- ) -> Dict[str, Dict[str, 'datetime']]:
308
- """Возвращает даты и времени последнего успешного этапа сбора для менеджеров Функций сбора."""
309
- managers_max_period_ended_dates = CollectingExportedDataStage.objects.filter(
309
+ ) -> Dict[str, 'datetime']:
310
+ """Возвращает дату и время завершения последнего успешного этапа сбора для менеджеров Функций сбора."""
311
+ managers_last_period_ended = CollectingExportedDataStage.objects.filter(
310
312
  status_id=CollectingDataStageStatus.FINISHED.key,
311
313
  manager_id__in=[manager.uuid for manager in collecting_managers],
312
- ).values(
313
- 'manager_id',
314
+ id=Subquery(
315
+ CollectingExportedDataStage.objects.filter(
316
+ manager_id=OuterRef('manager_id')
317
+ ).order_by('-id').values('id')[:1]
318
+ ),
314
319
  ).annotate(
315
320
  str_manager_id=Cast('manager_id', output_field=CharField()),
316
- max_period_ended_at=Max('logs_period_ended_at'),
317
- max_started_at=Max('started_at'),
321
+ last_period_ended_at=Least('logs_period_ended_at', 'started_at'),
318
322
  ).values_list(
319
- 'str_manager_id', 'max_period_ended_at', 'max_started_at',
323
+ 'str_manager_id', 'last_period_ended_at',
320
324
  )
321
325
 
322
326
  return {
323
- manager_id: {
324
- 'max_period_ended_at': max_period_ended_at,
325
- 'max_started_at': max_started_at,
326
- }
327
- for manager_id, max_period_ended_at, max_started_at in managers_max_period_ended_dates
327
+ manager_id: last_period_ended_at
328
+ for manager_id, last_period_ended_at in managers_last_period_ended
328
329
  }
329
330
 
330
331
 
331
332
  def get_exporting_managers_max_period_ended_dates(
332
333
  exporting_managers: Iterable['BaseExportDataRunnerManager'],
333
- ) -> Dict[str, Dict[str, 'datetime']]:
334
- """Возвращает даты и времени последнего успешного этапа экспорта для менеджеров Функций экспорта."""
335
- managers_max_period_ended_dates = ExportingDataStage.objects.filter(
334
+ ) -> Dict[str, 'datetime']:
335
+ """Возвращает дату и время последнего успешного этапа экспорта для менеджеров Функций экспорта."""
336
+ managers_last_period_ended = ExportingDataStage.objects.filter(
336
337
  status_id=ExportingDataStageStatus.FINISHED.key,
337
338
  manager_id__in=[manager.uuid for manager in exporting_managers],
338
- ).values(
339
- 'manager_id',
339
+ id=Subquery(
340
+ ExportingDataStage.objects.filter(
341
+ manager_id=OuterRef('manager_id')
342
+ ).order_by('-id').values('id')[:1]
343
+ ),
340
344
  ).annotate(
341
345
  str_manager_id=Cast('manager_id', output_field=CharField()),
342
- max_period_ended_at=Max('period_ended_at'),
343
- max_started_at=Max('started_at'),
346
+ last_period_ended_at=Least('period_ended_at', 'started_at'),
344
347
  ).values_list(
345
- 'str_manager_id', 'max_period_ended_at', 'max_started_at',
348
+ 'str_manager_id', 'last_period_ended_at',
346
349
  )
347
350
 
348
351
  return {
349
- manager_id: {
350
- 'max_period_ended_at': max_period_ended_at,
351
- 'max_started_at': max_started_at,
352
- }
353
- for manager_id, max_period_ended_at, max_started_at in managers_max_period_ended_dates
352
+ manager_id: last_period_ended_at
353
+ for manager_id, last_period_ended_at in managers_last_period_ended
354
354
  }
@@ -310,12 +310,9 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
310
310
  or get_today_min_datetime()
311
311
  )
312
312
 
313
- period_started_at = manager_last_collected['max_period_ended_at']
313
+ period_started_at = manager_last_collected
314
314
  period_ended_at = timezone.now()
315
315
 
316
- if period_started_at >= period_ended_at:
317
- period_started_at = manager_last_collected['max_started_at']
318
-
319
316
  return EduRdmCollectDataCommandProgress.objects.create(
320
317
  model_id=model,
321
318
  logs_period_started_at=period_started_at,
@@ -330,12 +327,9 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
330
327
  manager_last_exported = self._exporting_data_manager_to_period_end.get(manager.uuid)
331
328
 
332
329
  if manager_last_exported:
333
- period_started_at = manager_last_exported['max_period_ended_at']
330
+ period_started_at = manager_last_exported
334
331
  period_ended_at = timezone.now()
335
332
 
336
- if period_started_at >= period_ended_at:
337
- period_started_at = manager_last_exported['max_started_at']
338
-
339
333
  return EduRdmExportDataCommandProgress.objects.create(
340
334
  entity_id=entity,
341
335
  period_started_at=period_started_at,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 3.2.2
3
+ Version: 3.2.3
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -301,6 +301,16 @@ Requires-Dist: uploader-client <1,>=0.2.1
301
301
 
302
302
  ### Удалено
303
303
 
304
+
305
+ ## 3.2.3 - 2024-06-06
306
+ Внесены корректировки в запросы используемые в функциях get_collecting_managers_max_period_ended_dates и get_exporting_managers_max_period_ended_dates.
307
+
308
+ ### Изменено
309
+ - [EDUSCHL-21804](https://jira.bars.group/browse/EDUSCHL-21804)
310
+ PATCH Внесены корректировки в запросы используемые в функциях get_collecting_managers_max_period_ended_dates и get_exporting_managers_max_period_ended_dates.
311
+ Дата и время окончания предыдущего сбора/экспорта могла быть не корректно определена.
312
+
313
+
304
314
  ## 3.2.2 - 2024-05-21
305
315
  Изменения в переодической задаче TransferLatestEntitiesDataPeriodicTask,
306
316
  Изменено определение даты последнего успешного этапа сбора у менеджеров Функций сбора и экспорта.
@@ -6,12 +6,12 @@ edu_rdm_integration/base.py,sha256=_G0qPTAXe6bXfgDHNiZMSsYt3sMuUhLKnHuQCWSFttU,1
6
6
  edu_rdm_integration/consts.py,sha256=FFwcMHNsfjP_s9LfkccLAHjJMEMp7ppPmrRlJcgV88k,1104
7
7
  edu_rdm_integration/entities.py,sha256=qNVWUhjwvX298Ak86_AKmqBZioP0czGwBcAz_4dtUUE,14552
8
8
  edu_rdm_integration/enums.py,sha256=T3Mu5D-CbKO3BSg16MPPnIPlcc_YGLYR-ThS8dzl9gg,4246
9
- edu_rdm_integration/helpers.py,sha256=pGgefbVCsi4-qb4KTy8ONV3gVNKx-FiJibFkK6hKzMM,13725
9
+ edu_rdm_integration/helpers.py,sha256=lUJv8X8gCY-w2SfcyOShNRtydOTJe0dGHN4h2Y6elqk,13715
10
10
  edu_rdm_integration/mapping.py,sha256=bwa2fJCbV4YjQcAgRrgT3hgM6dJhr_uBtQgx3L3F2Ck,473
11
11
  edu_rdm_integration/models.py,sha256=Wg8NYj4C6Xqw-15AsQGU0TWNzUjdwBW_YZDzmPqx3GY,29327
12
12
  edu_rdm_integration/signals.py,sha256=3eRlpkDcFCF6TN80-QM8yBYLcyozzcmoPjz6r4_ApWg,73
13
13
  edu_rdm_integration/storages.py,sha256=o5WqUG7SnkeuMt-z8spUi-IraivST-7KHzfY-M3v7FA,6807
14
- edu_rdm_integration/tasks.py,sha256=LPbEbfRtEwYlfneLrMvE3EnyN0B52qwnwMUEAIFgQDs,14998
14
+ edu_rdm_integration/tasks.py,sha256=PEqJeuGaWA_GgE4N6RU57dj-p2hRzGqYmKLRdSg2otQ,14699
15
15
  edu_rdm_integration/utils.py,sha256=-my8q9fude6Nc9r_qUDww-8QaU2tcv-xOexewYqOPJw,10369
16
16
  edu_rdm_integration/adapters/__init__.py,sha256=cU0swn4Ny5ZQz5buWRcWsT1mpWuUFJaUlHf2l7TtEBo,83
17
17
  edu_rdm_integration/adapters/apps.py,sha256=TyJTkSPs2qAHJ11fqbwLGk3Ea7ujtqWwbxqmvYNQxG8,363
@@ -37,7 +37,7 @@ edu_rdm_integration/collect_and_export_data/utils.py,sha256=lBWqqhLgMyz2IQN7r9zu
37
37
  edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py,sha256=UkoaXzh3tokZ8QdCdB09v3rRZfcHhvEwNMuj3mQIB74,4714
38
38
  edu_rdm_integration/collect_and_export_data/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  edu_rdm_integration/collect_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- edu_rdm_integration/collect_data/collect.py,sha256=i5kf__jrlBOIZC2rRD-CHXn2HeAKWpQXrqxQg-fk94M,13596
40
+ edu_rdm_integration/collect_data/collect.py,sha256=UR4thiSJ4qFCgMRpJxKtylP5fcrtvxK2Q4FLZSSkN_4,13365
41
41
  edu_rdm_integration/collect_data/generators.py,sha256=f34AAwdEcQNIokX0ypqYgjRD1XolwBVLER_HYv9ibNw,9075
42
42
  edu_rdm_integration/collect_data/helpers.py,sha256=gAFZAm9YhMtQhvlwSF3LMthPPa8LsqG_zbVe7vnW_Ag,2995
43
43
  edu_rdm_integration/collect_data/tests.py,sha256=-UNX3-GL0H9i89GXRfICT0ABltn_9aN_I_cmn1gQcDA,5367
@@ -85,7 +85,7 @@ edu_rdm_integration/enum_register/mixins.py,sha256=nmHue9-9bqKZn9_MFiL0E-5wBUBIZ
85
85
  edu_rdm_integration/enum_register/register.py,sha256=5OWOjK-M0Erd_5CENpBaXhVtfL0pEaDl3Bev5QKNDJc,2218
86
86
  edu_rdm_integration/export_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  edu_rdm_integration/export_data/consts.py,sha256=Z6Uho8oViMc0t1tyQFZfrPFBwPx6KnhUf_iZ0qgob8o,16
88
- edu_rdm_integration/export_data/export.py,sha256=AAN_DqOAPENKEtlbnMF2j4CPmkoy57vJQ8t2yQRZtrM,16595
88
+ edu_rdm_integration/export_data/export.py,sha256=3d1POl4xzyh4GVXJYdkXkcyfiUIqsrlPKPO-apw30Uk,16405
89
89
  edu_rdm_integration/export_data/generators.py,sha256=yLDOcHB1PoilJwXtKGxZQhDjpeKBzEWoosahbJJ4Ba4,4020
90
90
  edu_rdm_integration/export_data/helpers.py,sha256=hU346RmQ17Ra2etFvxXI7JQlLyp_0KxH1jm-eeCqejc,2933
91
91
  edu_rdm_integration/export_data/strategies.py,sha256=ocHskG-x54U-ESX56OlZPgOibkGkuv7VKmK7hVmqj_0,6725
@@ -162,9 +162,9 @@ edu_rdm_integration/uploader_log/apps.py,sha256=tYJj4-sDlq8fLOSvw18L_yys7SILpTKW
162
162
  edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJLdsGmr3SXwH_U,266
163
163
  edu_rdm_integration/uploader_log/managers.py,sha256=y5wTSMzF9hpOpIU_A7nIafL_LBU3QEie6LAYWoB-pBQ,3203
164
164
  edu_rdm_integration/uploader_log/ui.py,sha256=YM9Buqp2wxE95Wf5gvAATBzuYzDOossK1sEmvFk07cI,2110
165
- edu_rdm_integration-3.2.2.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
166
- edu_rdm_integration-3.2.2.dist-info/METADATA,sha256=pf2mWm6W814a7FE1IGxpN0bhvun_2q7Zm0dmi1k6SHQ,65013
167
- edu_rdm_integration-3.2.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
168
- edu_rdm_integration-3.2.2.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
169
- edu_rdm_integration-3.2.2.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
170
- edu_rdm_integration-3.2.2.dist-info/RECORD,,
165
+ edu_rdm_integration-3.2.3.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
166
+ edu_rdm_integration-3.2.3.dist-info/METADATA,sha256=gDOXDSYZhHOgHPJgrkZPEzWC4NFV8oZX_hbIaVoORjk,65697
167
+ edu_rdm_integration-3.2.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
168
+ edu_rdm_integration-3.2.3.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
169
+ edu_rdm_integration-3.2.3.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
170
+ edu_rdm_integration-3.2.3.dist-info/RECORD,,