edu-rdm-integration 3.5.5__py3-none-any.whl → 3.5.7__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.
@@ -59,4 +59,6 @@ RDM_UPLOAD_DATA_TASK_HOUR = '*/2'
59
59
  RDM_UPLOAD_DATA_TASK_DAY_OF_WEEK = '*'
60
60
  RDM_UPLOAD_DATA_TASK_LOCK_EXPIRE_SECONDS = 60 * 60 * 2
61
61
  # Количество подэтапов для обработки в периодической задаче отправки данных
62
- RDM_UPLOAD_DATA_TASK_EXPORT_STAGES = 500
62
+ RDM_UPLOAD_DATA_TASK_EXPORT_STAGES = 500
63
+
64
+ RDM_RESPONSE_FILE_STATUS = 'success'
@@ -38,16 +38,18 @@ class EduRDMIntegrationConfig(AppConfig):
38
38
  )
39
39
  from uploader_client.contrib.rdm.interfaces.configurations import (
40
40
  RegionalDataMartUploaderConfig,
41
+ RegionalDataMartEmulationUploaderConfig,
41
42
  )
42
43
 
43
44
  if settings.RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION:
44
45
  uploader_client.set_config(
45
- RegionalDataMartUploaderConfig(
46
+ RegionalDataMartEmulationUploaderConfig(
46
47
  interface='uploader_client.contrib.rdm.interfaces.rest.OpenAPIInterfaceEmulation',
47
48
  url=settings.RDM_UPLOADER_CLIENT_URL,
48
49
  datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
49
50
  timeout=1,
50
51
  request_retries=1,
52
+ file_status=settings.RDM_RESPONSE_FILE_STATUS
51
53
  )
52
54
  )
53
55
  elif settings.RDM_UPLOADER_CLIENT_USE_PROXY_API:
@@ -34,3 +34,4 @@ TASK_QUEUE_NAME = 'RDM'
34
34
  # Кортеж операций для обновления данных
35
35
  UPDATED_OPERATIONS = (EntityLogOperation.CREATE, EntityLogOperation.UPDATE)
36
36
  ALL_OPERATIONS = UPDATED_OPERATIONS + (EntityLogOperation.DELETE, )
37
+
@@ -64,10 +64,10 @@ from edu_rdm_integration.base import (
64
64
  from edu_rdm_integration.consts import (
65
65
  REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA,
66
66
  )
67
- from edu_rdm_integration.enums import (
68
- FileUploadStatusEnum,
67
+ from edu_rdm_integration.export_data.consts import (
68
+ TOTAL_ATTACHMENTS_SIZE_KEY,
69
69
  )
70
- from edu_rdm_integration.export_data.export_manger import (
70
+ from edu_rdm_integration.export_data.export_manager import (
71
71
  ExportQueueSender,
72
72
  WorkerSender,
73
73
  )
@@ -294,14 +294,6 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
294
294
  modified__gt=F('exporting_sub_stage__ended_at'),
295
295
  modified__lt=last_finished_export_data,
296
296
  ),
297
- # Связь лога подэтапа выгрузки с логом загрузки данных (ExportingDataSubStageUploaderClientLog)
298
- # имеет статус FileUploadStatusEnum.ERROR:
299
- model.objects.filter(
300
- exporting_sub_stage__ended_at__gt=now - timedelta(days=365),
301
- exporting_sub_stage__exportingdatasubstageuploaderclientlog__created__lt=last_finished_export_data,
302
- exporting_sub_stage__exportingdatasubstageuploaderclientlog__file_upload_status=(
303
- FileUploadStatusEnum.ERROR),
304
- ),
305
297
  )
306
298
 
307
299
  for queryset in querysets_to_update:
@@ -419,16 +411,18 @@ class UploadData(BaseOperationData):
419
411
  caches,
420
412
  )
421
413
  from uploader_client.contrib.rdm.interfaces.configurations import (
414
+ RegionalDataMartEmulationUploaderConfig,
422
415
  RegionalDataMartUploaderConfig,
423
416
  )
424
417
  if settings.RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION:
425
418
  uploader_client.set_config(
426
- RegionalDataMartUploaderConfig(
419
+ RegionalDataMartEmulationUploaderConfig(
427
420
  interface='uploader_client.contrib.rdm.interfaces.rest.OpenAPIInterfaceEmulation',
428
421
  url=settings.RDM_UPLOADER_CLIENT_URL,
429
422
  datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
430
423
  timeout=1,
431
424
  request_retries=1,
425
+ file_status=settings.RDM_RESPONSE_FILE_STATUS
432
426
  )
433
427
  )
434
428
  elif settings.RDM_UPLOADER_CLIENT_USE_PROXY_API:
@@ -457,6 +451,19 @@ class UploadData(BaseOperationData):
457
451
  )
458
452
  )
