edu-rdm-integration 3.22.2__tar.gz → 3.22.4__tar.gz

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.

Potentially problematic release.


This version of edu-rdm-integration might be problematic. Click here for more details.

Files changed (284) hide show
  1. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/CHANGELOG.md +49 -0
  2. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/PKG-INFO +1 -1
  3. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/models.py +5 -0
  4. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/models.py +5 -0
  5. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/models.py +5 -0
  6. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/registry/actions.py +3 -3
  7. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/migrations/0003_fix_fk_constraints.py +1 -1
  8. edu_rdm_integration-3.22.4/src/edu_rdm_integration/stages/export_data/migrations/0004_alter_rdmexportingdatasubstageattachment_exporting_data_sub_stage.py +22 -0
  9. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/models.py +8 -1
  10. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/registry/actions.py +3 -3
  11. edu_rdm_integration-3.22.4/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/base.py +305 -0
  12. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/export_data.py +22 -1
  13. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/migrations/0004_fix_fk_constraints.py +1 -1
  14. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration.egg-info/PKG-INFO +1 -1
  15. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration.egg-info/SOURCES.txt +1 -0
  16. edu_rdm_integration-3.22.2/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/base.py +0 -214
  17. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/CONDUCT.md +0 -0
  18. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/LICENSE +0 -0
  19. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/MANIFEST.in +0 -0
  20. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/README.md +0 -0
  21. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/pyproject.toml +0 -0
  22. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/setup.cfg +0 -0
  23. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/__init__.py +0 -0
  24. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/apps.py +0 -0
  25. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
  26. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
  27. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
  28. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
  29. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/migrations/0003_auto_20250704_0725.py +0 -0
  30. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
  31. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
  32. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/__init__.py +0 -0
  33. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/consts.py +0 -0
  34. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/enums.py +0 -0
  35. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/helpers.py +0 -0
  36. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/mapping.py +0 -0
  37. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/operations.py +0 -0
  38. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/redis_cache.py +0 -0
  39. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/registry/__init__.py +0 -0
  40. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/registry/actions.py +0 -0
  41. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/registry/apps.py +0 -0
  42. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/registry/templates/ui-js/start-task.js +0 -0
  43. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/registry/ui.py +0 -0
  44. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/signals.py +0 -0
  45. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/storages.py +0 -0
  46. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/typing.py +0 -0
  47. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/core/utils.py +0 -0
  48. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
  49. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
  50. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
  51. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
  52. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
  53. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
  54. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
  55. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
  56. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
  57. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
  58. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
  59. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
  60. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
  61. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
  62. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
  63. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +0 -0
  64. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +0 -0
  65. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/0018_auto_20250704_0725.py +0 -0
  66. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/migrations/__init__.py +0 -0
  67. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/models.py +0 -0
  68. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/__init__.py +0 -0
  69. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/__init__.py +0 -0
  70. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/apps.py +0 -0
  71. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/__init__.py +0 -0
  72. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/__init__.py +0 -0
  73. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py +0 -0
  74. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/__init__.py +0 -0
  75. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/actions.py +0 -0
  76. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/app_meta.py +0 -0
  77. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/apps.py +0 -0
  78. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/enums.py +0 -0
  79. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +0 -0
  80. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/migrations/__init__.py +0 -0
  81. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/mixins.py +0 -0
  82. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/models.py +0 -0
  83. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/tasks.py +0 -0
  84. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/templates/ui-js/transferred-entity-list.js +0 -0
  85. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/pipelines/transfer/ui.py +0 -0
  86. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/__init__.py +0 -0
  87. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/apps.py +0 -0
  88. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/entities.py +0 -0
  89. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/migrations/0001_initial.py +0 -0
  90. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/migrations/0002_rename_regionaldatamartentityenum_rdmentityenum.py +0 -0
  91. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/migrations/__init__.py +0 -0
  92. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/mixins.py +0 -0
  93. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_entities/utils.py +0 -0
  94. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/__init__.py +0 -0
  95. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/apps.py +0 -0
  96. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/migrations/0001_initial.py +0 -0
  97. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/migrations/0002_rename_regionaldatamartmodelenum_rdmmodelenum.py +0 -0
  98. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/migrations/__init__.py +0 -0
  99. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/mixins.py +0 -0
  100. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/rdm_models/utils.py +0 -0
  101. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/__init__.py +0 -0
  102. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/__init__.py +0 -0
  103. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/apps.py +0 -0
  104. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/consts.py +0 -0
  105. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/__init__.py +0 -0
  106. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
  107. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/apps.py-tpl +0 -0
  108. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/caches.py-tpl +0 -0
  109. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/consts.py-tpl +0 -0
  110. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/enums.py-tpl +0 -0
  111. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/errors.py-tpl +0 -0
  112. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/functions.py-tpl +0 -0
  113. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
  114. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/managers.py-tpl +0 -0
  115. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
  116. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/results.py-tpl +0 -0
  117. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/runners.py-tpl +0 -0
  118. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/strings.py-tpl +0 -0
  119. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/tests.py-tpl +0 -0
  120. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/validators.py-tpl +0 -0
  121. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/__init__.py +0 -0
  122. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/__init__.py +0 -0
  123. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/caches.py +0 -0
  124. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/consts.py +0 -0
  125. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/functions.py +0 -0
  126. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/helpers.py +0 -0
  127. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/managers.py +0 -0
  128. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/mixins.py +0 -0
  129. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/base/runners.py +0 -0
  130. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/__init__.py +0 -0
  131. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
  132. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/caches.py +0 -0
  133. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/consts.py +0 -0
  134. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/enums.py +0 -0
  135. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +0 -0
  136. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/functions.py +0 -0
  137. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +0 -0
  138. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +0 -0
  139. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/presenters.py +0 -0
  140. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +0 -0
  141. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +0 -0
  142. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/strings.py +0 -0
  143. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/tests.py +0 -0
  144. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +0 -0
  145. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/calculated/strategies.py +0 -0
  146. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
  147. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
  148. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/caches.py +0 -0
  149. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/consts.py +0 -0
  150. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/enums.py +0 -0
  151. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +0 -0
  152. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/functions.py +0 -0
  153. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +0 -0
  154. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +0 -0
  155. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/presenters.py +0 -0
  156. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +0 -0
  157. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +0 -0
  158. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/strings.py +0 -0
  159. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/tests.py +0 -0
  160. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +0 -0
  161. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/strategies.py +0 -0
  162. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/generators.py +0 -0
  163. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/helpers.py +0 -0
  164. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
  165. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/management/base.py +0 -0
  166. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
  167. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_latest_models_data.py +0 -0
  168. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_models_data.py +0 -0
  169. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +0 -0
  170. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +0 -0
  171. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/0003_auto_20250704_0810.py +0 -0
  172. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/0004_auto_20250704_0825.py +0 -0
  173. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/0005_alter_rdmcollectingdatasubstage_previous.py +0 -0
  174. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/0006_fix_fk_constraints.py +0 -0
  175. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
  176. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/mixins.py +0 -0
  177. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/operations.py +0 -0
  178. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
  179. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/registry/apps.py +0 -0
  180. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/collect-command-window.js +0 -0
  181. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/validators.js +0 -0
  182. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/registry/ui.py +0 -0
  183. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/collect_data/tests.py +0 -0
  184. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/__init__.py +0 -0
  185. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/apps.py +0 -0
  186. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/consts.py +0 -0
  187. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
  188. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/__init__.py-tpl +0 -0
  189. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/apps.py-tpl +0 -0
  190. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/caches.py-tpl +0 -0
  191. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/consts.py-tpl +0 -0
  192. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/enums.py-tpl +0 -0
  193. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/errors.py-tpl +0 -0
  194. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/functions.py-tpl +0 -0
  195. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/helpers.py-tpl +0 -0
  196. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/managers.py-tpl +0 -0
  197. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/presenters.py-tpl +0 -0
  198. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/results.py-tpl +0 -0
  199. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/runners.py-tpl +0 -0
  200. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/strings.py-tpl +0 -0
  201. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/tests.py-tpl +0 -0
  202. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/validators.py-tpl +0 -0
  203. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
  204. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
  205. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/caches.py +0 -0
  206. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/consts.py +0 -0
  207. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/enums.py +0 -0
  208. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/errors.py +0 -0
  209. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/functions.py +0 -0
  210. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/helpers.py +0 -0
  211. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/managers.py +0 -0
  212. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/presenters.py +0 -0
  213. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/requests.py +0 -0
  214. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/results.py +0 -0
  215. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/runners.py +0 -0
  216. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/strings.py +0 -0
  217. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/tests.py +0 -0
  218. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/functions/base/validators.py +0 -0
  219. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/generators.py +0 -0
  220. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/helpers.py +0 -0
  221. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
  222. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/management/base.py +0 -0
  223. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
  224. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/management/commands/export_entities_data.py +0 -0
  225. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/management/commands/export_latest_entities_data.py +0 -0
  226. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/migrations/0001_initial.py +0 -0
  227. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py +0 -0
  228. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
  229. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/mixins.py +0 -0
  230. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/operations.py +0 -0
  231. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
  232. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/registry/apps.py +0 -0
  233. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/create-export-command-win.js +0 -0
  234. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/stage_for_export.js +0 -0
  235. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/registry/ui.py +0 -0
  236. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/export_data/strategies.py +0 -0
  237. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/__init__.py +0 -0
  238. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/apps.py +0 -0
  239. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/model_outdated_data/__init__.py +0 -0
  240. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/model_outdated_data/cleaners.py +0 -0
  241. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/model_outdated_data/managers.py +0 -0
  242. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/__init__.py +0 -0
  243. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/__init__.py +0 -0
  244. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/collect_data.py +0 -0
  245. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/consts.py +0 -0
  246. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/upload_data.py +0 -0
  247. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/service_outdated_data/managers.py +0 -0
  248. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/service/tasks.py +0 -0
  249. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/__init__.py +0 -0
  250. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/apps.py +0 -0
  251. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/consts.py +0 -0
  252. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/dataclasses.py +0 -0
  253. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/enums.py +0 -0
  254. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/export_managers.py +0 -0
  255. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/helpers.py +0 -0
  256. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
  257. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/base.py +0 -0
  258. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
  259. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/commands/async_fix_attachment_size.py +0 -0
  260. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/commands/check_upload_status.py +0 -0
  261. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_status.py +0 -0
  262. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_upload.py +0 -0
  263. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +0 -0
  264. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/migrations/0002_auto_20250704_0810.py +0 -0
  265. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/migrations/0003_auto_20251006_1417.py +0 -0
  266. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
  267. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/models.py +0 -0
  268. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/operations.py +0 -0
  269. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/queues.py +0 -0
  270. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/tasks.py +0 -0
  271. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
  272. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/actions.py +0 -0
  273. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/apps.py +0 -0
  274. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/enums.py +0 -0
  275. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/managers.py +0 -0
  276. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +0 -0
  277. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
  278. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/models.py +0 -0
  279. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
  280. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/upload_data/uploader_log/ui.py +0 -0
  281. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration/stages/utils.py +0 -0
  282. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
  283. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
  284. {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.4}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -29,6 +29,35 @@
