edu-rdm-integration 3.5.10__tar.gz → 3.7.0__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.
Files changed (197) hide show
  1. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/CHANGELOG.md +29 -0
  2. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/PKG-INFO +88 -3
  3. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/README.md +87 -2
  4. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/app_settings.py +13 -0
  5. edu_rdm_integration-3.7.0/src/edu_rdm_integration/base.py +147 -0
  6. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/consts.py +2 -0
  7. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enums.py +31 -0
  8. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/helpers.py +1 -2
  9. edu_rdm_integration-3.7.0/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +22 -0
  10. edu_rdm_integration-3.7.0/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +16 -0
  11. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/models.py +6 -39
  12. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/registry/actions.py +23 -4
  13. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/registry/ui.py +44 -0
  14. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/tasks.py +105 -113
  15. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/PKG-INFO +88 -3
  16. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +2 -0
  17. edu_rdm_integration-3.5.10/src/edu_rdm_integration/base.py +0 -41
  18. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/CONDUCT.md +0 -0
  19. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/LICENSE +0 -0
  20. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/MANIFEST.in +0 -0
  21. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/pyproject.toml +0 -0
  22. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/setup.cfg +0 -0
  23. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/__init__.py +0 -0
  24. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
  25. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
  26. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
  27. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
  28. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
  29. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
  30. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
  31. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
  32. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
  33. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
  34. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
  35. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/results.py +0 -0
  36. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
  37. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
  38. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
  39. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
  40. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
  41. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/app_meta.py +0 -0
  42. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/apps.py +0 -0
  43. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
  44. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
  45. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
  46. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
  47. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
  48. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
  49. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/utils.py +0 -0
  50. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
  51. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
  52. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
  53. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
  54. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/helpers.py +0 -0
  55. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
  56. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/mixins.py +0 -0
  57. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
  58. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
  59. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
  60. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
  61. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
  62. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
  63. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
  64. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
  65. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
  66. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
  67. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
  68. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
  69. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
  70. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
  71. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
  72. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
  73. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
  74. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
  75. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/generators.py +0 -0
  76. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/helpers.py +0 -0
  77. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
  78. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
  79. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +0 -0
  80. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
  81. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
  82. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
  83. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
  84. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
  85. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
  86. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
  87. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
  88. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
  89. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
  90. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
  91. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
  92. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
  93. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/tests.py +0 -0
  94. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/entities.py +0 -0
  95. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enum_register/__init__.py +0 -0
  96. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enum_register/mixins.py +0 -0
  97. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enum_register/register.py +0 -0
  98. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
  99. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
  100. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
  101. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
  102. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
  103. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
  104. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
  105. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
  106. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
  107. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
  108. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
  109. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
  110. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
  111. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
  112. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
  113. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
  114. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
  115. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/dataclasses.py +0 -0
  116. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/export.py +0 -0
  117. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/export_manager.py +0 -0
  118. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
  119. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/helpers.py +0 -0
  120. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/queue.py +0 -0
  121. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
  122. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/__init__.py +0 -0
  123. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
  124. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/apps.py-tpl +0 -0
  125. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/caches.py-tpl +0 -0
  126. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/consts.py-tpl +0 -0
  127. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/enums.py-tpl +0 -0
  128. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/errors.py-tpl +0 -0
  129. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/functions.py-tpl +0 -0
  130. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
  131. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/managers.py-tpl +0 -0
  132. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
  133. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/results.py-tpl +0 -0
  134. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/runners.py-tpl +0 -0
  135. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/strings.py-tpl +0 -0
  136. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/tests.py-tpl +0 -0
  137. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/validators.py-tpl +0 -0
  138. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/__init__.py-tpl +0 -0
  139. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/apps.py-tpl +0 -0
  140. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/caches.py-tpl +0 -0
  141. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/consts.py-tpl +0 -0
  142. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/enums.py-tpl +0 -0
  143. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/errors.py-tpl +0 -0
  144. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl +0 -0
  145. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl +0 -0
  146. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +0 -0
  147. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/presenters.py-tpl +0 -0
  148. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/results.py-tpl +0 -0
  149. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl +0 -0
  150. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/strings.py-tpl +0 -0
  151. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/tests.py-tpl +0 -0
  152. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/validators.py-tpl +0 -0
  153. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/__init__.py +0 -0
  154. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
  155. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/async_fix_attachment_size.py +0 -0
  156. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/check_upload_status.py +0 -0
  157. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/collect_latest_models_data.py +0 -0
  158. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
  159. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/datamart_status.py +0 -0
  160. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/datamart_upload.py +0 -0
  161. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
  162. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/export_latest_entities_data.py +0 -0
  163. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/general.py +0 -0
  164. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/mapping.py +0 -0
  165. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
  166. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
  167. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
  168. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
  169. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
  170. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
  171. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
  172. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
  173. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
  174. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
  175. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
  176. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
  177. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
  178. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
  179. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
  180. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
  181. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/redis_cache.py +0 -0
  182. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/registry/__init__.py +0 -0
  183. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/signals.py +0 -0
  184. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/storages.py +0 -0
  185. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/templates/ui-js/transferred-entity-list.js +0 -0
  186. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/typing.py +0 -0
  187. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/__init__.py +0 -0
  188. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/actions.py +0 -0
  189. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/apps.py +0 -0
  190. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/enums.py +0 -0
  191. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/managers.py +0 -0
  192. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
  193. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/ui.py +0 -0
  194. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/utils.py +0 -0
  195. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
  196. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
  197. {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -28,6 +28,35 @@
28
28
 
29
29
  ### Удалено
30
30
 
31
+ ## [3.7.0] - 2025-05-12
32
+
33
+ ### Удалено
34
+
35
+ - [EDUSCHL-23121](https://jira.bars.group/browse/EDUSCHL-23121)
36
+ MINOR Удалена неиспользуемая модель UploadDataCommand
37
+
38
+
39
+ ## [3.6.0] - 2025-04-19
40
+
41
+ Вводится две новые очереди и соответсвущие этим очередям периодические задачи
42
+ сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных"
43
+ - по умолчанию все сущности относятся к основной очереди.
44
+ Итого - нужно настроить три очереди для работы.
45
+
46
+ - "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям
47
+ витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
48
+ - Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
49
+ Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
50
+ - "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей.
51
+ Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.
52
+
53
+ ### Добавлено
54
+
55
+ - [EDUSCHL-23348](https://jira.bars.group/browse/EDUSCHL-23348)
56
+ MINOR Добавлено две дополнительные очереди для сбора и выгрузки данных РВД и соответствующие периодические
57
+ задачи TransferLatestEntitiesDataFastPeriodicTask и TransferLatestEntitiesDataLongPeriodicTask. Доработан реестр
58
+ Сущности для сбора и экспорта данных - добавлено окно редактирования для возможности выбора очереди.
59
+
31
60
 
32
61
  ## [3.5.10] - 2025-03-24
33
62
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edu-rdm-integration
3
- Version: 3.5.10
3
+ Version: 3.7.0
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
@@ -78,6 +78,19 @@ Dynamic: license-file
78
78
 
79
79
  Стоит обратить внимание, что сущности РВД могут содержать в себе данные из нескольких моделей РВД.
80
80
 
81
+ Очереди для периодических задач сборки и выгрузки данных
82
+ : Важно учитывать, что с версии пакета 3.6 вводится две новые очереди и соответсвущие этим очередям периодические задачи
83
+ сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных" - по умолчанию все
84
+ сущности относятся к основной очереди.
85
+ Итого - нужно настроить три очереди для работы.
86
+
87
+ - "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям
88
+ витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
89
+ - Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
90
+ Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
91
+ - "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей.
92
+ Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.
93
+
81
94
  ## Требования к окружению
82
95
 
83
96
  Для работы требуется Python >=3.9. Так же в зависимостях есть внутренние пакеты:
@@ -129,6 +142,39 @@ Dynamic: license-file
129
142
  ('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
130
143
  })
131
144
  ```
145
+ С версии пакета 3.6 добавляются новые настройки для двух периодических задач разных очередей сбора и выгрузки данных
146
+ ```
147
+ PROJECT_DEFAULT_CONFIG.update({
148
+ # Настройки РВД
149
+ ('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # Дефолтное значение нужно изменить на специфическое системе
150
+ ('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,
151
+ ('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,
152
+ ('rdm_transfer_task', 'MINUTE'): '0',
153
+ ('rdm_transfer_task', 'HOUR'): '*/4',
154
+ ('rdm_transfer_task', 'DAY_OF_WEEK'): '*',
155
+ ('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS'): 21600,
156
+ ('rdm_transfer_task', 'TIMEDELTA'): 3600,
157
+ ('rdm_transfer_task', 'ENTITIES'): '',
158
+ ('rdm_transfer_task_fast', 'MINUTE'): '*/5',
159
+ ('rdm_transfer_task_fast', 'HOUR'): '*',
160
+ ('rdm_transfer_task_fast', 'DAY_OF_WEEK'): '*',
161
+ ('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS'): 1800,
162
+ ('rdm_transfer_task_long', 'MINUTE'): '0',
163
+ ('rdm_transfer_task_long', 'HOUR'): '*/6',
164
+ ('rdm_transfer_task_long', 'DAY_OF_WEEK'): '*',
165
+ ('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS'): 28800,
166
+ ('rdm_upload_status_task', 'MINUTE'): '*/30',
167
+ ('rdm_upload_status_task', 'HOUR'): '*',
168
+ ('rdm_upload_status_task', 'DAY_OF_WEEK'): '*',
169
+ ('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS'): 7200,
170
+ ('uploader_client', 'URL'): 'http://localhost:8090',
171
+ ('uploader_client', 'DATAMART_NAME'): '',
172
+ ('uploader_client', 'REQUEST_RETRIES'): 10,
173
+ ('uploader_client', 'REQUEST_TIMEOUT'): 10,
174
+ ('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
175
+ })
176
+
177
+ ```
132
178
  - Получение значений настроек из конфигурационного файла в settings.py:
133
179
 
134
180
  ```
@@ -187,7 +233,21 @@ Dynamic: license-file
187
233
  RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION = conf.get_bool('uploader_client', 'ENABLE_REQUEST_EMULATION')
188
234
 
189
235
  ```
190
-
236
+ С версии пакета 3.6 добавляются настройки для двух новых периодических задач
237
+ ```
238
+ # Настройка запуска периодической задачи выгрузки данных - быстрая очередь:
239
+ RDM_FAST_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_fast', 'MINUTE')
240
+ RDM_FAST_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_fast', 'HOUR')
241
+ RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_fast', 'DAY_OF_WEEK')
242
+ RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS')
243
+
244
+ # Настройка запуска периодической задачи выгрузки данных - долгая очередь расчетных моделей:
245
+ RDM_LONG_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_long', 'MINUTE')
246
+ RDM_LONG_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_long', 'HOUR')
247
+ RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_long', 'DAY_OF_WEEK')
248
+ RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS')
249
+
250
+ ```
191
251
  Перечень настроек в settings.py указан в таблице ниже.
192
252
 
193
253
  | Название настройки в settings | Описание | Значение по умолчанию |
@@ -211,7 +271,18 @@ Dynamic: license-file
211
271
  | RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 3600 |
212
272
  | RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
213
273
 
214
-
274
+ С версии пакета 3.6 добавляются новые настройки
275
+
276
+ | Название настройки в settings | Описание | Значение по умолчанию |
277
+ |--------------------------------------------|----------------------------------------------------------------------------------------|-----------------------|
278
+ | RDM_FAST_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Минута | '*/5' |
279
+ | RDM_FAST_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Час | '*' |
280
+ | RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. День недели | '*' |
281
+ | RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 1800 |
282
+ | RDM_LONG_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Минута | 0 |
283
+ | RDM_LONG_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Час | '*/6' |
284
+ | RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. День недели | '*' |
285
+ | RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 28800 |
215
286
 
216
287
  - В дефолтный конфиг проекта необходимо добавить:
217
288
 
@@ -267,7 +338,21 @@ Dynamic: license-file
267
338
  # Включить эмуляцию отправки запросов
268
339
  ENABLE_REQUEST_EMULATION = True
269
340
  ```
341
+ - С версии 3.6 в деволтный конфиг также нужно добавить два дополнительных раздела
342
+ ```
343
+
344
+ [rdm_transfer_task_fast]
345
+ MINUTE=*/2
346
+ HOUR=*
347
+ DAY_OF_WEEK=*
348
+ LOCK_EXPIRE_SECONDS = 1800
270
349
 
350
+ [rdm_transfer_task_long]
351
+ MINUTE=*/15
352
+ HOUR=*
353
+ DAY_OF_WEEK=*
354
+ LOCK_EXPIRE_SECONDS = 21600
355
+ ```
271
356
  На основе дефолтного конфига произвести конфигурирование приложений.
272
357
 
273
358
  ## Сборка и распространение
@@ -34,6 +34,19 @@
34
34
 
35
35
  Стоит обратить внимание, что сущности РВД могут содержать в себе данные из нескольких моделей РВД.
36
36
 
37
+ Очереди для периодических задач сборки и выгрузки данных
38
+ : Важно учитывать, что с версии пакета 3.6 вводится две новые очереди и соответсвущие этим очередям периодические задачи
39
+ сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных" - по умолчанию все
40
+ сущности относятся к основной очереди.
41
+ Итого - нужно настроить три очереди для работы.
42
+
43
+ - "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям
44
+ витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
45
+ - Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
46
+ Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
47
+ - "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей.
48
+ Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.
49
+
37
50
  ## Требования к окружению
38
51
 
39
52
  Для работы требуется Python >=3.9. Так же в зависимостях есть внутренние пакеты:
@@ -85,6 +98,39 @@
85
98
  ('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
86
99
  })
87
100
  ```
101
+ С версии пакета 3.6 добавляются новые настройки для двух периодических задач разных очередей сбора и выгрузки данных
102
+ ```
103
+ PROJECT_DEFAULT_CONFIG.update({
104
+ # Настройки РВД
105
+ ('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # Дефолтное значение нужно изменить на специфическое системе
106
+ ('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,
107
+ ('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,
108
+ ('rdm_transfer_task', 'MINUTE'): '0',
109
+ ('rdm_transfer_task', 'HOUR'): '*/4',
110
+ ('rdm_transfer_task', 'DAY_OF_WEEK'): '*',
111
+ ('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS'): 21600,
112
+ ('rdm_transfer_task', 'TIMEDELTA'): 3600,
113
+ ('rdm_transfer_task', 'ENTITIES'): '',
114
+ ('rdm_transfer_task_fast', 'MINUTE'): '*/5',
115
+ ('rdm_transfer_task_fast', 'HOUR'): '*',
116
+ ('rdm_transfer_task_fast', 'DAY_OF_WEEK'): '*',
117
+ ('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS'): 1800,
118
+ ('rdm_transfer_task_long', 'MINUTE'): '0',
119
+ ('rdm_transfer_task_long', 'HOUR'): '*/6',
120
+ ('rdm_transfer_task_long', 'DAY_OF_WEEK'): '*',
121
+ ('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS'): 28800,
122
+ ('rdm_upload_status_task', 'MINUTE'): '*/30',
123
+ ('rdm_upload_status_task', 'HOUR'): '*',
124
+ ('rdm_upload_status_task', 'DAY_OF_WEEK'): '*',
125
+ ('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS'): 7200,
126
+ ('uploader_client', 'URL'): 'http://localhost:8090',
127
+ ('uploader_client', 'DATAMART_NAME'): '',
128
+ ('uploader_client', 'REQUEST_RETRIES'): 10,
129
+ ('uploader_client', 'REQUEST_TIMEOUT'): 10,
130
+ ('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
131
+ })
132
+
133
+ ```
88
134
  - Получение значений настроек из конфигурационного файла в settings.py:
89
135
 
90
136
  ```
@@ -143,7 +189,21 @@
143
189
  RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION = conf.get_bool('uploader_client', 'ENABLE_REQUEST_EMULATION')
144
190
 
145
191
  ```
146
-
192
+ С версии пакета 3.6 добавляются настройки для двух новых периодических задач
193
+ ```
194
+ # Настройка запуска периодической задачи выгрузки данных - быстрая очередь:
195
+ RDM_FAST_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_fast', 'MINUTE')
196
+ RDM_FAST_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_fast', 'HOUR')
197
+ RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_fast', 'DAY_OF_WEEK')
198
+ RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS')
199
+
200
+ # Настройка запуска периодической задачи выгрузки данных - долгая очередь расчетных моделей:
201
+ RDM_LONG_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_long', 'MINUTE')
202
+ RDM_LONG_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_long', 'HOUR')
203
+ RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_long', 'DAY_OF_WEEK')
204
+ RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS')
205
+
206
+ ```
147
207
  Перечень настроек в settings.py указан в таблице ниже.
148
208
 
149
209
  | Название настройки в settings | Описание | Значение по умолчанию |
@@ -167,7 +227,18 @@
167
227
  | RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 3600 |
168
228
  | RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
169
229
 
170
-
230
+ С версии пакета 3.6 добавляются новые настройки
231
+
232
+ | Название настройки в settings | Описание | Значение по умолчанию |
233
+ |--------------------------------------------|----------------------------------------------------------------------------------------|-----------------------|
234
+ | RDM_FAST_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Минута | '*/5' |
235
+ | RDM_FAST_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Час | '*' |
236
+ | RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. День недели | '*' |
237
+ | RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 1800 |
238
+ | RDM_LONG_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Минута | 0 |
239
+ | RDM_LONG_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Час | '*/6' |
240
+ | RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. День недели | '*' |
241
+ | RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 28800 |
171
242
 
172
243
  - В дефолтный конфиг проекта необходимо добавить:
173
244
 
@@ -223,7 +294,21 @@
223
294
  # Включить эмуляцию отправки запросов
224
295
  ENABLE_REQUEST_EMULATION = True
225
296
  ```
297
+ - С версии 3.6 в деволтный конфиг также нужно добавить два дополнительных раздела
298
+ ```
299
+
300
+ [rdm_transfer_task_fast]
301
+ MINUTE=*/2
302
+ HOUR=*
303
+ DAY_OF_WEEK=*
304
+ LOCK_EXPIRE_SECONDS = 1800
226
305
 
306
+ [rdm_transfer_task_long]
307
+ MINUTE=*/15
308
+ HOUR=*
309
+ DAY_OF_WEEK=*
310
+ LOCK_EXPIRE_SECONDS = 21600
311
+ ```
227
312
  На основе дефолтного конфига произвести конфигурирование приложений.
228
313
 
229
314
  ## Сборка и распространение
@@ -41,6 +41,19 @@ RDM_TRANSFER_TASK_HOUR = '*/4'
41
41
  RDM_TRANSFER_TASK_DAY_OF_WEEK = '*'
42
42
  RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = 60 * 60 * 6
43
43
 
44
+ # Настройка запуска периодической задачи выгрузки данных - очередь быстрого уровня
45
+ RDM_FAST_TRANSFER_TASK_MINUTE = '*/5'
46
+ RDM_FAST_TRANSFER_TASK_HOUR = '*'
47
+ RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = '*'
48
+ RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = 60 * 30
49
+
50
+ # Настройка запуска периодической задачи выгрузки данных - очередь медленного уровня
51
+ RDM_LONG_TRANSFER_TASK_MINUTE = '0'
52
+ RDM_LONG_TRANSFER_TASK_HOUR = '*/6'
53
+ RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = '*'
54
+ RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = 60 * 60 * 6
55
+
56
+
44
57
  # Настройка запуска периодической задачи статуса загрузки данных в витрину:
45
58
  RDM_UPLOAD_STATUS_TASK_MINUTE = '*/30'
46
59
  RDM_UPLOAD_STATUS_TASK_HOUR = '*'
@@ -0,0 +1,147 @@
1
+ import logging
2
+ from abc import (
3
+ ABC,
4
+ abstractmethod,
5
+ )
6
+ from collections import (
7
+ defaultdict,
8
+ )
9
+ from typing import (
10
+ Optional,
11
+ )
12
+
13
+ from django.db.models import (
14
+ Q,
15
+ )
16
+
17
+ from m3_db_utils.consts import (
18
+ DEFAULT_ORDER_NUMBER,
19
+ )
20
+
21
+ from edu_rdm_integration.consts import (
22
+ REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
23
+ REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA,
24
+ )
25
+ from edu_rdm_integration.helpers import (
26
+ UploadStatusHelper,
27
+ get_collecting_managers_max_period_ended_dates,
28
+ get_exporting_managers_max_period_ended_dates,
29
+ save_command_log_link,
30
+ )
31
+ from edu_rdm_integration.models import (
32
+ ExportingDataSubStageUploaderClientLog,
33
+ RegionalDataMartEntityEnum,
34
+ TransferredEntity,
35
+ )
36
+ from edu_rdm_integration.storages import (
37
+ RegionalDataMartEntityStorage,
38
+ )
39
+
40
+
41
+ class BaseOperationData(ABC):
42
+ """Базовый класс операций с данными."""
43
+
44
+ def __init__(self, **kwargs):
45
+ # Идентификатор команды для передачи сигналу manager_created
46
+ self.command_id: Optional[int] = kwargs.get('command_id')
47
+
48
+ self._file_handler: Optional[logging.FileHandler] = None
49
+
50
+ self._add_file_handler()
51
+
52
+ @property
53
+ @abstractmethod
54
+ def _log_file_path(self) -> str:
55
+ """Путь до лог файла."""
56
+
57
+ def _add_file_handler(self) -> None:
58
+ """Добавляет обработчик логов."""
59
+ if self.command_id:
60
+ self._file_handler = logging.FileHandler(self._log_file_path)
61
+
62
+ logging.getLogger('info_logger').addHandler(self._file_handler)
63
+ logging.getLogger('exception_logger').addHandler(self._file_handler)
64
+
65
+ def _remove_file_handler(self) -> None:
66
+ """Удаляет обработчик логов."""
67
+ if self._file_handler:
68
+ logging.getLogger('info_logger').removeHandler(self._file_handler)
69
+ logging.getLogger('exception_logger').removeHandler(self._file_handler)
70
+
71
+ self._file_handler.close()
72
+
73
+
74
+ class BaseTransferLatestEntitiesDataMixin:
75
+ """Миксин сбора и выгрузки данных."""
76
+
77
+ def __init__(self) -> None:
78
+ super().__init__()
79
+
80
+ self._collecting_data_managers: dict[str, type['RunnerManager']] = {}
81
+ self._collecting_data_manager_to_logs_period_end: dict[str, 'datetime'] = {}
82
+
83
+ self._exporting_data_managers: dict[str, type['RunnerManager']] = {}
84
+ self._exporting_data_manager_to_period_end: dict[str, 'datetime'] = {}
85
+
86
+ self._transferred_entities = []
87
+ self._entites_models_map = defaultdict(list)
88
+
89
+ def get_entity_qs(self) -> 'QuerySet[TransferredEntity]':
90
+ """Возвращает сущностей сбора и выгрузки."""
91
+ raise NotImplementedError
92
+
93
+ def _collect_transferred_entities(self) -> None:
94
+ """Собирает сущности РВД, по которым будет произведен сбор и экспорт данных."""
95
+
96
+ self._transferred_entities = [
97
+ (RegionalDataMartEntityEnum.get_model_enum_value(key=entity), export_enabled)
98
+ for entity, export_enabled in self.get_entity_qs().values_list('entity', 'export_enabled')
99
+ ]
100
+
101
+ # Собираем словарь по сущностям с моделями для сборки
102
+ for entity, _ in self._transferred_entities:
103
+ self._entites_models_map[entity.key].extend(
104
+ (model_enum for model_enum in (*entity.additional_model_enums, entity.main_model_enum)
105
+ if model_enum.order_number != DEFAULT_ORDER_NUMBER)
106
+ )
107
+
108
+ def _collect_managers(self) -> None:
109
+ """Собирает менеджеры Функций для сбора и выгрузки данных."""
110
+ entity_storage = RegionalDataMartEntityStorage()
111
+ entity_storage.prepare()
112
+
113
+ collecting_models_data_managers_map = entity_storage.prepare_entities_manager_map(
114
+ tags={REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA},
115
+ )
116
+ exporting_entities_data_managers_map = entity_storage.prepare_entities_manager_map(
117
+ tags={REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA},
118
+ )
119
+
120
+ for entity_key, entity_models in self._entites_models_map.items():
121
+ for entity_model in entity_models:
122
+ collect_manager_class = collecting_models_data_managers_map.get(entity_model.key)
123
+ if collect_manager_class:
124
+ self._collecting_data_managers[entity_model.key] = collect_manager_class
125
+
126
+ export_manager_class = exporting_entities_data_managers_map.get(entity_key)
127
+ if export_manager_class:
128
+ self._exporting_data_managers[entity_key] = export_manager_class
129
+
130
+ def _calculate_collecting_managers_logs_period_ended_at(self) -> None:
131
+ """Определяет дату последнего успешного этапа сбора у менеджеров Функций сбора."""
132
+ self._collecting_data_manager_to_logs_period_end = get_collecting_managers_max_period_ended_dates(
133
+ self._collecting_data_managers.values()
134
+ )
135
+
136
+ def _calculate_exporting_managers_ended_at(self) -> None:
137
+ """Определяет дату последнего успешного подэтапа экспорта у менеджеров Функций экспорта."""
138
+ self._exporting_data_manager_to_period_end = get_exporting_managers_max_period_ended_dates(
139
+ self._exporting_data_managers.values()
140
+ )
141
+
142
+ def prepare_collect_export_managers(self) -> None:
143
+ """Подготовка менджеров сбора и экспорта."""
144
+ self._collect_transferred_entities()
145
+ self._collect_managers()
146
+ self._calculate_collecting_managers_logs_period_ended_at()
147
+ self._calculate_exporting_managers_ended_at()
@@ -29,6 +29,8 @@ ACADEMIC_YEAR = {
29
29
  }
30
30
 
31
31
  TASK_QUEUE_NAME = 'RDM'
32
+ FAST_TRANSFER_TASK_QUEUE_NAME = 'RDM_FAST'
33
+ LONG_TRANSFER_TASK_QUEUE_NAME = 'RDM_LONG'
32
34
 
33
35
 
34
36
  # Кортеж операций для обновления данных
@@ -6,6 +6,12 @@ from m3.db import (
6
6
  BaseEnumerate,
7
7
  )
8
8
 
9
+ from edu_rdm_integration.consts import (
10
+ FAST_TRANSFER_TASK_QUEUE_NAME,
11
+ LONG_TRANSFER_TASK_QUEUE_NAME,
12
+ TASK_QUEUE_NAME,
13
+ )
14
+
9
15
 
10
16
  class ValueCodeEnumerate(BaseEnumerate):
11
17
  """
@@ -166,3 +172,28 @@ class CommandType(BaseEnumerate):
166
172
  AUTO: 'Автоматический',
167
173
  MANUAL: 'Ручной',
168
174
  }
175
+
176
+
177
+ class EntityLevelQueueTypeEnum(BaseEnumerate):
178
+ """Тип уровня очереди сущности."""
179
+
180
+ FAST = 1
181
+ BASE = 2
182
+ LONG = 3
183
+
184
+ values = {
185
+ FAST: 'Быстрая',
186
+ BASE: 'Основная',
187
+ LONG: 'Долгая'
188
+ }
189
+
190
+ celery_queue_maps = {
191
+ FAST: FAST_TRANSFER_TASK_QUEUE_NAME,
192
+ BASE: TASK_QUEUE_NAME,
193
+ LONG: LONG_TRANSFER_TASK_QUEUE_NAME
194
+ }
195
+
196
+ @classmethod
197
+ def get_queue_name(cls, level: int) -> Optional[str]:
198
+ """Возвращает очередь."""
199
+ return cls.celery_queue_maps.get(level)
@@ -58,7 +58,6 @@ from edu_rdm_integration.models import (
58
58
  ExportingDataStageStatus,
59
59
  ExportingDataSubStageStatus,
60
60
  ExportingDataSubStageUploaderClientLog,
61
- UploadDataCommand,
62
61
  UploadStatusRequestLog,
63
62
  )
64
63
  from edu_rdm_integration.redis_cache import (
@@ -321,7 +320,7 @@ class Graph:
321
320
 
322
321
 
323
322
  def save_command_log_link(
324
- command: Union[AbstractExportDataCommandProgress, UploadDataCommand],
323
+ command: AbstractExportDataCommandProgress,
325
324
  log_dir: str
326
325
  ) -> None:
327
326
  """Сохраняет ссылку на лог команды."""
@@ -0,0 +1,22 @@
1
+ # Generated by Django 3.2.24 on 2025-04-17 12:43
2
+
3
+ from django.db import (
4
+ migrations,
5
+ models,
6
+ )
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ('edu_rdm_integration', '0015_set_exporting_sub_stage_status'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AddField(
17
+ model_name='transferredentity',
18
+ name='queue_level',
19
+ field=models.PositiveIntegerField(
20
+ choices=[(1, 'Быстрая'), (2, 'Основная'), (3, 'Долгая')], default=2, verbose_name='Уровень очереди'),
21
+ ),
22
+ ]
@@ -0,0 +1,16 @@
1
+ # Generated by Django 3.2.24 on 2025-05-07 19:50
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('edu_rdm_integration', '0016_transferredentity_queue_level'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.DeleteModel(
14
+ name='UploadDataCommand',
15
+ ),
16
+ ]
@@ -63,6 +63,7 @@ from m3_db_utils.models import (
63
63
 
64
64
  from edu_rdm_integration.enums import (
65
65
  CommandType,
66
+ EntityLevelQueueTypeEnum,
66
67
  FileUploadStatusEnum,
67
68
  )
68
69
  from edu_rdm_integration.uploader_log.managers import (
@@ -932,6 +933,11 @@ class TransferredEntity(BaseObjectModel):
932
933
  verbose_name='Включение экспорта для сущности',
933
934
  default=True,
934
935
  )
936
+ queue_level = PositiveIntegerField(
937
+ choices=EntityLevelQueueTypeEnum.get_choices(),
938
+ default=EntityLevelQueueTypeEnum.BASE,
939
+ verbose_name='Уровень очереди',
940
+ )
935
941
 
936
942
  class Meta:
937
943
  db_table = 'rdm_transferred_entity'
@@ -963,42 +969,3 @@ class ExportingDataSubStageEntity(BaseObjectModel):
963
969
  db_table = 'rdm_exporting_data_sub_stage_entity'
964
970
  verbose_name = 'Связь сущности и подэтапа выгрузки'
965
971
  verbose_name_plural = 'Связи сущности и подэтапа выгрузки'
966
-
967
-
968
- class UploadDataCommand(ReprStrPreModelMixin, BaseObjectModel):
969
- """Модель, хранящая данные для формирования и отслеживания асинхронной задачи по отправке данных в витрину."""
970
-
971
- task = ForeignKey(
972
- to='async_task.RunningTask',
973
- verbose_name='Асинхронная задача',
974
- blank=True,
975
- null=True,
976
- on_delete=SET_NULL,
977
- )
978
- logs_link = FileField(
979
- upload_to=get_data_command_progress_attachment_path,
980
- max_length=255,
981
- verbose_name='Ссылка на файл логов',
982
- )
983
- type = PositiveSmallIntegerField( # noqa: A003
984
- verbose_name='Тип команды',
985
- choices=CommandType.get_choices(),
986
- )
987
- entity = ForeignKey(
988
- to=RegionalDataMartEntityEnum,
989
- verbose_name='Сущность РВД',
990
- on_delete=PROTECT,
991
- )
992
- created = DateTimeField(
993
- verbose_name='Дата создания',
994
- default=timezone.now,
995
- )
996
- generation_id = UUIDField(
997
- 'Идентификатор генерации',
998
- default=uuid.uuid4,
999
- )
1000
-
1001
- class Meta:
1002
- db_table = 'rdm_upload_data_command'
1003
- verbose_name = 'Команда отправки данных в витрину'
1004
- verbose_name_plural = 'Команды отправки данных в витрину'