edu-rdm-integration 3.2.7__py3-none-any.whl → 3.3.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.
Files changed (26) hide show
  1. edu_rdm_integration/app_settings.py +5 -0
  2. edu_rdm_integration/apps.py +1 -1
  3. edu_rdm_integration/collect_data/collect.py +4 -54
  4. edu_rdm_integration/consts.py +0 -1
  5. edu_rdm_integration/export_data/base/functions.py +15 -108
  6. edu_rdm_integration/export_data/consts.py +5 -0
  7. edu_rdm_integration/export_data/dataclasses.py +11 -0
  8. edu_rdm_integration/export_data/export_manger.py +246 -0
  9. edu_rdm_integration/export_data/queue.py +172 -0
  10. edu_rdm_integration/helpers.py +19 -2
  11. edu_rdm_integration/management/general.py +0 -12
  12. edu_rdm_integration/migrations/0009_auto_20240522_1619.py +25 -0
  13. edu_rdm_integration/migrations/{0009_transferredentity_export_enabled.py → 0010_transferredentity_export_enabled.py} +2 -2
  14. edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +30 -0
  15. edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +21 -0
  16. edu_rdm_integration/migrations/0013_set_attachment_size.py +48 -0
  17. edu_rdm_integration/models.py +35 -4
  18. edu_rdm_integration/redis_cache.py +52 -0
  19. edu_rdm_integration/tasks.py +69 -33
  20. edu_rdm_integration/utils.py +1 -0
  21. {edu_rdm_integration-3.2.7.dist-info → edu_rdm_integration-3.3.3.dist-info}/METADATA +59 -1
  22. {edu_rdm_integration-3.2.7.dist-info → edu_rdm_integration-3.3.3.dist-info}/RECORD +26 -18
  23. {edu_rdm_integration-3.2.7.dist-info → edu_rdm_integration-3.3.3.dist-info}/LICENSE +0 -0
  24. {edu_rdm_integration-3.2.7.dist-info → edu_rdm_integration-3.3.3.dist-info}/WHEEL +0 -0
  25. {edu_rdm_integration-3.2.7.dist-info → edu_rdm_integration-3.3.3.dist-info}/namespace_packages.txt +0 -0
  26. {edu_rdm_integration-3.2.7.dist-info → edu_rdm_integration-3.3.3.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,6 @@
1
+ from collections import (
2
+ defaultdict,
3
+ )
1
4
  from typing import (
2
5
  TYPE_CHECKING,
3
6
  Dict,
@@ -15,6 +18,9 @@ from celery.schedules import (
15
18
  from django.conf import (
16
19
  settings,
17
20
  )
21
+ from django.core.cache import (
22
+ cache,
23
+ )
18
24
  from django.utils import (
19
25
  timezone,
20
26
  )
@@ -58,9 +64,16 @@ from edu_rdm_integration.enums import (
58
64
  from edu_rdm_integration.export_data.export import (
59
65
  ExportLatestEntitiesData,
60
66
  )
67
+ from edu_rdm_integration.export_data.export_manger import (
68
+ ExportQueueSender,
69
+ WorkerSender,
70
+ )
61
71
  from edu_rdm_integration.export_data.helpers import (
62
72
  set_failed_status_suspended_exporting_data_stages,
63
73
  )
74
+ from edu_rdm_integration.export_data.queue import (
75
+ RdmRedisSubStageAttachmentQueue,
76
+ )
64
77
  from edu_rdm_integration.helpers import (
65
78
  UploadStatusHelper,
66
79
  get_collecting_managers_max_period_ended_dates,
@@ -142,9 +155,9 @@ class RDMCheckUploadStatus(UniquePeriodicAsyncTask):
142
155
  in_progress_uploads = ExportingDataSubStageUploaderClientLog.objects.filter(
143
156
  file_upload_status=FileUploadStatusEnum.IN_PROGRESS,
144
157
  is_emulation=False,
145
- )
158
+ ).select_related('attachment')
146
159
 
147
- UploadStatusHelper(in_progress_uploads).run()
160
+ UploadStatusHelper(in_progress_uploads, cache).run()
148
161
 
149
162
 
150
163
  class CheckSuspendedExportedStagePeriodicTask(UniquePeriodicAsyncTask):
@@ -208,6 +221,7 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
208
221
  self._exporting_data_manager_to_period_end: Dict[str, 'datetime'] = {}
209
222
 
210
223
  self._transferred_entities = []
224
+ self._entites_models_map = defaultdict(list)
211
225
 
212
226
  def process(self, *args, **kwargs):
213
227
  """Выполняет задачу."""
@@ -222,15 +236,20 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
222
236
  pk=self.request.id,
223
237
  ).values_list('pk', flat=True).first()
224
238
 
225
- for entity_data in self._transferred_entities:
226
- for model_enum_value in entity_data['collected_models']:
227
- self._run_collect_model_data(model_enum_value.key, task_id)
239
+ collected_entity_models = set()
240
+
241
+ for entity_enum, export_enabled in sorted(
242
+ self._transferred_entities, key=lambda entity: entity[0].order_number
243
+ ):
244
+ entity_models = self._entites_models_map.get(entity_enum.key, ())
245
+ for model_enum_value in entity_models:
246
+ if model_enum_value.key not in collected_entity_models:
247
+ self._run_collect_model_data(model_enum_value.key, task_id)
248
+ collected_entity_models.add(model_enum_value.key)
228
249
 
229
- # Перехватывем ошибку экспорта для того, чтобы не останавливать сборку и экспорт остальных сущностей
230
250
  try:
231
- entity_enum_value = entity_data['exported_entity']
232
- if entity_enum_value:
233
- self._run_export_entity_data(entity_enum_value.key, task_id)
251
+ if export_enabled:
252
+ self._run_export_entity_data(entity_enum.key, task_id)
234
253
  except Exception:
235
254
  continue
236
255
 
@@ -255,24 +274,17 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
255
274
 
256
275
  def _collect_transferred_entities(self) -> None:
257
276
  """Собирает сущности РВД, по которым будет произведен сбор и экспорт данных."""
258
- entities = [
277
+ self._transferred_entities = [
259
278
  (RegionalDataMartEntityEnum.get_model_enum_value(key=entity), export_enabled)
260
279
  for entity, export_enabled in TransferredEntity.objects.values_list('entity', 'export_enabled')
261
280
  ]
262
- collected_entity_models = set()
263
- # Собираем словарь по сущностям с учетом порядка выгрузки
264
- for entity_enum, export_enabled in sorted(
265
- entities, key=lambda entity: entity[0].order_number):
266
- model_enums = [
267
- model_enum for model_enum in (entity_enum.main_model_enum, *entity_enum.additional_model_enums)
268
- if (model_enum not in collected_entity_models and model_enum.order_number != DEFAULT_ORDER_NUMBER)
269
- ]
270
- entity_data = {
271
- 'collected_models': model_enums,
272
- 'exported_entity': entity_enum if export_enabled else None,
273
- }
274
- self._transferred_entities.append(entity_data)
275
- collected_entity_models.update(model_enums)
281
+
282
+ # Собираем словарь по сущностям с моделями для сборки
283
+ for entity, _ in self._transferred_entities:
284
+ self._entites_models_map[entity.key].extend(
285
+ (model_enum for model_enum in (entity.main_model_enum, *entity.additional_model_enums)
286
+ if model_enum.order_number != DEFAULT_ORDER_NUMBER)
287
+ )
276
288
 
277
289
  def _collect_managers(self) -> None:
278
290
  """Собирает менеджеры Функций для сбора и выгрузки данных."""
@@ -286,17 +298,15 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
286
298
  tags={REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA},
287
299
  )
288
300
 
289
- for transferred_entity in self._transferred_entities:
290
- for model in transferred_entity['collected_models']:
291
- collect_manager_class = collecting_models_data_managers_map.get(model.key)
301
+ for entity_key, entity_models in self._entites_models_map.items():
302
+ for entity_model in entity_models:
303
+ collect_manager_class = collecting_models_data_managers_map.get(entity_model.key)
292
304
  if collect_manager_class:
293
- self._collecting_data_managers[model.key] = collect_manager_class
305
+ self._collecting_data_managers[entity_model.key] = collect_manager_class
294
306
 
295
- entity = transferred_entity['exported_entity']
296
- if entity:
297
- export_manager_class = exporting_entities_data_managers_map.get(entity.key)
298
- if export_manager_class:
299
- self._exporting_data_managers[entity.key] = export_manager_class
307
+ export_manager_class = exporting_entities_data_managers_map.get(entity_key)
308
+ if export_manager_class:
309
+ self._exporting_data_managers[entity_key] = export_manager_class
300
310
 
301
311
  def _calculate_collecting_managers_logs_period_ended_at(self) -> None:
302
312
  """Определяет дату последнего успешного этапа сбора у менеджеров Функций сбора."""
@@ -374,7 +384,33 @@ class TransferLatestEntitiesDataPeriodicTask(UniquePeriodicAsyncTask):
374
384
  )
375
385
 
376
386
 
387
+ class UploadDataAsyncTask(PeriodicAsyncTask):
388
+ """Формирование очереди файлов и их отправка."""
389
+ queue = TASK_QUEUE_NAME
390
+ routing_key = TASK_QUEUE_NAME
391
+ description = 'Отправка данных в витрину "Региональная витрина данных"'
392
+ lock_expire_seconds = settings.RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS
393
+ task_type = AsyncTaskType.SYSTEM
394
+ run_every = crontab(
395
+ minute=settings.RDM_UPLOAD_STATUS_TASK_MINUTE,
396
+ hour=settings.RDM_UPLOAD_STATUS_TASK_HOUR,
397
+ day_of_week=settings.RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK,
398
+ )
399
+
400
+ def process(self, *args, **kwargs):
401
+ """Выполнение."""
402
+ super().process(*args, **kwargs)
403
+
404
+ queue = RdmRedisSubStageAttachmentQueue()
405
+ exporter = ExportQueueSender(cache, queue)
406
+ exporter.run()
407
+ sender = WorkerSender(queue)
408
+ sender.run()
409
+
410
+
377
411
  celery_app = celery.app.app_or_default()
378
412
  celery_app.register_task(RDMCheckUploadStatus)
379
413
  celery_app.register_task(CheckSuspendedExportedStagePeriodicTask)
380
414
  celery_app.register_task(TransferLatestEntitiesDataPeriodicTask)
415
+ celery_app.register_task(UploadDataAsyncTask)
416
+
@@ -17,6 +17,7 @@ from typing import (
17
17
  from django.conf import (
18
18
  settings,
19
19
  )
20
+
20
21
  from edu_rdm_integration.apps import (
21
22
  EduRDMIntegrationConfig,
22
23
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 3.2.7
3
+ Version: 3.3.3
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -301,6 +301,54 @@ Requires-Dist: uploader-client <1,>=0.2.1
301
301
 
302
302
  ### Удалено
303
303
 
304
+ ## 3.3.3 - 2024-08-19
305
+ Изменен порядок запуска сбора и экспорта по сущностям в периодической задаче TransferLatestEntitiesDataPeriodicTask
306
+ с учетом многопоточности, скорректированы номера миграций
307
+
308
+ ### Изменено
309
+ - [EDUSCHL-21965](https://jira.bars.group/browse/EDUSCHL-21965)
310
+ PATCH Добавлен параметр export_off в модель TransferredEntity и изменен порядок запуска сбора и экспорта в
311
+ TransferLatestEntitiesDataPeriodicTask. Скорректированы номера миграций
312
+
313
+
314
+ ## 3.3.2 - 2024-07-16
315
+ Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
316
+
317
+ ### Изменено
318
+ - [EDUSCHL-22070](https://jira.bars.group/browse/EDUSCHL-22070)
319
+ PATCH Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
320
+
321
+
322
+ ## 3.3.1 - 2024-06-13
323
+ Удалён устаревший параметр logs_sub_period_days у базового класса команды сбора данных BaseCollectModelsDataByGeneratingLogsCommand.
324
+ Добавлен таймаут для сохранения информации об объемах файла в кеш.
325
+
326
+ ### Изменено
327
+ - [EDUSCHL-20649](https://jira.bars.group/browse/EDUSCHL-20649)
328
+ MINOR Удалён устаревший параметр logs_sub_period_days у базового класса команды сбора данных BaseCollectModelsDataByGeneratingLogsCommand
329
+
330
+ ### Исправлено
331
+ - [EDUSCHL-21835](https://jira.bars.group/browse/EDUSCHL-21835)
332
+ PATCH Реализация многопоточной выгрузки
333
+
334
+
335
+ ## 3.3.0 - 2024-06-06
336
+ Отправка файлов в РВД вынесена в отдельную задачу UploadDataAsyncTask, добавлен кеш файлов и очередь подэтапов отправки,
337
+ а также расчет объемов отправляемых файлов
338
+
339
+ ### Изменено
340
+ - [EDUSCHL-21835](https://jira.bars.group/browse/EDUSCHL-21835)
341
+ MINOR Реализация многопоточной выгрузки
342
+
343
+
344
+ ## 3.2.8 - 2024-08-02
345
+ Исправлена ошибка задвоения сборки и экспорта в периодической задаче TransferLatestEntitiesDataPeriodicTask.
346
+
347
+ ### Изменено
348
+ - [EDUSCHL-21965](https://jira.bars.group/browse/EDUSCHL-21965)
349
+ PATCH Исправлена ошибка задвоения сборки и экспорта в периодической задаче TransferLatestEntitiesDataPeriodicTask.
350
+
351
+
304
352
  ## 3.2.7 - 2024-07-31
305
353
  Исправлен файл MANIFEST.in для включения в сборку js-шаблонов.
306
354
 
@@ -308,6 +356,7 @@ Requires-Dist: uploader-client <1,>=0.2.1
308
356
  - [EDUSCHL-21965](https://jira.bars.group/browse/EDUSCHL-21965)
309
357
  PATCH Добавлено включение js-шаблонов в сборку в файл MANIFEST.in
310
358
 
359
+
311
360
  ## 3.2.6 - 2024-07-23
312
361
  Добавлен параметр export_off (Отключение экспорта для сущности) в модель TransferredEntity
313
362
  Изменен порядок запуска сбора и экспорта по сущностям в периодической задаче TransferLatestEntitiesDataPeriodicTask
@@ -325,6 +374,15 @@ Requires-Dist: uploader-client <1,>=0.2.1
325
374
  - [EDUSCHL-22070](https://jira.bars.group/browse/EDUSCHL-22070)
326
375
  PATCH Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
327
376
 
377
+
378
+ ## 3.2.5 - 2024-07-16
379
+ Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
380
+
381
+ ### Изменено
382
+ - [EDUSCHL-22070](https://jira.bars.group/browse/EDUSCHL-22070)
383
+ PATCH Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
384
+
385
+
328
386
  ## 3.2.4 - 2024-07-16
329
387
  Внесены корректировки в запросы используемые в функциях get_collecting_managers_max_period_ended_dates и get_exporting_managers_max_period_ended_dates.
330
388
 
@@ -1,18 +1,19 @@
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=b8lkNz0ht7hTIKB3ZOrbF3Pp0XAJeNEs5z1WXFxHKEc,2130
4
- edu_rdm_integration/apps.py,sha256=5OgNdmuqe26fbu4wYb69haQJe-XFO_rDbnU1vPqJU-U,3571
3
+ edu_rdm_integration/app_settings.py,sha256=bR8zGz2fJPSia5LO4KDUENIlxdqHmKkTAg92-q0qhew,2398
4
+ edu_rdm_integration/apps.py,sha256=BoXiTr8B04ZtDxHNXc1Jy2xzRoaq8CMBQ9cfmBK73j4,3571
5
5
  edu_rdm_integration/base.py,sha256=_G0qPTAXe6bXfgDHNiZMSsYt3sMuUhLKnHuQCWSFttU,1341
6
- edu_rdm_integration/consts.py,sha256=FFwcMHNsfjP_s9LfkccLAHjJMEMp7ppPmrRlJcgV88k,1104
6
+ edu_rdm_integration/consts.py,sha256=Qt52SOCQ-3wOet-_6inJih_W9nToORKXbkxb3jVSjEo,1079
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=EGufjIdrww3w2QjVn6ufM9mjruxNkHNu_KCzXct7Fa4,13733
9
+ edu_rdm_integration/helpers.py,sha256=m98k8nichw5AIoPuXNPsI-ZFN9OYX5Wt2MU6ml_pg88,14615
10
10
  edu_rdm_integration/mapping.py,sha256=bwa2fJCbV4YjQcAgRrgT3hgM6dJhr_uBtQgx3L3F2Ck,473
11
- edu_rdm_integration/models.py,sha256=Q6BxMUlKmqLBwoJFB0aefD9uE4F3D2fncFqTEKBsOSA,29612
11
+ edu_rdm_integration/models.py,sha256=Fwt2O2j_aPI9owRZprreGQ2t7op-YmIYpZoq5HHjL3M,30692
12
+ edu_rdm_integration/redis_cache.py,sha256=GZhtM1d0cVr5TEqxh15K7dS371Msit6wRemIiYb2rzk,1548
12
13
  edu_rdm_integration/signals.py,sha256=3eRlpkDcFCF6TN80-QM8yBYLcyozzcmoPjz6r4_ApWg,73
13
14
  edu_rdm_integration/storages.py,sha256=o5WqUG7SnkeuMt-z8spUi-IraivST-7KHzfY-M3v7FA,6807
14
- edu_rdm_integration/tasks.py,sha256=fK4aRyYHexkgEzEd7_r0522EM8vYqh0KKzkmhRjcqmc,15505
15
- edu_rdm_integration/utils.py,sha256=-my8q9fude6Nc9r_qUDww-8QaU2tcv-xOexewYqOPJw,10369
15
+ edu_rdm_integration/tasks.py,sha256=1CbqE7kU23GWbaaym9TMal95zrYDInn8Dw9EEudm1gU,16437
16
+ edu_rdm_integration/utils.py,sha256=NIOxlH4JiTOOxYgqcwtfqT5UAtNG24GLq_tsnBUtp8E,10370
16
17
  edu_rdm_integration/adapters/__init__.py,sha256=cU0swn4Ny5ZQz5buWRcWsT1mpWuUFJaUlHf2l7TtEBo,83
17
18
  edu_rdm_integration/adapters/apps.py,sha256=TyJTkSPs2qAHJ11fqbwLGk3Ea7ujtqWwbxqmvYNQxG8,363
18
19
  edu_rdm_integration/adapters/caches.py,sha256=OxSqeXySUN42LxEeHBLtC1ZBt-7aicbRbmP1EJYTvV4,1505
@@ -37,7 +38,7 @@ edu_rdm_integration/collect_and_export_data/utils.py,sha256=lBWqqhLgMyz2IQN7r9zu
37
38
  edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py,sha256=UkoaXzh3tokZ8QdCdB09v3rRZfcHhvEwNMuj3mQIB74,4714
38
39
  edu_rdm_integration/collect_and_export_data/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
40
  edu_rdm_integration/collect_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- edu_rdm_integration/collect_data/collect.py,sha256=Qcg0zL3a5MIFuuwW4k5gTD9r_m19ZCmihwwJdt0gPyc,13913
41
+ edu_rdm_integration/collect_data/collect.py,sha256=HIKO8Kvw9NY9Nt5M5w9XfcZ9E5IVue_4mT7ESYJ6n4I,11909
41
42
  edu_rdm_integration/collect_data/generators.py,sha256=f34AAwdEcQNIokX0ypqYgjRD1XolwBVLER_HYv9ibNw,9075
42
43
  edu_rdm_integration/collect_data/helpers.py,sha256=gAFZAm9YhMtQhvlwSF3LMthPPa8LsqG_zbVe7vnW_Ag,2995
43
44
  edu_rdm_integration/collect_data/tests.py,sha256=-UNX3-GL0H9i89GXRfICT0ABltn_9aN_I_cmn1gQcDA,5367
@@ -84,17 +85,20 @@ edu_rdm_integration/enum_register/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
84
85
  edu_rdm_integration/enum_register/mixins.py,sha256=nmHue9-9bqKZn9_MFiL0E-5wBUBIZPZwk3DWVir5pKk,4021
85
86
  edu_rdm_integration/enum_register/register.py,sha256=5OWOjK-M0Erd_5CENpBaXhVtfL0pEaDl3Bev5QKNDJc,2218
86
87
  edu_rdm_integration/export_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- edu_rdm_integration/export_data/consts.py,sha256=Z6Uho8oViMc0t1tyQFZfrPFBwPx6KnhUf_iZ0qgob8o,16
88
+ edu_rdm_integration/export_data/consts.py,sha256=rmJ_18wHCE54j0VABxfo7Zu01EPFYSjYrj5L79hVW2Y,333
89
+ edu_rdm_integration/export_data/dataclasses.py,sha256=IhftRopP4lS-m3ygdBU5Bz0HF71VSBP4JQ6-8VIVgtY,260
88
90
  edu_rdm_integration/export_data/export.py,sha256=3d1POl4xzyh4GVXJYdkXkcyfiUIqsrlPKPO-apw30Uk,16405
91
+ edu_rdm_integration/export_data/export_manger.py,sha256=_8gkFH380zZVJ9LVxqeZOXphS-RjeIoSbq0eUbXnIMA,9657
89
92
  edu_rdm_integration/export_data/generators.py,sha256=yLDOcHB1PoilJwXtKGxZQhDjpeKBzEWoosahbJJ4Ba4,4020
90
93
  edu_rdm_integration/export_data/helpers.py,sha256=hU346RmQ17Ra2etFvxXI7JQlLyp_0KxH1jm-eeCqejc,2933
94
+ edu_rdm_integration/export_data/queue.py,sha256=NiWm7e59zOcGT8s87BxiyU4-nA02fH94oVKnhc8htQ4,6159
91
95
  edu_rdm_integration/export_data/strategies.py,sha256=ocHskG-x54U-ESX56OlZPgOibkGkuv7VKmK7hVmqj_0,6725
92
96
  edu_rdm_integration/export_data/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
97
  edu_rdm_integration/export_data/base/caches.py,sha256=dj8LGB7TMtX3cSfp-1UB3dnzcTGMt8aLtOn0YdNPsyQ,1541
94
98
  edu_rdm_integration/export_data/base/consts.py,sha256=jLuy2y7YQ921OrEuzDld3F0k6YxgCnr5yorWBQJiLLw,519
95
99
  edu_rdm_integration/export_data/base/enums.py,sha256=BSmwrkzYwEQhz9NbZCJsldY532PqgZJzxzsVk6ue0bM,93
96
100
  edu_rdm_integration/export_data/base/errors.py,sha256=SaxXgKWNGG8RZQ8soFlzbX8d2_j58gWVmikzNZG1s74,291
97
- edu_rdm_integration/export_data/base/functions.py,sha256=ZCf3j0HA3rFrQiYHB-fG2xAW-pKyXDuDUm0yJrHyssg,12786
101
+ edu_rdm_integration/export_data/base/functions.py,sha256=3Za3P7Idrx4LB7i-PMn5hbhvEMojInQNaTEW1-xQeCs,8940
98
102
  edu_rdm_integration/export_data/base/helpers.py,sha256=h0S_fItbaygZfNZb9oUUPNF4dmeOojNx2nHCv3m3TWU,4609
99
103
  edu_rdm_integration/export_data/base/managers.py,sha256=AJBBOmQbW-cnVEa3d2DCpyoNbnRxXmgpAcUCBu1rDiI,6075
100
104
  edu_rdm_integration/export_data/base/presenters.py,sha256=JXh8nwyezaC-2h_TYfPPYUZRitFr9Y9Ifp-j7CaUCL0,403
@@ -136,7 +140,7 @@ edu_rdm_integration/function_templates/function_export_data_template/strings.py-
136
140
  edu_rdm_integration/function_templates/function_export_data_template/tests.py-tpl,sha256=MoRY-a75Ow-7EjeQYxkXWunwqTGuBMaUyEkEV2oy05I,59
137
141
  edu_rdm_integration/function_templates/function_export_data_template/validators.py-tpl,sha256=TIPYLk-rPGE9A1hViZ1Mym8XVJjk1qRlG67YTGZHcIE,587
138
142
  edu_rdm_integration/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
- edu_rdm_integration/management/general.py,sha256=n6_aqP_rFFMdPSH9yjfz9pz984uF2KCWlwwrLt9CmQg,13439
143
+ edu_rdm_integration/management/general.py,sha256=hmZGp9EKpSAm-VuhXNpW_ETA5TWi3Y-caSj7XB2vtuM,12957
140
144
  edu_rdm_integration/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
145
  edu_rdm_integration/management/commands/check_upload_status.py,sha256=jGqFMLMgrirG_H2OxzxNG3Z3d1xvORIzWqzKBUtr22Y,3843
142
146
  edu_rdm_integration/management/commands/collect_latest_models_data.py,sha256=4ObBFqYMkX5v1saV9V7PivYBm0RMcDCGNlMGx77UAjs,750
@@ -153,7 +157,11 @@ edu_rdm_integration/migrations/0005_auto_20231204_1224.py,sha256=YXWiwTImGg8FAO_
153
157
  edu_rdm_integration/migrations/0006_request_status_data.py,sha256=g5JZtP0q0fOrbKCooGmCeGgtcqd9ZLIBP56h-ZH8IS8,3448
154
158
  edu_rdm_integration/migrations/0007_delete_upload_status.py,sha256=GAQKX6N1vDDWiCTXLGg--0gzLQr7VveAPFYzC9QpUpU,457
155
159
  edu_rdm_integration/migrations/0008_transferredentity.py,sha256=rE5av85AIYKGDy7nuFKLrHAhj0uaeUTRsFfIsXPtaxo,1427
156
- edu_rdm_integration/migrations/0009_transferredentity_export_enabled.py,sha256=xCCtmkl3PQ0o-AgiZEK3UUOvNnzcuTpSp8ViRm3KpnI,506
160
+ edu_rdm_integration/migrations/0009_auto_20240522_1619.py,sha256=hz8cBq6m18XK5PbDUH4-bJESpGZdaP1jAqP7mWAB_qA,775
161
+ edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py,sha256=LJH7QY_1GLWSHLRPB--9PPypPiQd4pAT2-oIOEF84DY,507
162
+ edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py,sha256=2BfIif_hkFv1h6VEfe0Ys4J_uk6LR9YtO711ocDYPso,1263
163
+ edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py,sha256=y_JQO69k9pEfrJyimaRiAOBmhaJmssIyepCGd-Sy9hs,511
164
+ edu_rdm_integration/migrations/0013_set_attachment_size.py,sha256=Pj_n-ytsC0lhyU67qvH8UHHQ-c-TH5MZFfy-UF6y6M4,1809
157
165
  edu_rdm_integration/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
166
  edu_rdm_integration/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
167
  edu_rdm_integration/registry/actions.py,sha256=YUtCkpcc3DedM_x8rwJ6Aos-8HKkDCrOUdKnGhztfUU,5223
@@ -166,9 +174,9 @@ edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJL
166
174
  edu_rdm_integration/uploader_log/managers.py,sha256=y5wTSMzF9hpOpIU_A7nIafL_LBU3QEie6LAYWoB-pBQ,3203
167
175
  edu_rdm_integration/uploader_log/ui.py,sha256=YM9Buqp2wxE95Wf5gvAATBzuYzDOossK1sEmvFk07cI,2110
168
176
  edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js,sha256=2xyGe0wdVokM0RhpzRzcRvJPBkBmPe3SlZry4oP4Nzs,6201
169
- edu_rdm_integration-3.2.7.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
170
- edu_rdm_integration-3.2.7.dist-info/METADATA,sha256=g7Cff01IboSXv0-TVs9LvL_ZYnzGHYhVDy5iVivshSM,67821
171
- edu_rdm_integration-3.2.7.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
172
- edu_rdm_integration-3.2.7.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
173
- edu_rdm_integration-3.2.7.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
174
- edu_rdm_integration-3.2.7.dist-info/RECORD,,
177
+ edu_rdm_integration-3.3.3.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
178
+ edu_rdm_integration-3.3.3.dist-info/METADATA,sha256=C-G1C603filvIvr5n8TAqnKxKE-oEWOO44mEUCOPQ5c,71260
179
+ edu_rdm_integration-3.3.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
180
+ edu_rdm_integration-3.3.3.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
181
+ edu_rdm_integration-3.3.3.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
182
+ edu_rdm_integration-3.3.3.dist-info/RECORD,,