29
29
  ### Удалено
30
30
 
31
31
 
32
+ ## [3.22.4] - 2025-10-15
33
+
34
+ Исправлена миграция обновления поведения внешних ключей в БД с логикой моделей, для приложения:
35
+ `edu_rdm_integration_upload_data_stage`, обновлён источник модели Entry.
36
+
37
+ ### Исправлено
38
+
39
+ - [EDUDEVOPS-98](https://jira.bars.group/browse/EDUDEVOPS-98)
40
+ PATCH Исправлена миграция `0004_fix_fk_constraints` обновлён источник модели Entry, для корректной работы приложения
41
+ и устранения ошибок разрешения зависимостей.
42
+
43
+
44
+ ## [3.22.3] - 2025-10-14
45
+
46
+ Добавлена зачистка файлов устаревших данных сервисной модели РВД `RDMExportingDataSubStageAttachment`.
47
+ Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
48
+
49
+ ### Добавлено
50
+
51
+ - [EDUDEVOPS-98](https://jira.bars.group/browse/EDUDEVOPS-98)
52
+ PATCH Добавлена зачистка файлов устаревших данных сервисной модели РВД `RDMExportingDataSubStageAttachment`
53
+ в команду/ночной скрипт `rdm_cleanup_outdated_data`.
54
+
55
+ ### Исправлено
56
+
57
+ - [EDUSCHL-24360](https://jira.bars.group/browse/EDUSCHL-24360)
58
+ PATCH Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
59
+
60
+
32
61
  ## [3.22.2] - 2025-10-12
33
62
 
34
63
  Для обеспечения корректной работы была выстроена иная структура базовых моделей РВД:
@@ -106,6 +135,16 @@ BaseRDMModel -> BaseAdditionalRDMModel.
106
135
  ```
107
136
 
108
137
 
138
+ ## [3.21.2] - 2025-10-14
139
+
140
+ Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
141
+
142
+ ### Исправлено
143
+
144
+ - [EDUSCHL-24360](https://jira.bars.group/browse/EDUSCHL-24360)
145
+ PATCH Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
146
+
147
+
109
148
  ## [3.21.1] - 2025-10-12
110
149
 
111
150
  Для обеспечения корректной работы была выстроена иная структура базовых моделей РВД:
@@ -132,6 +171,16 @@ BaseRDMModel -> BaseAdditionalRDMModel.
132
171
  MINOR Переименование m3-django-compat в m3-django-compatibility.
133
172
 
134
173
 
174
+ ## [3.20.2] - 2025-10-14
175
+
176
+ Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
177
+
178
+ ### Исправлено
179
+
180
+ - [EDUSCHL-24360](https://jira.bars.group/browse/EDUSCHL-24360)
181
+ PATCH Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
182
+
183
+
135
184
  ## [3.20.1] - 2025-10-12
136
185
 
137
186
  Для обеспечения корректной работы была выстроена иная структура базовых моделей РВД:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edu-rdm-integration
3
- Version: 3.22.2
3
+ Version: 3.22.4
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
@@ -70,6 +70,11 @@ class RDMEntityEnum(TitledModelEnum):
70
70
 
71
71
  return model_enums
72
72
 
73
+ @classmethod
74
+ def get_choices(cls) -> list[tuple[str, str]]:
75
+ """Возвращает список кортежей из ключей и ключей перечисления сущностей."""
76
+ return [(key, key) for key in sorted(cls.get_model_enum_keys())]
77
+
73
78
  @classmethod
74
79
  def extend(
75
80
  cls,
@@ -116,6 +116,11 @@ class RDMModelEnum(TitledModelEnum):
116
116
  verbose_name = 'Модель-перечисление моделей "Региональной витрины данных"'
117
117
  verbose_name_plural = 'Модели-перечисления моделей "Региональной витрины данных"'
118
118
 
119
+ @classmethod
120
+ def get_choices(cls) -> list[tuple[str, str]]:
121
+ """Возвращает список кортежей из ключей и ключей перечисления моделей."""
122
+ return [(key, key) for key in sorted(cls.get_model_enum_keys())]
123
+
119
124
  @classmethod
120
125
  def _get_model_relations(cls, model: Type['BaseRDMModel']) -> dict[str, str]:
121
126
  """Получение списка связей модели РВД."""
@@ -65,6 +65,11 @@ class RDMCollectingDataStageStatus(TitledModelEnum):
65
65
  verbose_name = 'Модель-перечисление статусов этапа сбора данных'
66
66
  verbose_name_plural = 'Модели-перечисления статусов этапов сбора данных'
67
67
 
68
+ @classmethod
69
+ def get_choices(cls) -> list[tuple[str, str]]:
70
+ """Возвращает список кортежей из ключей и ключей перечисления статусов."""
71
+ return [(key, key) for key in cls.get_model_enum_keys()]
72
+
68
73
 
69
74
  class RDMCollectingDataStage(ReprStrPreModelMixin, BaseObjectModel):
70
75
  """Этап подготовки данных в рамках Функций. За работу Функции отвечает ранер менеджер."""
@@ -83,7 +83,7 @@ class BaseCollectingDataProgressPack(BaseCommandProgressPack):
83
83
  'header': 'Модель',
84
84
  'sortable': True,
85
85
  'filter': ChoicesFilter(
86
- choices=[(key, key) for key in RDMModelEnum.get_model_enum_keys()],
86
+ choices=partial(RDMModelEnum.get_choices),
87
87
  parser=str,
88
88
  lookup=lambda key: Q(model=key) if key else Q(),
89
89
  ),
@@ -93,7 +93,7 @@ class BaseCollectingDataProgressPack(BaseCommandProgressPack):
93
93
  'header': 'Статус асинхронной задачи',
94
94
  'sortable': True,
95
95
  'filter': ChoicesFilter(
96
- choices=[(value.key, value.title) for value in AsyncTaskStatus.get_model_enum_values()],
96
+ choices=partial(AsyncTaskStatus.get_choices),
97
97
  parser=str,
98
98
  lookup='task__status_id',
99
99
  ),
@@ -118,7 +118,7 @@ class BaseCollectingDataProgressPack(BaseCommandProgressPack):
118
118
  'header': 'Статус сбора',
119
119
  'sortable': True,
120
120
  'filter': ChoicesFilter(
121
- choices=[(key, key) for key in RDMCollectingDataStageStatus.get_model_enum_keys()],
121
+ choices=partial(RDMCollectingDataStageStatus.get_choices),
122
122
  parser=str,
123
123
  lookup=lambda key: Q(stage__status=key) if key else Q(),
124
124
  ),
@@ -28,7 +28,7 @@ def apply_fk_updates(apps, schema_editor):
28
28
  table_name=RDMExportingDataSubStageAttachment._meta.db_table,
29
29
  field_name='exporting_data_sub_stage_id',
30
30
  target_table=RDMExportingDataSubStage._meta.db_table,
31
- on_delete='CASCADE',
31
+ on_delete='SET NULL',
32
32
  )
33
33
 
34
34
  RDMExportingDataSubStageEntity = apps.get_model(
@@ -0,0 +1,22 @@
1
+ # Generated by Django 3.2.24 on 2025-10-14 10:33
2
+
3
+ import django.db.models.deletion
4
+ from django.db import (
5
+ migrations,
6
+ models,
7
+ )
8
+
9
+
10
+ class Migration(migrations.Migration):
11
+
12
+ dependencies = [
13
+ ('edu_rdm_integration_export_data_stage', '0003_fix_fk_constraints'),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.AlterField(
18
+ model_name='rdmexportingdatasubstageattachment',
19
+ name='exporting_data_sub_stage',
20
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='edu_rdm_integration_export_data_stage.rdmexportingdatasubstage', verbose_name='Подэтап выгрузки данных'),
21
+ ),
22
+ ]
@@ -69,6 +69,11 @@ class RDMExportingDataStageStatus(TitledModelEnum):
69
69
  title='Завершено',
70
70
  )
71
71
 
72
+ @classmethod
73
+ def get_choices(cls) -> list[tuple[str, str]]:
74
+ """Возвращает список кортежей из ключей и ключей перечисления статусов."""
75
+ return [(key, key) for key in cls.get_model_enum_keys()]
76
+
72
77
  class Meta:
73
78
  db_table = 'rdm_exporting_data_stage_status'
74
79
  verbose_name = 'Модель-перечисление статусов этапа выгрузки данных'
@@ -248,7 +253,9 @@ class RDMExportingDataSubStageAttachment(ReprStrPreModelMixin, BaseObjectModel):
248
253
  exporting_data_sub_stage = ForeignKey(
249
254
  to=RDMExportingDataSubStage,
250
255
  verbose_name='Подэтап выгрузки данных',
251
- on_delete=CASCADE,
256
+ null=True,
257
+ blank=True,
258
+ on_delete=SET_NULL,
252
259
  )
253
260
 
254
261
  # TODO PYTD-22 В зависимости от принятого решения по инструменту ограничения доступа к media-файлам, нужно будет
@@ -86,7 +86,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
86
86
  'header': 'Сущность',
87
87
  'sortable': True,
88
88
  'filter': ChoicesFilter(
89
- choices=[(key, key) for key in RDMEntityEnum.get_model_enum_keys()],
89
+ choices=partial(RDMEntityEnum.get_choices),
90
90
  parser=str,
91
91
  lookup=lambda key: Q(entity=key) if key else Q(),
92
92
  ),
@@ -96,7 +96,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
96
96
  'header': 'Статус асинхронной задачи',
97
97
  'sortable': True,
98
98
  'filter': ChoicesFilter(
99
- choices=[(value.key, value.title) for value in AsyncTaskStatus.get_model_enum_values()],
99
+ choices=partial(AsyncTaskStatus.get_choices),
100
100
  parser=str,
101
101
  lookup='task__status_id',
102
102
  ),
@@ -131,7 +131,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
131
131
  'header': 'Статус экспорта',
132
132
  'sortable': True,
133
133
  'filter': ChoicesFilter(
134
- choices=[(key, key) for key in RDMExportingDataStageStatus.get_model_enum_keys()],
134
+ choices=partial(RDMExportingDataStageStatus.get_choices),
135
135
  parser=str,
136
136
  lookup=lambda key: Q(stage__status=key) if key else Q(),
137
137
  ),
@@ -0,0 +1,305 @@
1
+ import asyncio
2
+ from abc import (
3
+ ABCMeta,
4
+ abstractmethod,
5
+ )
6
+ from pathlib import (
7
+ Path,
8
+ )
9
+ from typing import (
10
+ TYPE_CHECKING,
11
+ )
12
+
13
+ import asyncpg
14
+ from django.conf import (
15
+ settings,
16
+ )
17
+ from django.db import (
18
+ connection,
19
+ )
20
+
21
+ from educommon import (
22
+ logger,
23
+ )
24
+
25
+
26
+ if TYPE_CHECKING:
27
+ from asyncpg import (
28
+ Pool,
29
+ )
30
+
31
+
32
+ class BaseServiceOutdatedDataCleaner(metaclass=ABCMeta):
33
+ """Базовый класс уборщика устаревших сервисных данных."""
34
+
35
+ model = None
36
+
37
+ SELECT_RDM_CHUNK_BOUNDED_SQL = """
38
+ DO $$
39
+ DECLARE
40
+ chunk_size INT := {chunk_size};
41
+ last_id INT := 0;
42
+ first_id INT;
43
+ last_chunk_id INT;
44
+ BEGIN
45
+ DROP TABLE IF EXISTS rdm_chunk_bounds;
46
+ CREATE TEMP TABLE rdm_chunk_bounds (
47
+ chunk_number INT,
48
+ first_id INT,
49
+ last_id INT
50
+ );
51
+
52
+ DROP TABLE IF EXISTS tmp_chunk;
53
+ CREATE TEMP TABLE tmp_chunk (id INT) ON COMMIT DROP;
54
+
55
+ WHILE TRUE LOOP
56
+ TRUNCATE tmp_chunk;
57
+
58
+ INSERT INTO tmp_chunk (id)
59
+ SELECT id
60
+ FROM {table_name}
61
+ WHERE id > last_id
62
+ ORDER BY id
63
+ LIMIT chunk_size;
64
+
65
+ IF NOT FOUND THEN
66
+ EXIT;
67
+ END IF;
68
+
69
+ SELECT MIN(id), MAX(id)
70
+ INTO first_id, last_chunk_id
71
+ FROM tmp_chunk;
72
+
73
+ INSERT INTO rdm_chunk_bounds (chunk_number, first_id, last_id)
74
+ VALUES (
75
+ (SELECT COUNT(*) FROM rdm_chunk_bounds) + 1,
76
+ first_id,
77
+ last_chunk_id
78
+ );
79
+
80
+ last_id := last_chunk_id;
81
+ END LOOP;
82
+ END $$;
83
+
84
+ SELECT * FROM rdm_chunk_bounds ORDER BY chunk_number;
85
+ """
86
+
87
+ REMOVE_OUTDATED_DATA_SQL = """
88
+ WITH deleted_rows AS (
89
+ DELETE FROM {table_name}
90
+ WHERE id IN (
91
+ WITH tbl AS (
92
+ SELECT *
93
+ FROM {table_name}
94
+ WHERE id >= {first_id}
95
+ AND id <= {last_id}
96
+ )
97
+ SELECT tbl.id
98
+ FROM tbl
99
+ WHERE {conditions}
100
+ )
101
+ RETURNING id
102
+ )
103
+ SELECT COUNT(*) AS deleted_count FROM deleted_rows;
104
+ """
105
+
106
+ def __init__(
107
+ self,
108
+ *args,
109
+ safe: bool = False,
110
+ log_sql: bool = False,
111
+ **kwargs
112
+ ):
113
+ """Инициализация уборщика."""
114
+ self._safe = safe
115
+ self._log_sql = log_sql
116
+ self._deleted_count = 0
117
+
118
+ super().__init__(*args, **kwargs)
119
+
120
+ @abstractmethod
121
+ def get_merged_conditions(self) -> str:
122
+ """Возвращает условия для удаления устаревших данных."""
123
+
124
+ @classmethod
125
+ def get_table_name(cls) -> str:
126
+ """Возвращает имя таблицы в базе данных."""
127
+ if cls.model is None:
128
+ raise NotImplementedError('Необходимо задать атрибут "model"')
129
+
130
+ return cls.model._meta.db_table
131
+
132
+ async def file_deletion_process(self, file_paths: list[str]):
133
+ """Функция для удаления файлов, связанных с удалёнными устаревшими записями.
134
+
135
+ Очистка данных производится в таблицах системных моделей РВД.
136
+ """
137
+
138
+ def get_orphan_reference_condition(
139
+ self,
140
+ reference_table: str,
141
+ reference_field: str,
142
+ local_field: str = 'id'
143
+ ) -> str:
144
+ """Условие проверки отсутствия записей в связанной таблице."""
145
+ return f"""
146
+ NOT EXISTS (
147
+ SELECT 1
148
+ FROM {reference_table} ref
149
+ WHERE ref.{reference_field} = tbl.{local_field}
150
+ )
151
+ """
152
+
153
+ def get_status_condition(
154
+ self,
155
+ related_table: str,
156
+ related_field: str,
157
+ status_value: str,
158
+ days: int,
159
+ local_field: str = 'id'
160
+ ) -> str:
161
+ """Условие проверки записи с заданным статусом и возрастом."""
162
+ return f"""
163
+ EXISTS (
164
+ SELECT 1
165
+ FROM {related_table} sub
166
+ WHERE sub.{related_field} = tbl.{local_field}
167
+ AND sub.status_id = '{status_value}'
168
+ AND sub.ended_at <= NOW() - INTERVAL '{days} days'
169
+ )
170
+ """
171
+
172
+ def get_chunk_bounded(self):
173
+ """Возвращает границы чанков для текущей таблицы."""
174
+ get_chunk_bounded_sql = self.SELECT_RDM_CHUNK_BOUNDED_SQL.format(
175
+ table_name=self.get_table_name(),
176
+ chunk_size=settings.RDM_CLEANUP_MODELS_OUTDATED_DATA_CHUNK_SIZE,
177
+ )
178
+
179
+ if self._log_sql:
180
+ # Проверка на доступность sqlparse для форматирования
181
+ try:
182
+ import sqlparse
183
+ except ImportError:
184
+ sqlparse = None
185
+
186
+ if sqlparse:
187
+ # Форматирование кода
188
+ get_chunk_bounded_sql = sqlparse.format(
189
+ sql=get_chunk_bounded_sql,
190
+ reindent=True,
191
+ strip_comments=True,
192
+ )
193
+ logger.info(
194
+ f'Запрос для получения границ чанков модели {self.get_table_name()}: \n{get_chunk_bounded_sql}\n'
195
+ )
196
+
197
+ with connection.cursor() as cursor:
198
+ cursor.execute(get_chunk_bounded_sql)
199
+ result = cursor.fetchall()
200
+
201
+ return result
202
+
203
+ async def execute_query(self, pool: 'Pool', query: str):
204
+ """Асинхронное выполнение запроса."""
205
+ async with pool.acquire() as conn:
206
+ try:
207
+ if self._safe:
208
+ logger.info(f'Запрос не будет выполнен, включен безопасный режим!\n')
209
+
210
+ if self._log_sql:
211
+ logger.info(f'{query}\n')
212
+ else:
213
+ result = await conn.fetch(query)
214
+ if not result:
215
+ return
216
+
217
+ if self._log_sql:
218
+ logger.info(f'При помощи запроса:\n{query}\n')
219
+
220
+ # Проверяем, что вернул запрос
221
+ if 'deleted_count' in result[0]:
222
+ deleted_count = result[0]['deleted_count']
223
+ self._deleted_count += deleted_count
224
+ logger.info(f'Было удалено записей: {deleted_count}')
225
+ else:
226
+ file_paths = [record['file_path'] for record in result if record.get('file_path')]
227
+ if file_paths:
228
+ await self.file_deletion_process(file_paths)
229
+ deleted_count = len(result)
230
+ self._deleted_count += deleted_count
231
+ logger.info(f'Было удалено записей с файлами: {deleted_count}')
232
+
233
+ except Exception as e:
234
+ logger.error(f'Ошибка при выполнении {query}\n{e}')
235
+
236
+ def prepare_queries(self, chunk_bounded: list[tuple[int, int, int]]) -> list[str]:
237
+ """Формирование списка запросов для удаления устаревших данных."""
238
+ queries = []
239
+ conditions = self.get_merged_conditions()
240
+
241
+ for chunk_number, first_id, last_id in chunk_bounded:
242
+ remove_outdated_data_sql = self.REMOVE_OUTDATED_DATA_SQL.format(
243
+ table_name=self.get_table_name(),
244
+ first_id=first_id,
245
+ last_id=last_id,
246
+ conditions=conditions,
247
+ )
248
+
249
+ queries.append(remove_outdated_data_sql)
250
+
251
+ return queries
252
+
253
+ async def execute_queries(self, queries: list[str]) -> None:
254
+ """Асинхронное выполнение запросов."""
255
+ DB_SETTINGS = settings.DATABASES['default']
256
+
257
+ pool = await asyncpg.create_pool(
258
+ max_size=settings.RDM_CLEANUP_MODELS_OUTDATED_DATA_POOL_SIZE,
259
+ min_size=settings.RDM_CLEANUP_MODELS_OUTDATED_DATA_POOL_SIZE,
260
+ host=DB_SETTINGS['HOST'],
261
+ port=DB_SETTINGS['PORT'],
262
+ user=DB_SETTINGS['USER'],
263
+ password=DB_SETTINGS['PASSWORD'],
264
+ database=DB_SETTINGS['NAME'],
265
+ )
266
+
267
+ tasks = [self.execute_query(pool, query) for query in queries]
268
+
269
+ await asyncio.gather(*tasks)
270
+
271
+ def run(self):
272
+ """Запуск очистки устаревших данных."""
273
+ chunk_bounded = self.get_chunk_bounded()
274
+
275
+ queries = self.prepare_queries(chunk_bounded=chunk_bounded)
276
+
277
+ if queries:
278
+ even_loop = asyncio.new_event_loop()
279
+ try:
280
+ even_loop.run_until_complete(self.execute_queries(queries=queries))
281
+ finally:
282
+ even_loop.close()
283
+
284
+ logger.info(f'Удалено записей модели {self.model.__name__}: {self._deleted_count}')
285
+
286
+
287
+ class ServiceFileCleaner:
288
+ """Асинхронный сервис для безопасного удаления файлов из MEDIA_ROOT."""
289
+
290
+ @staticmethod
291
+ async def file_deletion_process(file_paths: list[str]) -> None:
292
+ """Удаляет указанные файлы, считая пути относительными к MEDIA_ROOT."""
293
+ media_root = Path(settings.MEDIA_ROOT).resolve()
294
+
295
+ async def delete_file(path_str: str):
296
+ path = (media_root / path_str).resolve()
297
+ try:
298
+ exists = await asyncio.to_thread(path.exists)
299
+ if exists and await asyncio.to_thread(path.is_file):
300
+ await asyncio.to_thread(path.unlink)
301
+
302
+ except Exception as e:
303
+ logger.warning(f"Не удалось удалить {path}: {e}")
304
+
305
+ await asyncio.gather(*(delete_file(path) for path in file_paths))
@@ -25,6 +25,7 @@ from educommon.utils.seqtools import (
25
25
 
26
26
  from .base import (
27
27
  BaseServiceOutdatedDataCleaner,
28
+ ServiceFileCleaner,
28
29
  )
29
30
  from .consts import (
30
31
  OLD_RDM_MODEL,
@@ -102,15 +103,35 @@ class ExportingDataStageCleaner(BaseServiceOutdatedDataCleaner):
102
103
  return self.get_orphan_reference_condition(sub_stage_table, 'stage_id')
103
104
 
104
105
 
105
- class ExportingDataSubStageAttachmentCleaner(BaseServiceOutdatedDataCleaner):
106
+ class ExportingDataSubStageAttachmentCleaner(ServiceFileCleaner, BaseServiceOutdatedDataCleaner):
106
107
  """Очистка вложений подэтапов выгрузки данных."""
107
108
 
108
109
  model = RDMExportingDataSubStageAttachment
109
110
 
111
+ REMOVE_OUTDATED_DATA_SQL = """
112
+ WITH deleted_rows AS (
113
+ DELETE FROM {table_name}
114
+ WHERE id IN (
115
+ WITH tbl AS (
116
+ SELECT *
117
+ FROM {table_name}
118
+ WHERE id >= {first_id}
119
+ AND id <= {last_id}
120
+ )
121
+ SELECT tbl.id
122
+ FROM tbl
123
+ WHERE {conditions}
124
+ )
125
+ RETURNING attachment AS file_path
126
+ )
127
+ SELECT file_path FROM deleted_rows;
128
+ """
129
+
110
130
  def get_merged_conditions(self) -> str:
111
131
  """Формирует условие удаления для устаревших данных."""
112
132
  sub_stage_table = ExportingDataSubStageCleaner.get_table_name()
113
133
  conditions = [
134
+ 'exporting_data_sub_stage_id IS NULL',
114
135
  f'({self.get_status_condition(sub_stage_table, "id", "FINISHED", 7, "exporting_data_sub_stage_id")})',
115
136
  f'({self.get_status_condition(sub_stage_table, "id", "FAILED",30, "exporting_data_sub_stage_id")})',
116
137
  f'({self.get_orphan_reference_condition(sub_stage_table, "id", "exporting_data_sub_stage_id")})',
@@ -16,7 +16,7 @@ def apply_fk_updates(apps, schema_editor):
16
16
  Здесь задаются таблицы и поведение при удалении записей,
17
17
  чтобы синхронизировать фактическое состояние БД с логикой моделей.
18
18
  """
19
- Entry = apps.get_model('smev_agent_client', 'Entry')
19
+ Entry = apps.get_model('uploader_client', 'Entry')
20
20
  RDMExportingDataSubStage = apps.get_model('edu_rdm_integration_export_data_stage', 'RDMExportingDataSubStage')
21
21
  RDMExportingDataSubStageAttachment = apps.get_model(
22
22
  'edu_rdm_integration_export_data_stage', 'RDMExportingDataSubStageAttachment'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edu-rdm-integration
3
- Version: 3.22.2
3
+ Version: 3.22.4
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
@@ -224,6 +224,7 @@ src/edu_rdm_integration/stages/export_data/management/commands/export_latest_ent
224
224
  src/edu_rdm_integration/stages/export_data/migrations/0001_initial.py
225
225
  src/edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py
226
226
  src/edu_rdm_integration/stages/export_data/migrations/0003_fix_fk_constraints.py
227
+ src/edu_rdm_integration/stages/export_data/migrations/0004_alter_rdmexportingdatasubstageattachment_exporting_data_sub_stage.py
227
228
  src/edu_rdm_integration/stages/export_data/migrations/__init__.py
228
229
  src/edu_rdm_integration/stages/export_data/registry/__init__.py
229
230
  src/edu_rdm_integration/stages/export_data/registry/actions.py