459
453
 
454
+ def update_total_queue_size_in_cache(self, received_files_size: int):
455
+ """Обновление размера файлов в кеш."""
456
+ with self.data_cache.lock(f'{TOTAL_ATTACHMENTS_SIZE_KEY}:lock', timeout=300):
457
+ queue_total_file_size = self.data_cache.get(TOTAL_ATTACHMENTS_SIZE_KEY) or 0
458
+ if queue_total_file_size:
459
+ queue_total_file_size -= received_files_size
460
+ if queue_total_file_size > 0:
461
+ self.data_cache.set(
462
+ TOTAL_ATTACHMENTS_SIZE_KEY,
463
+ queue_total_file_size,
464
+ timeout=settings.RDM_REDIS_CACHE_TIMEOUT_SECONDS
465
+ )
466
+
460
467
  def upload_data(self, *args, **kwargs):
461
468
  """
462
469
  Запускает отправку данных в витрину.
@@ -476,6 +483,9 @@ class UploadData(BaseOperationData):
476
483
  if sender.entities:
477
484
  self.result['uploaded_entities'] = ','.join(sender.entities)
478
485
 
486
+ if sender.received_file_size:
487
+ self.update_total_queue_size_in_cache(sender.received_file_size)
488
+
479
489
  except Exception as err:
480
490
  logger.exception(err)
481
491
  raise err
@@ -2,6 +2,8 @@ from pathlib import (
2
2
  Path,
3
3
  )
4
4
  from typing import (
5
+ TYPE_CHECKING,
6
+ Any,
5
7
  Iterable,
6
8
  Optional,
7
9
  )
@@ -48,11 +50,17 @@ from edu_rdm_integration.export_data.dataclasses import (
48
50
  from edu_rdm_integration.export_data.queue import (
49
51
  Queue,
50
52
  )
53
+ from edu_rdm_integration.helpers import (
54
+ FAILED_STATUSES,
55
+ UploadStatusHelper,
56
+ )
51
57
  from edu_rdm_integration.models import (
58
+ DataMartRequestStatus,
52
59
  ExportingDataSubStage,
53
60
  ExportingDataSubStageAttachment,
54
61
  ExportingDataSubStageStatus,
55
62
  ExportingDataSubStageUploaderClientLog,
63
+ UploadStatusRequestLog,
56
64
  )
57
65
  from edu_rdm_integration.redis_cache import (
58
66
  AbstractCache,
@@ -184,6 +192,31 @@ class WorkerSender:
184
192
  def __init__(self, queue: Queue):
185
193
  self.queue = queue
186
194
  self.entities = set()
195
+ self.received_file_size = 0
196
+
197
+ def get_file_upload_status(self, request_id: str) -> tuple[Optional[int], Optional[DataMartRequestStatus], 'Entry']:
198
+ """Возвращает статус файла в витрине по запросу."""
199
+ file_upload_status = None
200
+
201
+ response, log_entry = UploadStatusHelper.send_upload_status_request(request_id)
202
+ request_status = None
203
+
204
+ if response:
205
+ request_status = DataMartRequestStatus.get_values_to_enum_data().get(response.get('code'))
206
+
207
+ if not request_status:
208
+ logger.error(
209
+ 'Не удалось определить статус загрузки данных в витрину. Идентификатор загрузки: '
210
+ f'{request_id}, данные ответа: {response}',
211
+ )
212
+
213
+ if request_status in FAILED_STATUSES:
214
+ file_upload_status = FileUploadStatusEnum.ERROR
215
+
216
+ elif request_status == DataMartRequestStatus.SUCCESSFULLY_PROCESSED:
217
+ file_upload_status = FileUploadStatusEnum.FINISHED
218
+
219
+ return file_upload_status, request_status, log_entry
187
220
 
188
221
  def send_files(self):
189
222
  """Отправка файлов."""
@@ -194,6 +227,7 @@ class WorkerSender:
194
227
  return
195
228
 
196
229
  result_to_save = []
230
+ upload_status_requests_to_save = []
197
231
  errors = []
198
232
  status = ExportingDataSubStageStatus.FINISHED.key
199
233
  for file in upload_files:
@@ -241,6 +275,25 @@ class WorkerSender:
241
275
  file_upload_status=file_upload_status,
242
276
  is_emulation=settings.RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION,
243
277
  )
278
+
279
+ if request_id:
280
+ updated_file_upload_status, request_status, log_entry = self.get_file_upload_status(request_id)
281
+ upload_status_requests_to_save.append(
282
+ UploadStatusRequestLog(
283
+ upload=sub_stage_uploader_client_log,
284
+ entry=log_entry,
285
+ request_status_id=getattr(request_status, 'key', None),
286
+ )
287
+ )
288
+ if updated_file_upload_status and updated_file_upload_status != file_upload_status:
289
+ sub_stage_uploader_client_log.file_upload_status = updated_file_upload_status
290
+
291
+ if updated_file_upload_status == FileUploadStatusEnum.FINISHED:
292
+ self.received_file_size += file.attachment_size
293
+
294
+ if updated_file_upload_status == FileUploadStatusEnum.ERROR:
295
+ status = ExportingDataSubStageStatus.PROCESS_ERROR.key
296
+
244
297
  result_to_save.append(sub_stage_uploader_client_log)
245
298
  if result.error:
246
299
  logger.warning(
@@ -258,6 +311,7 @@ class WorkerSender:
258
311
  # Сохраняем информацию об отправке файлов и убираем подэтап с файлами из очереди
259
312
  with atomic():
260
313
  ExportingDataSubStageUploaderClientLog.objects.bulk_create(result_to_save)
314
+ UploadStatusRequestLog.objects.bulk_create(upload_status_requests_to_save)
261
315
  sub_stage.status_id = status
262
316
  sub_stage.save()
263
317
 
@@ -56,6 +56,7 @@ from edu_rdm_integration.models import (
56
56
  DataMartRequestStatus,
57
57
  ExportingDataStage,
58
58
  ExportingDataStageStatus,
59
+ ExportingDataSubStageStatus,
59
60
  ExportingDataSubStageUploaderClientLog,
60
61
  UploadDataCommand,
61
62
  UploadStatusRequestLog,
@@ -82,6 +83,13 @@ if TYPE_CHECKING:
82
83
  )
83
84
 
84
85
 
86
+ FAILED_STATUSES = {
87
+ DataMartRequestStatus.FAILED_PROCESSING,
88
+ DataMartRequestStatus.REQUEST_ID_NOT_FOUND,
89
+ DataMartRequestStatus.FLC_ERROR
90
+ }
91
+
92
+
85
93
  class UploadStatusHelper:
86
94
  """Хелпер проверки статуса загрузки данных в витрину."""
87
95
 
@@ -160,8 +168,10 @@ class UploadStatusHelper:
160
168
  request_status_id=getattr(request_status, 'key', None),
161
169
  )
162
170
 
163
- if request_status in {DataMartRequestStatus.FAILED_PROCESSING, DataMartRequestStatus.REQUEST_ID_NOT_FOUND}:
171
+ if request_status in FAILED_STATUSES:
164
172
  upload.file_upload_status = FileUploadStatusEnum.ERROR
173
+ upload.sub_stage.status_id = ExportingDataSubStageStatus.PROCESS_ERROR.key
174
+ upload.sub_stage.save()
165
175
 
166
176
  elif request_status == DataMartRequestStatus.SUCCESSFULLY_PROCESSED:
167
177
  upload.file_upload_status = FileUploadStatusEnum.FINISHED
@@ -0,0 +1,25 @@
1
+ # Generated by Django 3.2.24 on 2025-02-14 15:49
2
+
3
+ from django.db import (
4
+ migrations,
5
+ )
6
+
7
+
8
+ def add_exporting_data_sub_stage_status(apps, schema_editor):
9
+ """Добавление нового статуса этапу выгрузки данных."""
10
+ ExportingDataSubStageStatus = apps.get_model('edu_rdm_integration', 'ExportingDataSubStageStatus') # noqa: N806
11
+ ExportingDataSubStageStatus.objects.get_or_create(
12
+ key='PROCESS_ERROR',
13
+ title='Ошибка обработки витриной'
14
+ )
15
+
16
+
17
+ class Migration(migrations.Migration):
18
+
19
+ dependencies = [
20
+ ('edu_rdm_integration', '0014_uploaddatacommand'),
21
+ ]
22
+
23
+ operations = [
24
+ migrations.RunPython(add_exporting_data_sub_stage_status, reverse_code=migrations.RunPython.noop),
25
+ ]
@@ -18,13 +18,13 @@ from django.db.models import (
18
18
  DateTimeField,
19
19
  FileField,
20
20
  ForeignKey,
21
+ JSONField,
21
22
  Manager,
22
23
  OneToOneField,
23
24
  PositiveIntegerField,
24
25
  PositiveSmallIntegerField,
25
26
  SmallIntegerField,
26
27
  UUIDField,
27
- JSONField,
28
28
  )
29
29
  from django.utils import (
30
30
  timezone,
@@ -370,6 +370,9 @@ class ExportingDataSubStageStatus(TitledModelEnum):
370
370
  READY_FOR_EXPORT = ModelEnumValue(
371
371
  title='Готов к выгрузке',
372
372
  )
373
+ PROCESS_ERROR = ModelEnumValue(
374
+ title='Ошибка обработки витриной'
375
+ )
373
376
 
374
377
  class Meta:
375
378
  db_table = 'rdm_exporting_data_sub_stage_status'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 3.5.5
3
+ Version: 3.5.7
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -31,7 +31,7 @@ Requires-Dist: educommon <4,>=3.11.0
31
31
  Requires-Dist: function-tools <1,>=0.9.0
32
32
  Requires-Dist: m3-db-utils <1,>=0.3.10
33
33
  Requires-Dist: m3-django-compat <2,>=1.10.2
34
- Requires-Dist: uploader-client <1,>=0.2.1
34
+ Requires-Dist: uploader-client <1,>=0.2.3
35
35
 
36
36
  # Проект "Интеграция с Региональной витриной данных (РВД)"
37
37
 
@@ -300,6 +300,28 @@ Requires-Dist: uploader-client <1,>=0.2.1
300
300
 
301
301
  ### Удалено
302
302
 
303
+ ## [3.5.7] - 2025-03-03
304
+
305
+ Испарвлена ошибка импорта в export_manager.
306
+
307
+ ### Исправлено
308
+
309
+ - [EDUSCHL-22403](https://jira.bars.group/browse/EDUSCHL-22403)
310
+ PATCH Испарвлена ошибка импорта в export_manager.
311
+
312
+
313
+ ## [3.5.6] - 2025-02-20
314
+
315
+ Доработана отправка файлов в витрину - добавлена проверка статусов файла и новый статус `Ошибка обработки витриной` для
316
+ ExportingDataSubStageStatus. Доработана задача проверки статусов UploadStatusHelper.
317
+
318
+ ### Исправлено
319
+
320
+ - [EDUSCHL-22403](https://jira.bars.group/browse/EDUSCHL-22403)
321
+ PATCH Добавлен новый статус Ошибка обработки витриной для ExportingDataSubStageStatus. Добавлена проверка
322
+ статусов сразу после отправки файлов WorkerSender. Скорректирован статус UploadStatusHelper - при получении статусов
323
+ ошибки обработки витриной подэтап помечается как PROCESS_ERROR
324
+
303
325
 
304
326
  ## [3.5.5] - 2025-02-11
305
327
 
@@ -1,14 +1,14 @@
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=FnTCsAM7lvd05q4YQqZnCS31plnluEJmUtIwJ6zunoM,2996
4
- edu_rdm_integration/apps.py,sha256=iDNitsYHE1-djp2NCW4HKnFHNoDSg8Fzc8Tobe26Qzw,3571
3
+ edu_rdm_integration/app_settings.py,sha256=f7Obftma3sQSXZmQRkfas93VFnJi3eTGVE_JixzxAnQ,3035
4
+ edu_rdm_integration/apps.py,sha256=Dl1og2yZcRyJmqrifUNIjLZ9Us2jw2mgAP1_q2fg29A,3699
5
5
  edu_rdm_integration/base.py,sha256=_G0qPTAXe6bXfgDHNiZMSsYt3sMuUhLKnHuQCWSFttU,1341
6
- edu_rdm_integration/consts.py,sha256=Qt52SOCQ-3wOet-_6inJih_W9nToORKXbkxb3jVSjEo,1079
6
+ edu_rdm_integration/consts.py,sha256=nL8o-w73KjGM4r_--Nasffmo_DJx9HsgrPHSNtq-y-g,1080
7
7
  edu_rdm_integration/entities.py,sha256=mhVeB88A-VD5IAzZCNeI1qnkvNoZ8LPiLBdqk1yA3Jc,14541
8
8
  edu_rdm_integration/enums.py,sha256=T3Mu5D-CbKO3BSg16MPPnIPlcc_YGLYR-ThS8dzl9gg,4246
9
- edu_rdm_integration/helpers.py,sha256=pLWkIUZK0M5FZZrTAfe80bV-VZIpBgwxnXBAmYFfFw0,14561
9
+ edu_rdm_integration/helpers.py,sha256=wr4ddI9LNsmcwdZMEUYT070YnM49ixbAQ0-tBh4gp08,14808
10
10
  edu_rdm_integration/mapping.py,sha256=1B6TsC4Os9wiM8L8BChnCNv_iWqjeWu3bdDsqKVsId0,616
11
- edu_rdm_integration/models.py,sha256=e1n-1UuG0Okhx6NSxD-m3iSlvStDmBdJs-4HiBa8aTQ,32985
11
+ edu_rdm_integration/models.py,sha256=feAbpH1ji4MOHpYtzDfrumMYmXlz1ye-IDUFJSI7Nq0,33092
12
12
  edu_rdm_integration/redis_cache.py,sha256=SP_rcL5t6PTVLOnEYn_NTX0Z666VdZT4By2pyED24Z4,1537
13
13
  edu_rdm_integration/signals.py,sha256=3eRlpkDcFCF6TN80-QM8yBYLcyozzcmoPjz6r4_ApWg,73
14
14
  edu_rdm_integration/storages.py,sha256=G4Q4tIyJdEyb9ka551PADCFIm66bpsJe9VBRcvQhLMI,6745
@@ -89,8 +89,8 @@ edu_rdm_integration/enum_register/register.py,sha256=jb16O7TZDGVRo5NwWqyY_rcbBxO
89
89
  edu_rdm_integration/export_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
90
  edu_rdm_integration/export_data/consts.py,sha256=ZEi1kXMs-54KFKxkyGIQVwZ4d8OrOF_vLFQIjjWdSPQ,441
91
91
  edu_rdm_integration/export_data/dataclasses.py,sha256=IhftRopP4lS-m3ygdBU5Bz0HF71VSBP4JQ6-8VIVgtY,260
92
- edu_rdm_integration/export_data/export.py,sha256=WSnli8-ZBtZw4b2_8qnmPTgKW52XMdZ9RlJ4eo25xyQ,19071
93
- edu_rdm_integration/export_data/export_manger.py,sha256=Q1O1lO8kF0s4jzQsMj-qWcFe14_YPM0AXXWywXWj-z8,10776
92
+ edu_rdm_integration/export_data/export.py,sha256=qKvFRTcy2ZgaBMn6mEi_OsueNXZ7j_v2neu2Lu99MEs,19447
93
+ edu_rdm_integration/export_data/export_manager.py,sha256=ySAbrIiVo690HXGsEC_nxhF5FHCRl18rm5E4Ytr50VU,13285
94
94
  edu_rdm_integration/export_data/generators.py,sha256=UIoX49rQnUwwC9PL17te7Rb4WRDe_5ShYQ1Rygf36NQ,4010
95
95
  edu_rdm_integration/export_data/helpers.py,sha256=JKL4MC0IuoJv72NNnL8hG7HLy7kNHOXFp1uLCKF15AM,2900
96
96
  edu_rdm_integration/export_data/queue.py,sha256=GlwRwhMdv38OxmtFpFD5-Pt79gMe3IcLeWFQCLXTcik,6128
@@ -166,6 +166,7 @@ edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py,sha256=2BfIif
166
166
  edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py,sha256=y_JQO69k9pEfrJyimaRiAOBmhaJmssIyepCGd-Sy9hs,511
167
167
  edu_rdm_integration/migrations/0013_set_attachment_size.py,sha256=Gol8T137gdaCTSkJ2e4as5x4gfqeouZmgWgkOl7zxCQ,2048
168
168
  edu_rdm_integration/migrations/0014_uploaddatacommand.py,sha256=Hh0vKKiGgKOvY1kBAcmway4dSYUXwVArHAc9YrsjCIU,2079
169
+ edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py,sha256=zVe2baNq8JYzMPRmtpAwplmgKHOP3lwMKHLo_yRz0QE,790
169
170
  edu_rdm_integration/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
171
  edu_rdm_integration/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
172
  edu_rdm_integration/registry/actions.py,sha256=jNEq1RhSGtxdYOIKcTtqT1LPUfKvOIFgAQjP3q0Lv1s,5382
@@ -178,9 +179,9 @@ edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJL
178
179
  edu_rdm_integration/uploader_log/managers.py,sha256=OFdToWV8qhdfeGNpd-UWAmSEISzixmVQ6LF75EW7gzA,3248
179
180
  edu_rdm_integration/uploader_log/ui.py,sha256=YM9Buqp2wxE95Wf5gvAATBzuYzDOossK1sEmvFk07cI,2110
180
181
  edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js,sha256=2xyGe0wdVokM0RhpzRzcRvJPBkBmPe3SlZry4oP4Nzs,6201
181
- edu_rdm_integration-3.5.5.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
182
- edu_rdm_integration-3.5.5.dist-info/METADATA,sha256=5snRB_tVTAg1nQ1xhcnIHbdZ4cA3P77ElM-4EU7QgxM,80191
183
- edu_rdm_integration-3.5.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
184
- edu_rdm_integration-3.5.5.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
185
- edu_rdm_integration-3.5.5.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
186
- edu_rdm_integration-3.5.5.dist-info/RECORD,,
182
+ edu_rdm_integration-3.5.7.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
183
+ edu_rdm_integration-3.5.7.dist-info/METADATA,sha256=vulkiuukw61qOjoU9u84Met068PnWwwBndY7-k-zw9g,81379
184
+ edu_rdm_integration-3.5.7.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
185
+ edu_rdm_integration-3.5.7.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
186
+ edu_rdm_integration-3.5.7.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
187
+ edu_rdm_integration-3.5.7.dist-info/RECORD,,