edu-rdm-integration 3.9.1__py3-none-any.whl → 3.9.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/export_data/export.py +25 -48
- {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.9.2.dist-info}/METADATA +1 -1
- {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.9.2.dist-info}/RECORD +6 -6
- {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.9.2.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.9.2.dist-info}/licenses/LICENSE +0 -0
- {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.9.2.dist-info}/top_level.txt +0 -0
@@ -28,6 +28,7 @@ from django.db.models.base import (
|
|
28
28
|
)
|
29
29
|
from django.db.models.functions import (
|
30
30
|
Concat,
|
31
|
+
Substr,
|
31
32
|
)
|
32
33
|
from django.db.transaction import (
|
33
34
|
atomic,
|
@@ -131,9 +132,7 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
131
132
|
|
132
133
|
@property
|
133
134
|
def _log_file_path(self) -> str:
|
134
|
-
"""
|
135
|
-
Путь до лог файла.
|
136
|
-
"""
|
135
|
+
"""Путь до лог файла."""
|
137
136
|
return os.path.join(settings.MEDIA_ROOT, settings.RDM_EXPORT_LOG_DIR, f'{self.command_id}.log')
|
138
137
|
|
139
138
|
def _has_stage_created_or_in_progress(self, manager_id: str, entity: str) -> bool:
|
@@ -149,14 +148,10 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
149
148
|
return stage_created_or_in_progress
|
150
149
|
|
151
150
|
def _fill_manager_entities_map(self, entity_storage: RegionalDataMartEntityStorage) -> None:
|
152
|
-
"""
|
153
|
-
Заполнение словаря данных с классами менеджеров и их сущностями.
|
154
|
-
"""
|
151
|
+
"""Заполнение словаря данных с классами менеджеров и их сущностями."""
|
155
152
|
|
156
153
|
def _find_exporting_entities_data_managers(self):
|
157
|
-
"""
|
158
|
-
Поиск менеджеров Функций выгрузки данных по сущностям РВД.
|
159
|
-
"""
|
154
|
+
"""Поиск менеджеров Функций выгрузки данных по сущностям РВД."""
|
160
155
|
logger.info('find exporting entities data manager..')
|
161
156
|
|
162
157
|
entity_storage = RegionalDataMartEntityStorage()
|
@@ -179,9 +174,7 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
179
174
|
logger.info('finding exporting entities data manager finished.')
|
180
175
|
|
181
176
|
def _export_entities_data(self, *args, **kwargs):
|
182
|
-
"""
|
183
|
-
Выгрузка данных по указанным сущностям.
|
184
|
-
"""
|
177
|
+
"""Выгрузка данных по указанным сущностям."""
|
185
178
|
logger.info('start exporting entities data..')
|
186
179
|
|
187
180
|
kwargs['period_started_at'] = self.period_started_at
|
@@ -201,9 +194,7 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
201
194
|
logger.info('exporting entities data finished.')
|
202
195
|
|
203
196
|
def _export(self, *args, **kwargs):
|
204
|
-
"""
|
205
|
-
Выполнение действий команды.
|
206
|
-
"""
|
197
|
+
"""Выполнение действий команды."""
|
207
198
|
logger.info(f'start exporting data of entities - {", ".join([entity.key for entity in self.entities])}..')
|
208
199
|
|
209
200
|
self._find_exporting_entities_data_managers()
|
@@ -212,9 +203,7 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
212
203
|
logger.info('exporting entities data finished.')
|
213
204
|
|
214
205
|
def export(self, *args, **kwargs):
|
215
|
-
"""
|
216
|
-
Запускает экспорт данных.
|
217
|
-
"""
|
206
|
+
"""Запускает экспорт данных."""
|
218
207
|
try:
|
219
208
|
self._export(*args, **kwargs)
|
220
209
|
except Exception as err:
|
@@ -254,19 +243,18 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
|
|
254
243
|
def _set_description_to_async_task(self, exported_entities: Iterable[str]) -> None:
|
255
244
|
"""Добавляет в описание асинхронной задачи список выгруженных сущностей."""
|
256
245
|
if exported_entities and self.task_id:
|
257
|
-
|
258
|
-
|
259
|
-
).update(
|
260
|
-
description=
|
261
|
-
'description',
|
262
|
-
|
263
|
-
|
246
|
+
entities_str = ', '.join(exported_entities)
|
247
|
+
|
248
|
+
self.async_task.objects.filter(pk=self.task_id).update(
|
249
|
+
description=Substr(
|
250
|
+
Concat('description', Value(f': {entities_str}')),
|
251
|
+
1,
|
252
|
+
self.async_task._meta.get_field('description').max_length
|
253
|
+
)
|
264
254
|
)
|
265
255
|
|
266
256
|
def _fill_manager_entities_map(self, entity_storage: RegionalDataMartEntityStorage) -> None:
|
267
|
-
"""
|
268
|
-
Заполнение словаря данных с классами менеджеров и их сущностями.
|
269
|
-
"""
|
257
|
+
"""Заполнение словаря данных с классами менеджеров и их сущностями."""
|
270
258
|
self._manager_entities_map = entity_storage.prepare_manager_entities_map(
|
271
259
|
tags={REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA},
|
272
260
|
)
|
@@ -300,7 +288,6 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
|
|
300
288
|
not_exported_model_ids = queryset.values_list('id', flat=True).iterator()
|
301
289
|
|
302
290
|
with atomic():
|
303
|
-
|
304
291
|
for model_ids in make_chunks(
|
305
292
|
iterable=not_exported_model_ids,
|
306
293
|
size=settings.RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE,
|
@@ -308,17 +295,13 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
|
|
308
295
|
queryset.filter(id__in=model_ids).update(modified=now)
|
309
296
|
|
310
297
|
def _export_entities_data(self, *args, **kwargs) -> None:
|
311
|
-
"""
|
312
|
-
Запуск Функций по для экспорта данных.
|
313
|
-
"""
|
298
|
+
"""Запуск Функций по для экспорта данных."""
|
314
299
|
logger.info('export entities data..')
|
315
300
|
|
316
301
|
# Массив с выгружаемыми сущностями для поля "Описание" в асинхронной задаче
|
317
302
|
exported_entities = []
|
318
303
|
|
319
|
-
managers_max_period_ended = get_exporting_managers_max_period_ended_dates(
|
320
|
-
self._exporting_data_managers
|
321
|
-
)
|
304
|
+
managers_max_period_ended = get_exporting_managers_max_period_ended_dates(self._exporting_data_managers)
|
322
305
|
|
323
306
|
for manager_class in self._exporting_data_managers:
|
324
307
|
manager_last_exported = managers_max_period_ended.get(manager_class.uuid)
|
@@ -381,19 +364,16 @@ class UploadData(BaseOperationData):
|
|
381
364
|
self.result = {
|
382
365
|
'total_file_size': 0, # Общий размер отправленных файлов
|
383
366
|
'queue_is_full': False, # Признак переполнения очереди
|
384
|
-
'uploaded_entities': '' # Список сущностей, попавших в выгрузку
|
367
|
+
'uploaded_entities': '', # Список сущностей, попавших в выгрузку
|
385
368
|
}
|
386
369
|
|
387
370
|
@property
|
388
371
|
def _log_file_path(self) -> Union[str, bytes]:
|
389
|
-
"""
|
390
|
-
Путь до лог файла.
|
391
|
-
"""
|
372
|
+
"""Путь до лог файла."""
|
392
373
|
return os.path.join(settings.MEDIA_ROOT, settings.RDM_UPLOAD_LOG_DIR, 'upload_entity.log')
|
393
374
|
|
394
375
|
def _add_file_handler(self) -> None:
|
395
376
|
"""Добавляет обработчик логов."""
|
396
|
-
|
397
377
|
self._file_handler = logging.FileHandler(self._log_file_path)
|
398
378
|
|
399
379
|
logging.getLogger('info_logger').addHandler(self._file_handler)
|
@@ -402,9 +382,7 @@ class UploadData(BaseOperationData):
|
|
402
382
|
# TODO https://jira.bars.group/browse/EDUSCHL-22492. Вынужденная мера, т.к. при запуске команды не производится
|
403
383
|
# проверка готовности конфигов приложений. Нужно переработать механизм конфигурирования клиента загрузчика.
|
404
384
|
def _configure_agent_client(self):
|
405
|
-
"""
|
406
|
-
Конфигурирование клиента загрузчика данных в Витрину.
|
407
|
-
"""
|
385
|
+
"""Конфигурирование клиента загрузчика данных в Витрину."""
|
408
386
|
import uploader_client
|
409
387
|
from django.core.cache import (
|
410
388
|
DEFAULT_CACHE_ALIAS,
|
@@ -414,6 +392,7 @@ class UploadData(BaseOperationData):
|
|
414
392
|
RegionalDataMartEmulationUploaderConfig,
|
415
393
|
RegionalDataMartUploaderConfig,
|
416
394
|
)
|
395
|
+
|
417
396
|
if settings.RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION:
|
418
397
|
uploader_client.set_config(
|
419
398
|
RegionalDataMartEmulationUploaderConfig(
|
@@ -422,7 +401,7 @@ class UploadData(BaseOperationData):
|
|
422
401
|
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
423
402
|
timeout=1,
|
424
403
|
request_retries=1,
|
425
|
-
file_status=settings.RDM_RESPONSE_FILE_STATUS
|
404
|
+
file_status=settings.RDM_RESPONSE_FILE_STATUS,
|
426
405
|
)
|
427
406
|
)
|
428
407
|
elif settings.RDM_UPLOADER_CLIENT_USE_PROXY_API:
|
@@ -461,13 +440,11 @@ class UploadData(BaseOperationData):
|
|
461
440
|
self.data_cache.set(
|
462
441
|
TOTAL_ATTACHMENTS_SIZE_KEY,
|
463
442
|
queue_total_file_size,
|
464
|
-
timeout=settings.RDM_REDIS_CACHE_TIMEOUT_SECONDS
|
443
|
+
timeout=settings.RDM_REDIS_CACHE_TIMEOUT_SECONDS,
|
465
444
|
)
|
466
445
|
|
467
446
|
def upload_data(self, *args, **kwargs):
|
468
|
-
"""
|
469
|
-
Запускает отправку данных в витрину.
|
470
|
-
"""
|
447
|
+
"""Запускает отправку данных в витрину."""
|
471
448
|
try:
|
472
449
|
exporter = ExportQueueSender(self.data_cache, self.queue, settings.RDM_UPLOAD_DATA_TASK_EXPORT_STAGES)
|
473
450
|
exporter.run()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 3.9.
|
3
|
+
Version: 3.9.2
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Author-email: BARS Group <education_dev@bars.group>
|
6
6
|
Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/edu_rdm_integration/browse
|
@@ -96,7 +96,7 @@ edu_rdm_integration/export_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
96
96
|
edu_rdm_integration/export_data/actions.py,sha256=z3qMJJbgsiOCW8A_Ac5ThVBijK4dU_8VuOGrxEBNKso,10377
|
97
97
|
edu_rdm_integration/export_data/consts.py,sha256=ZEi1kXMs-54KFKxkyGIQVwZ4d8OrOF_vLFQIjjWdSPQ,441
|
98
98
|
edu_rdm_integration/export_data/dataclasses.py,sha256=IhftRopP4lS-m3ygdBU5Bz0HF71VSBP4JQ6-8VIVgtY,260
|
99
|
-
edu_rdm_integration/export_data/export.py,sha256=
|
99
|
+
edu_rdm_integration/export_data/export.py,sha256=kL4d7KR3K7Vdr8f6AREihi10zfNuuawgMAZ5p770O0M,19340
|
100
100
|
edu_rdm_integration/export_data/export_manager.py,sha256=ySAbrIiVo690HXGsEC_nxhF5FHCRl18rm5E4Ytr50VU,13285
|
101
101
|
edu_rdm_integration/export_data/generators.py,sha256=UIoX49rQnUwwC9PL17te7Rb4WRDe_5ShYQ1Rygf36NQ,4010
|
102
102
|
edu_rdm_integration/export_data/helpers.py,sha256=JKL4MC0IuoJv72NNnL8hG7HLy7kNHOXFp1uLCKF15AM,2900
|
@@ -191,8 +191,8 @@ edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJL
|
|
191
191
|
edu_rdm_integration/uploader_log/managers.py,sha256=OFdToWV8qhdfeGNpd-UWAmSEISzixmVQ6LF75EW7gzA,3248
|
192
192
|
edu_rdm_integration/uploader_log/ui.py,sha256=7O63XJJYnJBLVU9aGuSyMOxFYtcj_Kyf5u6HIiuxl9A,1788
|
193
193
|
edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js,sha256=2xyGe0wdVokM0RhpzRzcRvJPBkBmPe3SlZry4oP4Nzs,6201
|
194
|
-
edu_rdm_integration-3.9.
|
195
|
-
edu_rdm_integration-3.9.
|
196
|
-
edu_rdm_integration-3.9.
|
197
|
-
edu_rdm_integration-3.9.
|
198
|
-
edu_rdm_integration-3.9.
|
194
|
+
edu_rdm_integration-3.9.2.dist-info/licenses/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
|
195
|
+
edu_rdm_integration-3.9.2.dist-info/METADATA,sha256=GQWJCXP_NB6n9u7nzyctdaY3WjBMJPgRpukgjniFwxY,35263
|
196
|
+
edu_rdm_integration-3.9.2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
197
|
+
edu_rdm_integration-3.9.2.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
|
198
|
+
edu_rdm_integration-3.9.2.dist-info/RECORD,,
|
File without changes
|
{edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.9.2.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|