edu-rdm-integration 3.18.0__tar.gz → 3.18.2__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 (269) hide show
  1. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/CHANGELOG.md +31 -0
  2. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/PKG-INFO +1 -1
  3. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/utils.py +0 -1
  4. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/models.py +11 -1
  5. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/models.py +166 -56
  6. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/models.py +5 -0
  7. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration.egg-info/PKG-INFO +1 -1
  8. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/CONDUCT.md +0 -0
  9. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/LICENSE +0 -0
  10. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/MANIFEST.in +0 -0
  11. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/README.md +0 -0
  12. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/pyproject.toml +0 -0
  13. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/setup.cfg +0 -0
  14. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/__init__.py +0 -0
  15. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/apps.py +0 -0
  16. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
  17. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
  18. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
  19. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
  20. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/migrations/0003_auto_20250704_0725.py +0 -0
  21. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
  22. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
  23. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/__init__.py +0 -0
  24. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/consts.py +0 -0
  25. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/enums.py +0 -0
  26. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/helpers.py +0 -0
  27. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/mapping.py +0 -0
  28. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/operations.py +0 -0
  29. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/redis_cache.py +0 -0
  30. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/registry/__init__.py +0 -0
  31. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/registry/actions.py +0 -0
  32. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/registry/apps.py +0 -0
  33. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/registry/templates/ui-js/start-task.js +0 -0
  34. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/registry/ui.py +0 -0
  35. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/signals.py +0 -0
  36. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/storages.py +0 -0
  37. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/core/typing.py +0 -0
  38. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
  39. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
  40. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
  41. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
  42. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
  43. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
  44. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
  45. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
  46. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
  47. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
  48. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
  49. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
  50. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
  51. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
  52. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
  53. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +0 -0
  54. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +0 -0
  55. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/0018_auto_20250704_0725.py +0 -0
  56. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/migrations/__init__.py +0 -0
  57. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/models.py +0 -0
  58. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/__init__.py +0 -0
  59. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/__init__.py +0 -0
  60. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/apps.py +0 -0
  61. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/__init__.py +0 -0
  62. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/__init__.py +0 -0
  63. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py +0 -0
  64. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/__init__.py +0 -0
  65. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/actions.py +0 -0
  66. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/app_meta.py +0 -0
  67. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/apps.py +0 -0
  68. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/enums.py +0 -0
  69. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +0 -0
  70. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/migrations/__init__.py +0 -0
  71. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/mixins.py +0 -0
  72. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/models.py +0 -0
  73. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/tasks.py +0 -0
  74. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/templates/ui-js/transferred-entity-list.js +0 -0
  75. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/pipelines/transfer/ui.py +0 -0
  76. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/__init__.py +0 -0
  77. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/apps.py +0 -0
  78. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/entities.py +0 -0
  79. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/migrations/0001_initial.py +0 -0
  80. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/migrations/0002_rename_regionaldatamartentityenum_rdmentityenum.py +0 -0
  81. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/migrations/__init__.py +0 -0
  82. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/mixins.py +0 -0
  83. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_entities/utils.py +0 -0
  84. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/__init__.py +0 -0
  85. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/apps.py +0 -0
  86. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/migrations/0001_initial.py +0 -0
  87. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/migrations/0002_rename_regionaldatamartmodelenum_rdmmodelenum.py +0 -0
  88. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/migrations/__init__.py +0 -0
  89. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/mixins.py +0 -0
  90. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/rdm_models/utils.py +0 -0
  91. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/__init__.py +0 -0
  92. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/__init__.py +0 -0
  93. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/apps.py +0 -0
  94. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/consts.py +0 -0
  95. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/__init__.py +0 -0
  96. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
  97. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/apps.py-tpl +0 -0
  98. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/caches.py-tpl +0 -0
  99. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/consts.py-tpl +0 -0
  100. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/enums.py-tpl +0 -0
  101. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/errors.py-tpl +0 -0
  102. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/functions.py-tpl +0 -0
  103. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
  104. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/managers.py-tpl +0 -0
  105. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
  106. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/results.py-tpl +0 -0
  107. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/runners.py-tpl +0 -0
  108. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/strings.py-tpl +0 -0
  109. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/tests.py-tpl +0 -0
  110. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/validators.py-tpl +0 -0
  111. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/__init__.py +0 -0
  112. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/__init__.py +0 -0
  113. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/caches.py +0 -0
  114. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/consts.py +0 -0
  115. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/functions.py +0 -0
  116. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/helpers.py +0 -0
  117. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/managers.py +0 -0
  118. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/mixins.py +0 -0
  119. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/base/runners.py +0 -0
  120. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/__init__.py +0 -0
  121. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
  122. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/caches.py +0 -0
  123. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/consts.py +0 -0
  124. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/enums.py +0 -0
  125. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +0 -0
  126. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/functions.py +0 -0
  127. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +0 -0
  128. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +0 -0
  129. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/presenters.py +0 -0
  130. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +0 -0
  131. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +0 -0
  132. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/strings.py +0 -0
  133. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/tests.py +0 -0
  134. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +0 -0
  135. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/calculated/strategies.py +0 -0
  136. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
  137. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
  138. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/caches.py +0 -0
  139. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/consts.py +0 -0
  140. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/enums.py +0 -0
  141. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +0 -0
  142. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/functions.py +0 -0
  143. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +0 -0
  144. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +0 -0
  145. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/presenters.py +0 -0
  146. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +0 -0
  147. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +0 -0
  148. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/strings.py +0 -0
  149. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/tests.py +0 -0
  150. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +0 -0
  151. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/strategies.py +0 -0
  152. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/generators.py +0 -0
  153. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/helpers.py +0 -0
  154. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
  155. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/management/base.py +0 -0
  156. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
  157. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_latest_models_data.py +0 -0
  158. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_models_data.py +0 -0
  159. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +0 -0
  160. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +0 -0
  161. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/migrations/0003_auto_20250704_0810.py +0 -0
  162. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/migrations/0004_auto_20250704_0825.py +0 -0
  163. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
  164. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/mixins.py +0 -0
  165. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/models.py +0 -0
  166. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/operations.py +0 -0
  167. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
  168. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/registry/actions.py +0 -0
  169. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/registry/apps.py +0 -0
  170. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/collect-command-window.js +0 -0
  171. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/validators.js +0 -0
  172. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/registry/ui.py +0 -0
  173. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/collect_data/tests.py +0 -0
  174. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/__init__.py +0 -0
  175. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/apps.py +0 -0
  176. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/consts.py +0 -0
  177. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
  178. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/__init__.py-tpl +0 -0
  179. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/apps.py-tpl +0 -0
  180. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/caches.py-tpl +0 -0
  181. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/consts.py-tpl +0 -0
  182. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/enums.py-tpl +0 -0
  183. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/errors.py-tpl +0 -0
  184. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/functions.py-tpl +0 -0
  185. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/helpers.py-tpl +0 -0
  186. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/managers.py-tpl +0 -0
  187. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/presenters.py-tpl +0 -0
  188. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/results.py-tpl +0 -0
  189. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/runners.py-tpl +0 -0
  190. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/strings.py-tpl +0 -0
  191. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/tests.py-tpl +0 -0
  192. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/validators.py-tpl +0 -0
  193. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
  194. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
  195. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/caches.py +0 -0
  196. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/consts.py +0 -0
  197. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/enums.py +0 -0
  198. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/errors.py +0 -0
  199. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/functions.py +0 -0
  200. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/helpers.py +0 -0
  201. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/managers.py +0 -0
  202. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/presenters.py +0 -0
  203. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/requests.py +0 -0
  204. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/results.py +0 -0
  205. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/runners.py +0 -0
  206. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/strings.py +0 -0
  207. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/tests.py +0 -0
  208. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/functions/base/validators.py +0 -0
  209. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/generators.py +0 -0
  210. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/helpers.py +0 -0
  211. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
  212. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/management/base.py +0 -0
  213. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
  214. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/management/commands/export_entities_data.py +0 -0
  215. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/management/commands/export_latest_entities_data.py +0 -0
  216. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/migrations/0001_initial.py +0 -0
  217. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py +0 -0
  218. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
  219. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/mixins.py +0 -0
  220. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/operations.py +0 -0
  221. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
  222. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/registry/actions.py +0 -0
  223. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/registry/apps.py +0 -0
  224. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/create-export-command-win.js +0 -0
  225. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/stage_for_export.js +0 -0
  226. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/registry/ui.py +0 -0
  227. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/export_data/strategies.py +0 -0
  228. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/__init__.py +0 -0
  229. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/apps.py +0 -0
  230. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/model_outdated_data/__init__.py +0 -0
  231. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/model_outdated_data/cleaners.py +0 -0
  232. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/model_outdated_data/managers.py +0 -0
  233. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/outdated_service_data/__init__.py +0 -0
  234. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/service/tasks.py +0 -0
  235. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/__init__.py +0 -0
  236. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/apps.py +0 -0
  237. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/consts.py +0 -0
  238. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/dataclasses.py +0 -0
  239. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/enums.py +0 -0
  240. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/export_managers.py +0 -0
  241. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/helpers.py +0 -0
  242. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
  243. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/base.py +0 -0
  244. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
  245. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/commands/async_fix_attachment_size.py +0 -0
  246. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/commands/check_upload_status.py +0 -0
  247. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_status.py +0 -0
  248. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_upload.py +0 -0
  249. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +0 -0
  250. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/migrations/0002_auto_20250704_0810.py +0 -0
  251. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
  252. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/models.py +0 -0
  253. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/operations.py +0 -0
  254. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/queues.py +0 -0
  255. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/tasks.py +0 -0
  256. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
  257. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/actions.py +0 -0
  258. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/apps.py +0 -0
  259. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/enums.py +0 -0
  260. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/managers.py +0 -0
  261. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +0 -0
  262. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
  263. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/models.py +0 -0
  264. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
  265. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration/stages/upload_data/uploader_log/ui.py +0 -0
  266. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration.egg-info/SOURCES.txt +0 -0
  267. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
  268. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
  269. {edu_rdm_integration-3.18.0 → edu_rdm_integration-3.18.2}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -29,6 +29,37 @@
