edu-rdm-integration 1.0.0__py3-none-any.whl → 1.0.2__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.
- edu_rdm_integration/app_settings.py +3 -0
- edu_rdm_integration/collect_data/collect.py +26 -23
- edu_rdm_integration/export_data/export.py +13 -3
- {edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/METADATA +29 -1
- {edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/RECORD +9 -9
- {edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/LICENSE +0 -0
- {edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/namespace_packages.txt +0 -0
- {edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/top_level.txt +0 -0
@@ -11,6 +11,9 @@ RDM_COLLECT_CHUNK_SIZE = 500
|
|
11
11
|
# Количество записей моделей обрабатываемых за одну итерацию экспорта
|
12
12
|
RDM_EXPORT_CHUNK_SIZE = 500
|
13
13
|
|
14
|
+
# Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
|
15
|
+
RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE = 5_000
|
16
|
+
|
14
17
|
|
15
18
|
# Загрузка данных в Региональную витрину данных (РВД)
|
16
19
|
# Адрес витрины (schema://host:port)
|
@@ -21,6 +21,10 @@ from django.conf import (
|
|
21
21
|
from django.db.models import (
|
22
22
|
F,
|
23
23
|
Max,
|
24
|
+
CharField,
|
25
|
+
)
|
26
|
+
from django.db.models.functions import (
|
27
|
+
Cast,
|
24
28
|
)
|
25
29
|
from django.utils import (
|
26
30
|
timezone,
|
@@ -45,9 +49,6 @@ from m3_db_utils.models import (
|
|
45
49
|
ModelEnumValue,
|
46
50
|
)
|
47
51
|
|
48
|
-
from edu_rdm_integration.app_settings import (
|
49
|
-
RDM_TRANSFER_TASK_TIMEDELTA,
|
50
|
-
)
|
51
52
|
from edu_rdm_integration.base import (
|
52
53
|
BaseOperationData,
|
53
54
|
)
|
@@ -317,23 +318,26 @@ class BaseCollectLatestModelsData(BaseCollectModelsData):
|
|
317
318
|
|
318
319
|
return stage_created_or_in_progress
|
319
320
|
|
320
|
-
def
|
321
|
+
def _get_last_model_date(self, date_field: str) -> Dict[str, datetime]:
|
321
322
|
"""
|
322
|
-
Возвращает словарь с uuid менеджера и датой
|
323
|
+
Возвращает словарь с uuid менеджера и крайней датой из переданного поля по указанным моделям.
|
323
324
|
"""
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
325
|
+
manager_to_start_date = dict(
|
326
|
+
CollectingExportedDataSubStage.objects.annotate(
|
327
|
+
max_date=Max(f'stage__{date_field}'),
|
328
|
+
).values(
|
329
|
+
'stage__manager_id', 'max_date',
|
330
|
+
).annotate(
|
331
|
+
manager_id=Cast('stage__manager_id', output_field=CharField()),
|
332
|
+
date=F('max_date'),
|
333
|
+
).filter(
|
334
|
+
status_id=CollectingDataSubStageStatus.READY_TO_EXPORT.key,
|
335
|
+
manager_id__in=(m.uuid for m in
|
336
|
+
self._collecting_data_managers.values()),
|
337
|
+
).values_list('manager_id', 'date')
|
338
|
+
)
|
339
|
+
|
340
|
+
return manager_to_start_date
|
337
341
|
|
338
342
|
def _collect_models_data(self, *args, logs: Optional[Dict[str, List[AuditLog]]] = None, **kwargs) -> None:
|
339
343
|
"""
|
@@ -341,21 +345,20 @@ class BaseCollectLatestModelsData(BaseCollectModelsData):
|
|
341
345
|
"""
|
342
346
|
logger.info('collect models data..')
|
343
347
|
|
344
|
-
|
348
|
+
last_finished_model_upload = self._get_last_model_date('logs_period_ended_at')
|
349
|
+
last_model_start = self._get_last_model_date('started_at')
|
345
350
|
|
346
351
|
for model_key, manager_class in self._collecting_data_managers.items():
|
347
352
|
model_logs = logs.get(model_key) if logs else None
|
348
353
|
|
349
354
|
kwargs['logs_period_started_at'] = (
|
350
|
-
|
355
|
+
last_finished_model_upload.get(manager_class.uuid)
|
351
356
|
or get_today_min_datetime()
|
352
357
|
)
|
353
358
|
kwargs['logs_period_ended_at'] = timezone.now()
|
354
359
|
|
355
360
|
if kwargs['logs_period_started_at'] > kwargs['logs_period_ended_at']:
|
356
|
-
kwargs['logs_period_started_at'] =
|
357
|
-
seconds=RDM_TRANSFER_TASK_TIMEDELTA,
|
358
|
-
)
|
361
|
+
kwargs['logs_period_started_at'] = last_model_start.get(manager_class.uuid)
|
359
362
|
|
360
363
|
manager = manager_class(*args, logs=model_logs, **kwargs)
|
361
364
|
|
@@ -50,6 +50,9 @@ from educommon.async_task.models import (
|
|
50
50
|
from educommon.utils.date import (
|
51
51
|
get_today_max_datetime,
|
52
52
|
)
|
53
|
+
from educommon.utils.seqtools import (
|
54
|
+
make_chunks,
|
55
|
+
)
|
53
56
|
from function_tools.managers import (
|
54
57
|
RunnerManager,
|
55
58
|
)
|
@@ -339,9 +342,16 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
|
|
339
342
|
),
|
340
343
|
)
|
341
344
|
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
+
for queryset in querysets_to_update:
|
346
|
+
not_exported_model_ids = queryset.values_list('id', flat=True)
|
347
|
+
|
348
|
+
with atomic():
|
349
|
+
|
350
|
+
for model_ids in make_chunks(
|
351
|
+
iterable=not_exported_model_ids,
|
352
|
+
size=settings.RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE,
|
353
|
+
):
|
354
|
+
queryset.filter(id__in=model_ids).update(modified=now)
|
345
355
|
|
346
356
|
def _calculate_last_finished_entity_export(self) -> Dict[str, datetime]:
|
347
357
|
"""Находит левую границу экспорта данных для сущностей."""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.2
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Home-page:
|
6
6
|
Download-URL:
|
@@ -138,6 +138,9 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
138
138
|
|
139
139
|
# Количество записей моделей обрабатываемых за одну итерацию экспорта данных
|
140
140
|
RDM_EXPORT_CHUNK_SIZE = conf.get_int('rdm_general', 'EXPORT_CHUNK_SIZE')
|
141
|
+
|
142
|
+
# Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
|
143
|
+
RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE = conf.get_int('rdm_general', 'UPDATE_NON_EXPORTED_CHUNK_SIZE')
|
141
144
|
|
142
145
|
# Настройка запуска периодической задачи выгрузки данных:
|
143
146
|
RDM_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task', 'MINUTE')
|
@@ -181,6 +184,7 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
181
184
|
| UPLOADS | Основная директория в MEDIA, в которой будет создана директория edu_rdm_integration для сохранения файлов для дальнейшей выгрузки | 500 |
|
182
185
|
| RDM_COLLECT_CHUNK_SIZE | Количество записей моделей обрабатываемых за одну итерацию сбора данных | 500 |
|
183
186
|
| RDM_EXPORT_CHUNK_SIZE | Количество записей моделей обрабатываемых за одну итерацию экспорта | 500 |
|
187
|
+
| RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE | # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified | 5000 |
|
184
188
|
| RDM_UPLOADER_CLIENT_URL | Адрес витрины (schema://host:port) | 'http://localhost:8090' |
|
185
189
|
| RDM_UPLOADER_CLIENT_DATAMART_NAME | Мнемоника Витрины | 'test' |
|
186
190
|
| RDM_UPLOADER_CLIENT_REQUEST_RETRIES | Количество повторных попыток запроса | 10 |
|
@@ -209,6 +213,8 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
209
213
|
EXPORT_CHUNK_SIZE = 500
|
210
214
|
# Количество записей моделей ЭШ обрабатываемых за одну итерацию сбора данных
|
211
215
|
COLLECT_CHUNK_SIZE = 500
|
216
|
+
# Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
|
217
|
+
UPDATE_NON_EXPORTED_CHUNK_SIZE = 5_000
|
212
218
|
|
213
219
|
# Настройка запуска периодической задачи выгрузки данных
|
214
220
|
[rdm_transfer_task]
|
@@ -289,6 +295,28 @@ Requires-Dist: uploader-client <1,>=0.2.1
|
|
289
295
|
### Удалено
|
290
296
|
|
291
297
|
|
298
|
+
## [1.0.2] - 2024-03-06
|
299
|
+
|
300
|
+
Добавлено разбиение на чанки запроса на обновление поля modified у невыгруженных записей,
|
301
|
+
при запуске команды `export_latest_entities_data`.
|
302
|
+
|
303
|
+
### Исправлено
|
304
|
+
|
305
|
+
- [EDUSCHL-21572](https://jira.bars.group/browse/EDUSCHL-21572)
|
306
|
+
PATCH Добавлено разбиение на чанки запроса на обновление в методе `_update_model_modified_field`
|
307
|
+
класса `BaseExportLatestEntitiesData`.
|
308
|
+
|
309
|
+
|
310
|
+
## [1.0.1] - 2024-02-20
|
311
|
+
|
312
|
+
Исправлено ограничение сбора логов периодом `RDM_TRANSFER_TASK_TIMEDELTA` в `BaseCollectLatestModelsData`
|
313
|
+
|
314
|
+
### Исправлено
|
315
|
+
|
316
|
+
- [EDUSCHL-21413](https://jira.bars.group/browse/EDUSCHL-21413)
|
317
|
+
PATCH Исправлено ограничение сбора логов периодом `RDM_TRANSFER_TASK_TIMEDELTA` в `BaseCollectLatestModelsData`
|
318
|
+
|
319
|
+
|
292
320
|
## [1.0.0] - 2024-01-31
|
293
321
|
|
294
322
|
Удален дублирующийся клаcc `LogChange` из `collect_data.non_calculated.base.caches`.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
edu_rdm_integration/__init__.py,sha256=fVCvQ7QGI_iCyAeE8dMapyY8gOM617ye5GQqAVGPlZI,72
|
2
2
|
edu_rdm_integration/app_meta.py,sha256=v5IU69yaeLbyHF0Ln6iPN_IfizbtF3rCWrz2n71m8dU,337
|
3
|
-
edu_rdm_integration/app_settings.py,sha256=
|
3
|
+
edu_rdm_integration/app_settings.py,sha256=PK-hjkGIwbSqgKdJKoTdryk6nt-OOGLIKSzPYXCzmYE,2056
|
4
4
|
edu_rdm_integration/apps.py,sha256=5OgNdmuqe26fbu4wYb69haQJe-XFO_rDbnU1vPqJU-U,3571
|
5
5
|
edu_rdm_integration/base.py,sha256=_G0qPTAXe6bXfgDHNiZMSsYt3sMuUhLKnHuQCWSFttU,1341
|
6
6
|
edu_rdm_integration/consts.py,sha256=FFwcMHNsfjP_s9LfkccLAHjJMEMp7ppPmrRlJcgV88k,1104
|
@@ -31,7 +31,7 @@ edu_rdm_integration/adapters/strings.py,sha256=-k9dex8A7hCpkzUkudVkKRAbNRuuqog2h
|
|
31
31
|
edu_rdm_integration/adapters/tests.py,sha256=MoRY-a75Ow-7EjeQYxkXWunwqTGuBMaUyEkEV2oy05I,59
|
32
32
|
edu_rdm_integration/adapters/validators.py,sha256=LJWnCY8PtXDOj-fm3fBWjQYsHsSLfyKf_D97pqPv73s,496
|
33
33
|
edu_rdm_integration/collect_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
|
-
edu_rdm_integration/collect_data/collect.py,sha256=
|
34
|
+
edu_rdm_integration/collect_data/collect.py,sha256=n73jmtVoJ-0VHShqL8Aqoo5TiOpcjJYIMY5YZ4Qtqxs,14499
|
35
35
|
edu_rdm_integration/collect_data/generators.py,sha256=61DdPF8d0BRmvGJSYVA7wz3HmDpbbdStU4lBoJ0sUdY,9053
|
36
36
|
edu_rdm_integration/collect_data/helpers.py,sha256=pthYW-ugOww5TveWxONYcJby2VwWG6goJwbdTkNdVUU,3009
|
37
37
|
edu_rdm_integration/collect_data/tests.py,sha256=vAvNRe23ep2JsBcEE0VjoOqwgFN3QmKE552iZgvbWdM,5378
|
@@ -79,7 +79,7 @@ edu_rdm_integration/enum_register/mixins.py,sha256=shLb8-9ySoY9kK1Wzb46I9wRKglQI
|
|
79
79
|
edu_rdm_integration/enum_register/register.py,sha256=5OWOjK-M0Erd_5CENpBaXhVtfL0pEaDl3Bev5QKNDJc,2218
|
80
80
|
edu_rdm_integration/export_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
81
|
edu_rdm_integration/export_data/consts.py,sha256=Z6Uho8oViMc0t1tyQFZfrPFBwPx6KnhUf_iZ0qgob8o,16
|
82
|
-
edu_rdm_integration/export_data/export.py,sha256=
|
82
|
+
edu_rdm_integration/export_data/export.py,sha256=m1C2gmpQb_Dlr9qtYplHSTJOtU-Ll1d9S5tzPGp73os,17231
|
83
83
|
edu_rdm_integration/export_data/generators.py,sha256=yLDOcHB1PoilJwXtKGxZQhDjpeKBzEWoosahbJJ4Ba4,4020
|
84
84
|
edu_rdm_integration/export_data/helpers.py,sha256=hU346RmQ17Ra2etFvxXI7JQlLyp_0KxH1jm-eeCqejc,2933
|
85
85
|
edu_rdm_integration/export_data/strategies.py,sha256=ocHskG-x54U-ESX56OlZPgOibkGkuv7VKmK7hVmqj_0,6725
|
@@ -156,9 +156,9 @@ edu_rdm_integration/uploader_log/apps.py,sha256=tYJj4-sDlq8fLOSvw18L_yys7SILpTKW
|
|
156
156
|
edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJLdsGmr3SXwH_U,266
|
157
157
|
edu_rdm_integration/uploader_log/managers.py,sha256=y5wTSMzF9hpOpIU_A7nIafL_LBU3QEie6LAYWoB-pBQ,3203
|
158
158
|
edu_rdm_integration/uploader_log/ui.py,sha256=YM9Buqp2wxE95Wf5gvAATBzuYzDOossK1sEmvFk07cI,2110
|
159
|
-
edu_rdm_integration-1.0.
|
160
|
-
edu_rdm_integration-1.0.
|
161
|
-
edu_rdm_integration-1.0.
|
162
|
-
edu_rdm_integration-1.0.
|
163
|
-
edu_rdm_integration-1.0.
|
164
|
-
edu_rdm_integration-1.0.
|
159
|
+
edu_rdm_integration-1.0.2.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
|
160
|
+
edu_rdm_integration-1.0.2.dist-info/METADATA,sha256=tND-Xftw5QICLhRSKrGcEZoZ3JV3sEfU50Rk5ebK9O0,55202
|
161
|
+
edu_rdm_integration-1.0.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
162
|
+
edu_rdm_integration-1.0.2.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
163
|
+
edu_rdm_integration-1.0.2.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
|
164
|
+
edu_rdm_integration-1.0.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{edu_rdm_integration-1.0.0.dist-info → edu_rdm_integration-1.0.2.dist-info}/namespace_packages.txt
RENAMED
File without changes
|
File without changes
|