29
29
  ### Удалено
30
30
 
31
31
 
32
+ ## [3.18.2] - 2025-09-12
33
+
34
+ ### Исправлено
35
+
36
+ - [EDUCLLG-7932](https://jira.bars.group/browse/EDUCLLG-7932)
37
+ PATCH Исправлена обработка None значений order_number в функции register_classes для корректной работы с автоматическим расчетом порядковых номеров.
38
+
39
+
40
+ ## [3.18.1] - 2025-09-02
41
+
42
+ Доработки модели перечисления RDMModelEnum для расширения функционала механизма зачистки устаревших данных моделей РВД.
43
+
44
+ ### Добавлено
45
+
46
+ - [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
47
+ PATCH Добавлена базовая модель для определения модели являющейся основной для сущности.
48
+ -
49
+ - [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
50
+ PATCH Добавлен механизм расчета обратных связей для моделей в модели-перечислении RDMModelEnum.
51
+
52
+ ### Изменено
53
+
54
+ - [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
55
+ PATCH Изменен алгоритм сортировки моделей с использованием ключей модели-перечисления RDMModelEnum.
56
+
57
+ ### Исправлено
58
+
59
+ - [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
60
+ PATCH Исправлена ошибка регистрации сущностей.
61
+
62
+
32
63
  ## [3.18.0] - 2025-08-29
33
64
 
34
65
  Добавлено новое приложение `edu_rdm_integration.pipelines.cleanup_outdated_data`, которое необходимо подключить в
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edu-rdm-integration
3
- Version: 3.18.0
3
+ Version: 3.18.2
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Author-email: BARS Group <education_dev@bars.group>
6
6
  Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/edu-rdm-integration/browse
@@ -58,7 +58,6 @@ def register_classes(classes: Iterable[type[BaseEnumRegisterMixin]]) -> None:
58
58
  Args:
59
59
  classes: Классы, поддерживающие интерфейс регистрации.
60
60
  """
61
- classes = sorted(classes, key=attrgetter('order_number'))
62
61
 
63
62
  for enum_class in classes:
64
63
  enum_class.register()
@@ -102,4 +102,14 @@ class RDMEntityEnum(TitledModelEnum):
102
102
  except ValueError as e:
103
103
  raise ValueError(f'Trying register entity "{entity.__name__}". {e.args[0]}')
104
104
 
105
- setattr(cls, key, ModelEnumValue(key=key, order_number=order_number, **kwargs))
105
+ model_enum_value = ModelEnumValue(
106
+ key=key,
107
+ title=title,
108
+ entity=entity,
109
+ main_model_enum=main_model_enum,
110
+ additional_model_enums=additional_model_enums,
111
+ order_number=order_number,
112
+ **kwargs,
113
+ )
114
+
115
+ setattr(cls, key, model_enum_value)
@@ -1,3 +1,6 @@
1
+ from collections import (
2
+ defaultdict,
3
+ )
1
4
  from typing import (
2
5
  Optional,
3
6
  Type,
@@ -32,6 +35,36 @@ from m3_db_utils.models import (
32
35
  class BaseRDMModel(ReprStrPreModelMixin, BaseObjectModel):
33
36
  """Базовая модель РВД."""
34
37
 
38
+ created = DateTimeField(
39
+ verbose_name='Дата создания',
40
+ auto_now_add=True,
41
+ null=True,
42
+ blank=True,
43
+ db_index=True,
44
+ )
45
+ modified = DateTimeField(
46
+ verbose_name='Дата изменения',
47
+ auto_now=True,
48
+ null=True,
49
+ blank=True,
50
+ db_index=True,
51
+ )
52
+
53
+ @property
54
+ def attrs_for_repr_str(self):
55
+ """Список атрибутов для отображения экземпляра модели."""
56
+ return ['created', 'modified']
57
+
58
+ class Meta:
59
+ abstract = True
60
+
61
+
62
+ class BaseMainRDMModel(BaseRDMModel):
63
+ """Абстрактная основная модель РВД.
64
+
65
+ Является базовым классом для моделей РВД, которые являются основными для сущностей РВД.
66
+ """
67
+
35
68
  collecting_sub_stage = ForeignKey(
36
69
  verbose_name='Подэтап сбора данных',
37
70
  to='edu_rdm_integration_collect_data_stage.RDMCollectingDataSubStage',
@@ -49,21 +82,6 @@ class BaseRDMModel(ReprStrPreModelMixin, BaseObjectModel):
49
82
  choices=EntityLogOperation.get_choices(),
50
83
  )
51
84
 
52
- created = DateTimeField(
53
- verbose_name='Дата создания',
54
- auto_now_add=True,
55
- null=True,
56
- blank=True,
57
- db_index=True,
58
- )
59
- modified = DateTimeField(
60
- verbose_name='Дата изменения',
61
- auto_now=True,
62
- null=True,
63
- blank=True,
64
- db_index=True,
65
- )
66
-
67
85
  @property
68
86
  def attrs_for_repr_str(self):
69
87
  """Список атрибутов для отображения экземпляра модели."""
@@ -86,71 +104,160 @@ class RDMModelEnum(TitledModelEnum):
86
104
  verbose_name_plural = 'Модели-перечисления моделей "Региональной витрины данных"'
87
105
 
88
106
  @classmethod
89
- def _get_model_dependencies(cls, model: Type[BaseRDMModel]) -> list[tuple[str, str]]:
90
- """Получение списка зависимостей модели РВД."""
91
- model_dependencies = []
107
+ def _get_model_relations(cls, model: Type['BaseRDMModel']) -> dict[str, str]:
108
+ """Получение списка связей модели РВД."""
109
+ model_label_enum_data = cls.get_model_label_enum_data()
110
+ model_relations = {}
92
111
 
93
112
  for field in model._meta.concrete_fields:
94
113
  if isinstance(field, FictiveForeignKeyField):
95
- model_dependencies.append(field.to)
114
+ model_label = field.to
96
115
  elif isinstance(field, ForeignKey):
97
- model_dependencies.append(field.related_model._meta.label)
116
+ model_label = field.related_model._meta.label
117
+ else:
118
+ continue
119
+
120
+ if model_label in model_label_enum_data:
121
+ model_key = model_label_enum_data[model_label].key
122
+ model_relations[field.attname] = model_key
98
123
 
99
- return model_dependencies
124
+ return model_relations
100
125
 
101
126
  @classmethod
102
- def _calculate_order_number(
103
- cls, order_number: Optional[int], model: Type[BaseRDMModel] = None, *args, **kwargs
104
- ) -> int:
105
- """Вычисление порядкового номера элемента модели-перечисления.
127
+ def _get_models_relations(cls) -> dict[str, dict[str, str]]:
128
+ """Получение списка связей всех зарегистрированных моделей РВД."""
129
+ model_label_enum_data = cls.get_model_label_enum_data()
130
+ all_models = [model_enum_value.model for model_enum_value in model_label_enum_data.values()]
106
131
 
107
- Если order_number указан, то используется он.
132
+ models_relations = {}
133
+ for model in all_models:
134
+ model_key = model_label_enum_data[model._meta.label].key
135
+ model_relations = cls._get_model_relations(model=model)
108
136
 
109
- При добавлении новой модели РВД в модель-перечисление производится перерасчет порядковых номеров уже
110
- добавленных элементов. Порядок моделей РВД выстраивается по зависимости друг от друга. Зависимость определяется
111
- внешними ключами (ForeignKey) и фиктивными внешними ключами (FictiveForeignKey). Сначала идут модели не имеющие
112
- зависимостей, затем модели, которые зависят от других моделей. Сортировка моделей РВД происходит по алгоритму
113
- топологической сортировки.
114
- """
115
- if order_number is not None:
116
- return super()._calculate_order_number(order_number=order_number)
137
+ if model_relations:
138
+ models_relations[model_key] = model_relations
117
139
 
118
- enum_data = cls._get_enum_data()
119
- models = [model, *[model_enum_value.model for model_enum_value in enum_data.values()]]
140
+ return models_relations
141
+
142
+ @classmethod
143
+ def _sort_models_dependencies(cls, models_dependencies: list[tuple[str, str]]) -> list[str]:
144
+ """Сортировка моделей РВД по зависимости друг от друга."""
145
+ sorted_dependencies_models = topological_sort(models_dependencies)
146
+
147
+ ordered_models = [*sorted_dependencies_models.cyclic, *reversed(sorted_dependencies_models.sorted)]
148
+
149
+ return ordered_models
150
+
151
+ @classmethod
152
+ def _get_ordered_models(cls) -> list[str]:
153
+ """Получение списка моделей РВД в порядке их зависимости.
154
+
155
+ Есть возможность указать дополнительные модели, для которых совместно с зарегистрированными моделями РВД будет
156
+ рассчитываться порядок.
157
+
158
+ Returns:
159
+ list[str]: список моделей РВД в порядке их зависимости
160
+ """
161
+ enum_keys = cls.get_model_enum_keys()
162
+ models_relations = cls._get_models_relations()
120
163
 
121
164
  models_dependencies = []
122
- for model in models:
123
- model_dependencies = cls._get_model_dependencies(model=model)
165
+ for model_key, model_relations in models_relations.items():
166
+ for _, related_model_key in model_relations.items():
167
+ models_dependencies.append((model_key, related_model_key))
124
168
 
125
- for model_dependency in model_dependencies:
126
- models_dependencies.append((model._meta.label, model_dependency))
169
+ ordered_models = cls._sort_models_dependencies(models_dependencies=models_dependencies)
127
170
 
128
- sorted_dependencies_models = topological_sort(models_dependencies)
171
+ without_dependencies = set(enum_keys).difference(set(ordered_models))
129
172
 
130
- ordered_models = [*sorted_dependencies_models.cyclic, *reversed(sorted_dependencies_models.sorted)]
173
+ ordered_models = [*without_dependencies, *ordered_models]
131
174
 
132
- for model_enum_value in enum_data.values():
175
+ return ordered_models
176
+
177
+ @classmethod
178
+ def _recalculate_order_numbers(cls, *args, **kwargs):
179
+ """Перерасчет порядковых номеров элементов модели-перечисления.
180
+
181
+ При добавлении новой модели РВД в модель-перечисление производится перерасчет порядковых номеров уже
182
+ добавленных элементов. Порядок моделей РВД выстраивается по зависимости друг от друга. Зависимость определяется
183
+ внешними ключами (ForeignKey) и фиктивными внешними ключами (FictiveForeignKey). Сначала идут модели не имеющие
184
+ зависимостей, затем модели, которые зависят от других моделей. Сортировка моделей РВД происходит по алгоритму
185
+ топологической сортировки.
186
+ """
187
+ ordered_model_keys = cls._get_ordered_models()
188
+
189
+ for model_enum_value in cls._get_enum_data().values():
133
190
  if model_enum_value.is_manual_order_number:
134
191
  try:
135
- manual_index_model = ordered_models[model_enum_value.order_number - 1]
192
+ manual_index_model_key = ordered_model_keys[model_enum_value.order_number - 1]
136
193
  except IndexError:
137
194
  continue
138
195
 
139
- if manual_index_model != model_enum_value.model._meta.label and cls.is_strict_order_number:
196
+ if manual_index_model_key != model_enum_value.key and cls.is_strict_order_number:
140
197
  raise ValueError(
141
198
  f'Order number "{model_enum_value.order_number}" is already in use in the "{cls.__name__}". '
142
199
  f'Please choose a different one.'
143
200
  )
144
201
  else:
145
- model_enum_value.order_number = ordered_models.index(model_enum_value.model._meta.label) + 1
202
+ model_enum_value.order_number = ordered_model_keys.index(model_enum_value.key) + 1
203
+
204
+ @classmethod
205
+ def _calculate_tmp_order_number(cls) -> int:
206
+ """Вычисление временного порядкового номера элемента модели-перечисления."""
207
+ order_number_enum_data = cls._get_order_number_enum_data()
208
+
209
+ order_numbers = order_number_enum_data.keys()
210
+ tmp_order_number = max(order_numbers) + 1 if order_number_enum_data else 1
146
211
 
147
- return ordered_models.index(model._meta.label) + 1
212
+ return tmp_order_number
213
+
214
+ @classmethod
215
+ def _validate_manual_order_number(cls, order_number: int, model: Type['BaseRDMModel']):
216
+ """Валидация пользовательского порядкового номера."""
217
+ ordered_models = cls._get_ordered_models()
218
+
219
+ try:
220
+ manual_index_model = ordered_models[order_number - 1]
221
+ except IndexError:
222
+ return
223
+
224
+ if manual_index_model != model._meta.label and cls.is_strict_order_number:
225
+ raise ValueError(
226
+ f'Order number "{order_number}" is already in use in the "{cls.__name__}". '
227
+ f'Please choose a different one.'
228
+ )
229
+
230
+ @classmethod
231
+ def _update_reverse_relations(cls):
232
+ """Обновление обратных связей моделей РВД.
233
+
234
+ У значения модели-перечисления
235
+ """
236
+ enum_data = cls._get_enum_data()
237
+ # Обнуление обратных связей всех моделей
238
+ for model_enum_value in enum_data.values():
239
+ model_enum_value.reverse_relations = defaultdict(list)
240
+
241
+ models_relations = cls._get_models_relations()
242
+
243
+ for model_key, model_relations in models_relations.items():
244
+ for field_name, related_model_key in model_relations.items():
245
+ enum_data[related_model_key].reverse_relations[model_key].append(field_name)
246
+
247
+ @classmethod
248
+ def get_model_label_enum_data(cls) -> dict[str, Type['ModelEnumValue']]:
249
+ """Получение словаря значений модели-перечисления с лейблом модели в качестве значения."""
250
+ enum_data = cls._get_enum_data()
251
+
252
+ model_label_enum_data = {model_value.model._meta.label: model_value for model_value in enum_data.values()}
253
+
254
+ return model_label_enum_data
148
255
 
149
256
  @classmethod
150
257
  def extend(
151
258
  cls,
152
259
  key,
153
- model: Type[BaseRDMModel] = None,
260
+ model: Type['BaseRDMModel'] = None,
154
261
  title: str = '',
155
262
  creating_trigger_models: tuple = (),
156
263
  loggable_models: tuple = (),
@@ -173,18 +280,18 @@ class RDMModelEnum(TitledModelEnum):
173
280
  args: порядковые аргументы для модели-перечисления
174
281
  kwargs: именованные аргументы для модели-перечисления
175
282
  """
283
+ if key.upper() in cls.get_model_enum_keys():
284
+ raise ValueError('Model enum value with key "{key}" already exists.')
285
+
176
286
  if model is None:
177
287
  raise ValueError(f'Trying extend model "{cls.__name__}". Argument "model" is required.')
178
288
 
179
289
  is_manual_order_number = order_number is not None
180
290
 
181
- try:
182
- order_number = cls._calculate_order_number(
183
- order_number=order_number,
184
- model=model,
185
- )
186
- except ValueError as e:
187
- raise ValueError(f'Trying register model "{model.__name__}". {e.args[0]}')
291
+ if order_number is None:
292
+ order_number = cls._calculate_tmp_order_number()
293
+ else:
294
+ cls._validate_manual_order_number(order_number=order_number, model=model)
188
295
 
189
296
  model_enum_value = ModelEnumValue(
190
297
  key=key,
@@ -194,7 +301,10 @@ class RDMModelEnum(TitledModelEnum):
194
301
  loggable_models=loggable_models,
195
302
  order_number=order_number,
196
303
  is_manual_order_number=is_manual_order_number,
304
+ reverse_relations=defaultdict(list),
197
305
  **kwargs,
198
306
  )
199
-
200
307
  setattr(cls, key, model_enum_value)
308
+
309
+ cls._recalculate_order_numbers()
310
+ cls._update_reverse_relations()
@@ -168,6 +168,11 @@ class RDMExportingDataSubStageStatus(TitledModelEnum):
168
168
  verbose_name = 'Модель-перечисление статусов подэтапа выгрузки данных'
169
169
  verbose_name_plural = 'Модели-перечисления статусов подэтапов выгрузки данных'
170
170
 
171
+ @classmethod
172
+ def get_not_finished_statuses(cls):
173
+ """Получить список статусов, которые не завершены."""
174
+ return cls.CREATED, cls.IN_PROGRESS, cls.FAILED, cls.READY_FOR_EXPORT, cls.PROCESS_ERROR
175
+
171
176
 
172
177
  class RDMExportingDataSubStage(ReprStrPreModelMixin, BaseObjectModel):
173
178
  """Подэтап выгрузки данных."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edu-rdm-integration
3
- Version: 3.18.0
3
+ Version: 3.18.2
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Author-email: BARS Group <education_dev@bars.group>
6
6
  Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/edu-rdm-integration/browse