edu-rdm-integration 0.8.5__tar.gz → 0.9.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 (180) hide show
  1. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/CHANGELOG.md +34 -0
  2. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/PKG-INFO +37 -2
  3. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/external_packages.txt +1 -0
  4. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/internal_packages.txt +2 -2
  5. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/setup.py +1 -1
  6. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/mixins.py +1 -1
  7. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +2 -2
  8. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/tests.py +2 -0
  9. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/export.py +13 -3
  10. edu-rdm-integration-0.9.0/src/edu_rdm_integration/helpers.py +137 -0
  11. edu-rdm-integration-0.9.0/src/edu_rdm_integration/management/commands/check_upload_status.py +97 -0
  12. edu-rdm-integration-0.9.0/src/edu_rdm_integration/management/commands/collect_latest_models_data.py +20 -0
  13. edu-rdm-integration-0.9.0/src/edu_rdm_integration/management/commands/export_latest_entities_data.py +26 -0
  14. edu-rdm-integration-0.9.0/src/edu_rdm_integration/tasks.py +94 -0
  15. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/PKG-INFO +37 -2
  16. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +5 -0
  17. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/requires.txt +2 -1
  18. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/CONDUCT.md +0 -0
  19. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/LICENSE +0 -0
  20. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/MANIFEST.in +0 -0
  21. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/README.md +0 -0
  22. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/pyproject.toml +0 -0
  23. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/development_packages.txt +0 -0
  24. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/internal_sources.txt +0 -0
  25. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/production_packages.txt +0 -0
  26. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/system_packages.txt +0 -0
  27. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/dependencies/testing_packages.txt +0 -0
  28. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/development.txt +0 -0
  29. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/production.txt +0 -0
  30. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/requirements/stage.txt +0 -0
  31. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/setup.cfg +0 -0
  32. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/__init__.py +0 -0
  33. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
  34. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
  35. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
  36. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
  37. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
  38. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
  39. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
  40. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
  41. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
  42. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
  43. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
  44. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/results.py +0 -0
  45. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
  46. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
  47. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
  48. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
  49. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
  50. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/app_settings.py +0 -0
  51. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/apps.py +0 -0
  52. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/base.py +0 -0
  53. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
  54. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
  55. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
  56. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
  57. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/helpers.py +0 -0
  58. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
  59. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
  60. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
  61. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
  62. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
  63. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
  64. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
  65. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
  66. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
  67. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
  68. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
  69. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
  70. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
  71. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
  72. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
  73. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
  74. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
  75. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
  76. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
  77. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/generators.py +0 -0
  78. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/helpers.py +0 -0
  79. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
  80. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
  81. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
  82. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
  83. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
  84. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
  85. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
  86. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
  87. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
  88. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
  89. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
  90. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
  91. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
  92. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
  93. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
  94. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/consts.py +0 -0
  95. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/entities.py +0 -0
  96. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/enum_register/__init__.py +0 -0
  97. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/enum_register/mixins.py +0 -0
  98. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/enum_register/register.py +0 -0
  99. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/enums.py +0 -0
  100. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
  101. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
  102. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
  103. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
  104. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
  105. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
  106. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
  107. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
  108. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
  109. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
  110. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
  111. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
  112. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
  113. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
  114. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
  115. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
  116. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
  117. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
  118. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/helpers.py +0 -0
  119. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
  120. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/__init__.py +0 -0
  121. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
  122. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/apps.py-tpl +0 -0
  123. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/caches.py-tpl +0 -0
  124. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/consts.py-tpl +0 -0
  125. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/enums.py-tpl +0 -0
  126. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/errors.py-tpl +0 -0
  127. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/functions.py-tpl +0 -0
  128. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
  129. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/managers.py-tpl +0 -0
  130. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
  131. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/results.py-tpl +0 -0
  132. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/runners.py-tpl +0 -0
  133. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/strings.py-tpl +0 -0
  134. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/tests.py-tpl +0 -0
  135. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/validators.py-tpl +0 -0
  136. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/__init__.py-tpl +0 -0
  137. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/apps.py-tpl +0 -0
  138. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/caches.py-tpl +0 -0
  139. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/consts.py-tpl +0 -0
  140. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/enums.py-tpl +0 -0
  141. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/errors.py-tpl +0 -0
  142. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl +0 -0
  143. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl +0 -0
  144. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +0 -0
  145. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/presenters.py-tpl +0 -0
  146. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/results.py-tpl +0 -0
  147. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl +0 -0
  148. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/strings.py-tpl +0 -0
  149. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/tests.py-tpl +0 -0
  150. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/validators.py-tpl +0 -0
  151. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/__init__.py +0 -0
  152. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
  153. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
  154. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/commands/datamart_status.py +0 -0
  155. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/commands/datamart_upload.py +0 -0
  156. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
  157. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/management/general.py +0 -0
  158. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/mapping.py +0 -0
  159. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
  160. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
  161. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
  162. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
  163. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
  164. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
  165. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
  166. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
  167. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/models.py +0 -0
  168. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/signals.py +0 -0
  169. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/storages.py +0 -0
  170. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/uploader_log/__init__.py +0 -0
  171. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/uploader_log/actions.py +0 -0
  172. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/uploader_log/apps.py +0 -0
  173. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/uploader_log/enums.py +0 -0
  174. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/uploader_log/managers.py +0 -0
  175. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/uploader_log/ui.py +0 -0
  176. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration/utils.py +0 -0
  177. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
  178. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/namespace_packages.txt +0 -0
  179. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/not-zip-safe +0 -0
  180. {edu-rdm-integration-0.8.5 → edu-rdm-integration-0.9.0}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -28,6 +28,40 @@
28
28
 
29
29
  ### Удалено
30
30
 
31
+ ## [0.9.0] - 2023-12-29
32
+
33
+ Из ЭШ перенесены периодические задачи по сбору статусов загрузки файлов в витрину, а также
34
+ по поиску зависших этапов/подэтапов экспорта.
35
+
36
+ Также из ЭШ перенесены менедж-команды:
37
+ - check_upload_status - проверка состояния отправленных данных в витрину,
38
+ - collect_lastest_models_data - сбор на основе логов за период с последней сборки до указанной даты,
39
+ - export_latest_entities_data - экспорт данных за период с последней сборки до указанной даты.
40
+
41
+ Типы получаемых из log_change.fields полей соответствуют типам полей из логируемых моделей.
42
+
43
+ ### Добавлено
44
+
45
+ - [EDUSCHL-21013](https://jira.bars.group/browse/EDUSCHL-21013)
46
+ MINOR Перенесена часть асинхронных РВД задач из ЭШ, а также часть менедж-команд
47
+
48
+ ### Изменено
49
+
50
+ - [EDUSCHL-20793](https://jira.bars.group/browse/EDUSCHL-20793)
51
+ MINOR Типы получаемых из log_change.fields полей должны соответствовать типам полей из логируемых моделей
52
+
53
+
54
+ ## [0.8.6] - 2023-12-18
55
+
56
+ В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
57
+ списковому типу (ArrayField).
58
+
59
+ ### Добавлено
60
+
61
+ - [EDUSCHL-19606](https://jira.bars.group/browse/EDUSCHL-19606)
62
+ PATCH В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
63
+ списковому типу (ArrayField).
64
+
31
65
 
32
66
  ## [0.8.5] - 2023-12-14
33
67
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 0.8.5
3
+ Version: 0.9.0
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -28,7 +28,8 @@ Requires-Dist: setuptools<69,>=47.3.1
28
28
  Requires-Dist: wheel<0.42,>=0.37.1
29
29
  Requires-Dist: transliterate<2
30
30
  Requires-Dist: Django<2.3,>=1.11
31
- Requires-Dist: educommon<4,>=3.6.0
31
+ Requires-Dist: celery==4.4.7
32
+ Requires-Dist: educommon<4,>=3.7.0
32
33
  Requires-Dist: function-tools<1,>=0.8.0
33
34
  Requires-Dist: m3-db-utils<1,>=0.3.10
34
35
  Requires-Dist: uploader-client<1,>=0.2.1
@@ -289,6 +290,40 @@ Requires-Dist: uploader-client<1,>=0.2.1
289
290
 
290
291
  ### Удалено
291
292
 
293
+ ## [0.9.0] - 2023-12-29
294
+
295
+ Из ЭШ перенесены периодические задачи по сбору статусов загрузки файлов в витрину, а также
296
+ по поиску зависших этапов/подэтапов экспорта.
297
+
298
+ Также из ЭШ перенесены менедж-команды:
299
+ - check_upload_status - проверка состояния отправленных данных в витрину,
300
+ - collect_lastest_models_data - сбор на основе логов за период с последней сборки до указанной даты,
301
+ - export_latest_entities_data - экспорт данных за период с последней сборки до указанной даты.
302
+
303
+ Типы получаемых из log_change.fields полей соответствуют типам полей из логируемых моделей.
304
+
305
+ ### Добавлено
306
+
307
+ - [EDUSCHL-21013](https://jira.bars.group/browse/EDUSCHL-21013)
308
+ MINOR Перенесена часть асинхронных РВД задач из ЭШ, а также часть менедж-команд
309
+
310
+ ### Изменено
311
+
312
+ - [EDUSCHL-20793](https://jira.bars.group/browse/EDUSCHL-20793)
313
+ MINOR Типы получаемых из log_change.fields полей должны соответствовать типам полей из логируемых моделей
314
+
315
+
316
+ ## [0.8.6] - 2023-12-18
317
+
318
+ В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
319
+ списковому типу (ArrayField).
320
+
321
+ ### Добавлено
322
+
323
+ - [EDUSCHL-19606](https://jira.bars.group/browse/EDUSCHL-19606)
324
+ PATCH В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
325
+ списковому типу (ArrayField).
326
+
292
327
 
293
328
  ## [0.8.5] - 2023-12-14
294
329
 
@@ -1,2 +1,3 @@
1
1
  transliterate<2
2
2
  Django>=1.11,<2.3
3
+ celery==4.4.7
@@ -1,4 +1,4 @@
1
- educommon>=3.6.0,<4
1
+ educommon>=3.7.0,<4
2
2
  function-tools>=0.8.0,<1
3
3
  m3-db-utils>=0.3.10,<1
4
- uploader-client>=0.2.1,<1
4
+ uploader-client>=0.2.1,<1
@@ -17,7 +17,7 @@ from setuptools import (
17
17
 
18
18
  PROJECT = 'edu_rdm_integration'
19
19
 
20
- VERSION = '0.8.5'
20
+ VERSION = '0.9.0'
21
21
 
22
22
  current_dir_path = Path().resolve()
23
23
 
@@ -36,7 +36,7 @@ class ReformatLogsMixin:
36
36
  operation = LOG_OPERATION_MAP[log.operation]
37
37
 
38
38
  if operation in EntityLogOperation.values:
39
- fields = log.data
39
+ fields = log.transformed_data
40
40
  else:
41
41
  fields = {}
42
42
 
@@ -131,9 +131,9 @@ class BaseCollectingExportedDataFunctionCacheStorage(WebEduFunctionCacheStorage)
131
131
  operation = LOG_OPERATION_MAP[log.operation]
132
132
 
133
133
  if operation in (EntityLogOperation.CREATE, EntityLogOperation.DELETE):
134
- fields = log.data
134
+ fields = log.transformed_data
135
135
  elif operation == EntityLogOperation.UPDATE:
136
- fields = log.changes
136
+ fields = log.transformed_changes
137
137
  else:
138
138
  fields = {}
139
139
 
@@ -165,6 +165,8 @@ class BaseCollectingFunctionTestCase(TestCase):
165
165
  fields[key] = str(value)
166
166
  elif isinstance(value, FieldFile):
167
167
  fields[key] = value.name
168
+ elif isinstance(value, list):
169
+ fields[key] = f'{{{",".join(map(str, value))}}}'
168
170
  else:
169
171
  fields[key] = value
170
172
 
@@ -44,6 +44,9 @@ from django.utils.datastructures import (
44
44
  from educommon import (
45
45
  logger,
46
46
  )
47
+ from educommon.async_task.models import (
48
+ RunningTask,
49
+ )
47
50
  from educommon.utils.date import (
48
51
  get_today_max_datetime,
49
52
  )
@@ -126,12 +129,11 @@ class BaseExportEntitiesData(BaseOperationData):
126
129
  #TODO Вынужденная мера, т.к. при запуске команды не производится проверка готовности конфигов приложений.
127
130
  # Нужно переработать механизм конфигурирования клиента загрузчика.
128
131
  """
132
+ import uploader_client
129
133
  from django.core.cache import (
130
134
  DEFAULT_CACHE_ALIAS,
131
135
  caches,
132
136
  )
133
-
134
- import uploader_client
135
137
  from uploader_client.contrib.rdm.interfaces.configurations import (
136
138
  RegionalDataMartUploaderConfig,
137
139
  )
@@ -290,7 +292,7 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
290
292
  """Добавляет в описание асинхронной задачи список выгруженных сущностей."""
291
293
  if exported_entities and self.task_id:
292
294
  self.async_task.objects.filter(
293
- task_id=self.task_id,
295
+ pk=self.task_id,
294
296
  ).update(
295
297
  description=Concat(
296
298
  'description',
@@ -406,3 +408,11 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
406
408
 
407
409
  class ExportEntitiesData(BaseExportEntitiesData):
408
410
  """Экспорт сущностей РВД за указанных период."""
411
+
412
+
413
+ class ExportLatestEntitiesData(BaseExportLatestEntitiesData):
414
+ """Класс выгрузки сущностей с момента последней успешной выгрузки."""
415
+
416
+ def _get_async_task(self) -> Model:
417
+ """Возвращает модель асинхронной задачи."""
418
+ return RunningTask
@@ -0,0 +1,137 @@
1
+ from concurrent.futures import (
2
+ ThreadPoolExecutor,
3
+ )
4
+ from json import (
5
+ JSONDecodeError,
6
+ )
7
+ from typing import (
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Dict,
11
+ Optional,
12
+ Tuple,
13
+ )
14
+
15
+ from django.db import (
16
+ transaction,
17
+ )
18
+ from django.db.models import (
19
+ QuerySet,
20
+ )
21
+ from uploader_client.adapters import (
22
+ adapter,
23
+ )
24
+
25
+ from educommon import (
26
+ logger,
27
+ )
28
+
29
+ from edu_rdm_integration.enums import (
30
+ FileUploadStatusEnum,
31
+ )
32
+ from edu_rdm_integration.export_data.base.requests import (
33
+ RegionalDataMartStatusRequest,
34
+ )
35
+ from edu_rdm_integration.models import (
36
+ DataMartRequestStatus,
37
+ ExportingDataSubStageUploaderClientLog,
38
+ UploadStatusRequestLog,
39
+ )
40
+
41
+
42
+ if TYPE_CHECKING:
43
+ from uploader_client.models import (
44
+ Entry,
45
+ )
46
+
47
+
48
+ class UploadStatusHelper:
49
+ """Хелпер проверки статуса загрузки данных в витрину."""
50
+
51
+ def __init__(self, in_progress_uploads: QuerySet) -> None:
52
+ self._in_progress_uploads = in_progress_uploads
53
+
54
+ def run(self, thread_count: int = 1) -> None:
55
+ """Запускает проверки статусов."""
56
+ if thread_count > 1:
57
+ with ThreadPoolExecutor(max_workers=thread_count) as pool:
58
+ pool.map(self._process_upload, self._in_progress_uploads)
59
+ else:
60
+ for upload in self._in_progress_uploads:
61
+ self._process_upload(upload)
62
+
63
+ @classmethod
64
+ def send_upload_status_request(cls, request_id: str) -> Tuple[Optional[Dict[str, Any]], 'Entry']:
65
+ """Формирует и отправляет запрос для получения статуса загрузки данных в витрину."""
66
+ request = RegionalDataMartStatusRequest(
67
+ request_id=request_id,
68
+ method='GET',
69
+ parameters={},
70
+ headers={
71
+ 'Content-Type': 'application/json',
72
+ },
73
+ )
74
+
75
+ result = adapter.send(request)
76
+
77
+ response = None
78
+
79
+ if result.error:
80
+ logger.error(
81
+ f'Ошибка при получении статуса загрузки данных в витрину. Идентификатор загрузки: {request_id}. '
82
+ f'Ошибка: {result.error}, запрос: {result.log.request}, ответ: {result.log.response}',
83
+ )
84
+ else:
85
+ logger.info(
86
+ f'Получен ответ со статусом {result.response.status_code} и содержимым {result.response.text}. '
87
+ f'Идентификатор загрузки: {request_id}',
88
+ )
89
+ try:
90
+ response = result.response.json()
91
+ except JSONDecodeError:
92
+ logger.error(
93
+ f'Не удалось получить данные из ответа запроса статуса загрузки данных в витрину. '
94
+ f'Идентификатор загрузки: {request_id}, ответ: {result.response.text}',
95
+ )
96
+
97
+ return response, result.log
98
+
99
+ @classmethod
100
+ def update_upload_status(
101
+ cls,
102
+ upload: ExportingDataSubStageUploaderClientLog,
103
+ response: Optional[Dict[str, Any]],
104
+ log_entry: 'Entry',
105
+ ) -> None:
106
+ """Обновляет статус загрузки данных в витрину."""
107
+ request_status = None
108
+
109
+ if isinstance(response, dict):
110
+ request_status = DataMartRequestStatus.get_values_to_enum_data().get(response.get('code'))
111
+
112
+ if not request_status:
113
+ logger.error(
114
+ 'Не удалось определить статус загрузки данных в витрину. Идентификатор загрузки: '
115
+ f'{upload.request_id}, данные ответа: {response}',
116
+ )
117
+
118
+ with transaction.atomic():
119
+ UploadStatusRequestLog.objects.create(
120
+ upload=upload,
121
+ entry=log_entry,
122
+ request_status_id=getattr(request_status, 'key', None),
123
+ )
124
+
125
+ if request_status in {DataMartRequestStatus.FAILED_PROCESSING, DataMartRequestStatus.REQUEST_ID_NOT_FOUND}:
126
+ upload.file_upload_status = FileUploadStatusEnum.ERROR
127
+
128
+ elif request_status == DataMartRequestStatus.SUCCESSFULLY_PROCESSED:
129
+ upload.file_upload_status = FileUploadStatusEnum.FINISHED
130
+
131
+ if upload.file_upload_status != FileUploadStatusEnum.IN_PROGRESS:
132
+ upload.save()
133
+
134
+ def _process_upload(self, upload: ExportingDataSubStageUploaderClientLog) -> None:
135
+ """Обрабатывает запись загрузки данных в витрину."""
136
+ response, log_entry = self.send_upload_status_request(upload.request_id)
137
+ self.update_upload_status(upload, response, log_entry)
@@ -0,0 +1,97 @@
1
+ """
2
+ Команда для проверки состояния отправленных в витрину данных.
3
+
4
+ Необязательные параметры:
5
+ --period_started_at - дата и время начала периода загрузки данных в витрину
6
+ --period_ended_at - дата и время конца периода загрузки данных в витрину
7
+ --thread_count - количество потоков для обработки
8
+
9
+ Пример использования:
10
+ python manage.py check_upload_status --period_started_at="01.11.2023 10:00:00" --thread_count=4
11
+ """
12
+ from datetime import (
13
+ date,
14
+ datetime,
15
+ time,
16
+ )
17
+ from typing import (
18
+ TYPE_CHECKING,
19
+ Any,
20
+ Dict,
21
+ Tuple,
22
+ )
23
+
24
+ from django.core.management.base import (
25
+ BaseCommand,
26
+ )
27
+
28
+ from edu_rdm_integration.consts import (
29
+ DATETIME_FORMAT,
30
+ )
31
+ from edu_rdm_integration.enums import (
32
+ FileUploadStatusEnum,
33
+ )
34
+ from edu_rdm_integration.helpers import UploadStatusHelper
35
+ from edu_rdm_integration.models import (
36
+ ExportingDataSubStageUploaderClientLog,
37
+ )
38
+
39
+
40
+ if TYPE_CHECKING:
41
+ from django.core.management.base import (
42
+ CommandParser,
43
+ )
44
+
45
+
46
+ class Command(BaseCommand):
47
+ """Команда для проверки состояния отправленных в витрину данных."""
48
+
49
+ help = 'Команда для проверки состояния отправленных в витрину данных' # noqa: A003
50
+
51
+ def add_arguments(self, parser: 'CommandParser') -> None:
52
+ """Добавляет аргументы парсера."""
53
+ parser.add_argument(
54
+ '--period_started_at',
55
+ action='store',
56
+ dest='period_started_at',
57
+ type=lambda started_at: datetime.strptime(started_at, DATETIME_FORMAT),
58
+ default=datetime.combine(date.today(), time.min),
59
+ help=(
60
+ 'Дата и время начала периода загрузки данных в витрину. Значение предоставляется в формате '
61
+ '"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 00:00:00.'
62
+ ),
63
+ )
64
+
65
+ parser.add_argument(
66
+ '--period_ended_at',
67
+ action='store',
68
+ dest='period_ended_at',
69
+ type=lambda ended_at: datetime.strptime(ended_at, DATETIME_FORMAT),
70
+ default=datetime.combine(date.today(), time.max),
71
+ help=(
72
+ 'Дата и время конца периода загрузки данных в витрину. Значение предоставляется в формате '
73
+ '"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 23:59:59.'
74
+ ),
75
+ )
76
+
77
+ parser.add_argument(
78
+ '--thread_count',
79
+ default=1,
80
+ type=int,
81
+ help='Количество потоков для обработки. По умолчанию, 1.',
82
+ )
83
+
84
+ def handle(self, *args: Tuple[Any], **kwargs: Dict[str, Any]) -> None:
85
+ """Обработчик команды."""
86
+ thread_count = kwargs['thread_count']
87
+ if thread_count < 1:
88
+ raise ValueError(f'Количество потоков {thread_count} должно быть больше 0.')
89
+
90
+ in_progress_attachment_uploads = ExportingDataSubStageUploaderClientLog.objects.filter(
91
+ created__gte=kwargs['period_started_at'],
92
+ created__lte=kwargs['period_ended_at'],
93
+ is_emulation=False,
94
+ file_upload_status=FileUploadStatusEnum.IN_PROGRESS,
95
+ )
96
+
97
+ UploadStatusHelper(in_progress_attachment_uploads).run(thread_count=thread_count)
@@ -0,0 +1,20 @@
1
+ from edu_rdm_integration.collect_data.collect import (
2
+ BaseCollectLatestModelsData,
3
+ BaseCollectModelsData,
4
+ )
5
+ from edu_rdm_integration.management.general import (
6
+ BaseCollectModelDataCommand,
7
+ )
8
+
9
+
10
+ class Command(BaseCollectModelDataCommand):
11
+ """
12
+ Команда для сбора на основе логов за период с последней сборки до указанной даты.
13
+ """
14
+
15
+ def _prepare_collect_models_data_class(self, *args, **kwargs) -> BaseCollectModelsData:
16
+ return BaseCollectLatestModelsData(
17
+ models=kwargs.get('models'),
18
+ logs_period_started_at=kwargs.get('logs_period_started_at'),
19
+ logs_period_ended_at=kwargs.get('logs_period_ended_at'),
20
+ )
@@ -0,0 +1,26 @@
1
+ from edu_rdm_integration.export_data.export import (
2
+ BaseExportEntitiesData,
3
+ ExportLatestEntitiesData,
4
+ )
5
+ from edu_rdm_integration.management.general import (
6
+ BaseExportEntityDataCommand,
7
+ )
8
+
9
+
10
+ class Command(BaseExportEntityDataCommand):
11
+ """
12
+ Команда для экспорта данных за период с последней сборки до указанной даты.
13
+ """
14
+
15
+ # flake8: noqa: A003
16
+ help = 'Команда для запуска функции экспорта данных для интеграции с "Региональная витрина данных"'
17
+
18
+ def _prepare_export_entities_data_class(self, *args, **kwargs) -> BaseExportEntitiesData:
19
+ """Возвращает объект класса экспорта данных сущностей РВД."""
20
+ return ExportLatestEntitiesData(
21
+ entities=kwargs.get('entities'),
22
+ period_started_at=kwargs.get('period_started_at'),
23
+ period_ended_at=kwargs.get('period_ended_at'),
24
+ task_id=kwargs.get('task_id'),
25
+ update_modified=kwargs.get('update_modified'),
26
+ )
@@ -0,0 +1,94 @@
1
+ from celery.schedules import (
2
+ crontab,
3
+ )
4
+ from django.conf import (
5
+ settings,
6
+ )
7
+
8
+ from educommon.async_task.models import (
9
+ AsyncTaskType,
10
+ )
11
+ from educommon.async_task.tasks import (
12
+ PeriodicAsyncTask,
13
+ )
14
+
15
+ from edu_rdm_integration.collect_data.helpers import (
16
+ set_failed_status_suspended_collecting_data_stages,
17
+ )
18
+ from edu_rdm_integration.consts import (
19
+ TASK_QUEUE_NAME,
20
+ )
21
+ from edu_rdm_integration.enums import (
22
+ FileUploadStatusEnum,
23
+ )
24
+ from edu_rdm_integration.export_data.helpers import (
25
+ set_failed_status_suspended_exporting_data_stages,
26
+ )
27
+ from edu_rdm_integration.helpers import (
28
+ UploadStatusHelper,
29
+ )
30
+ from edu_rdm_integration.models import (
31
+ ExportingDataSubStageUploaderClientLog,
32
+ )
33
+
34
+
35
+ class RDMCheckUploadStatus(PeriodicAsyncTask):
36
+ """Периодическая задача для сбора статусов по загрузке файла в витрину."""
37
+
38
+ queue = TASK_QUEUE_NAME
39
+ routing_key = TASK_QUEUE_NAME
40
+ description = 'Сбор статусов загрузки данных в витрину "Региональная витрина данных"'
41
+ task_type = AsyncTaskType.UNKNOWN
42
+ run_every = crontab(
43
+ minute=settings.RDM_UPLOAD_STATUS_TASK_MINUTE,
44
+ hour=settings.RDM_UPLOAD_STATUS_TASK_HOUR,
45
+ day_of_week=settings.RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK,
46
+ )
47
+
48
+ def process(self, *args, **kwargs):
49
+ """Выполнение."""
50
+ super().process(*args, **kwargs)
51
+
52
+ # Получаем незавершенные загрузки данных в витрину
53
+ in_progress_uploads = ExportingDataSubStageUploaderClientLog.objects.filter(
54
+ file_upload_status=FileUploadStatusEnum.IN_PROGRESS,
55
+ is_emulation=False,
56
+ )
57
+
58
+ UploadStatusHelper(in_progress_uploads).run()
59
+
60
+
61
+ class CheckSuspendedExportedStagePeriodicTask(PeriodicAsyncTask):
62
+ """Периодическая задача поиска зависших этапов/подэтапов экспорта."""
63
+
64
+ queue = TASK_QUEUE_NAME
65
+ routing_key = TASK_QUEUE_NAME
66
+ description = 'Поиск зависших этапов/подэтапов экспорта в "Региональная витрина данных"'
67
+ task_type = AsyncTaskType.SYSTEM
68
+ run_every = crontab(
69
+ minute=settings.RDM_CHECK_SUSPEND_TASK_MINUTE,
70
+ hour=settings.RDM_CHECK_SUSPEND_TASK_HOUR,
71
+ day_of_week=settings.RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK,
72
+ )
73
+
74
+ def process(self, *args, **kwargs):
75
+ """Выполнение задачи."""
76
+ super().process(*args, **kwargs)
77
+
78
+ change_status_collecting_result = set_failed_status_suspended_collecting_data_stages()
79
+ change_status_exporting_result = set_failed_status_suspended_exporting_data_stages()
80
+
81
+ task_result = {
82
+ 'Прервано сборок': (
83
+ f'Этапов {change_status_collecting_result["change_stage_count"]}'
84
+ f' и подэтапов {change_status_collecting_result["change_sub_stage_count"]}'
85
+ ),
86
+ 'Прервано выгрузок': (
87
+ f'Этапов {change_status_exporting_result["change_stage_count"]}'
88
+ f' и подэтапов {change_status_exporting_result["change_sub_stage_count"]}'
89
+ ),
90
+ }
91
+
92
+ self.set_progress(
93
+ values=task_result
94
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 0.8.5
3
+ Version: 0.9.0
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -28,7 +28,8 @@ Requires-Dist: setuptools<69,>=47.3.1
28
28
  Requires-Dist: wheel<0.42,>=0.37.1
29
29
  Requires-Dist: transliterate<2
30
30
  Requires-Dist: Django<2.3,>=1.11
31
- Requires-Dist: educommon<4,>=3.6.0
31
+ Requires-Dist: celery==4.4.7
32
+ Requires-Dist: educommon<4,>=3.7.0
32
33
  Requires-Dist: function-tools<1,>=0.8.0
33
34
  Requires-Dist: m3-db-utils<1,>=0.3.10
34
35
  Requires-Dist: uploader-client<1,>=0.2.1
@@ -289,6 +290,40 @@ Requires-Dist: uploader-client<1,>=0.2.1
289
290
 
290
291
  ### Удалено
291
292
 
293
+ ## [0.9.0] - 2023-12-29
294
+
295
+ Из ЭШ перенесены периодические задачи по сбору статусов загрузки файлов в витрину, а также
296
+ по поиску зависших этапов/подэтапов экспорта.
297
+
298
+ Также из ЭШ перенесены менедж-команды:
299
+ - check_upload_status - проверка состояния отправленных данных в витрину,
300
+ - collect_lastest_models_data - сбор на основе логов за период с последней сборки до указанной даты,
301
+ - export_latest_entities_data - экспорт данных за период с последней сборки до указанной даты.
302
+
303
+ Типы получаемых из log_change.fields полей соответствуют типам полей из логируемых моделей.
304
+
305
+ ### Добавлено
306
+
307
+ - [EDUSCHL-21013](https://jira.bars.group/browse/EDUSCHL-21013)
308
+ MINOR Перенесена часть асинхронных РВД задач из ЭШ, а также часть менедж-команд
309
+
310
+ ### Изменено
311
+
312
+ - [EDUSCHL-20793](https://jira.bars.group/browse/EDUSCHL-20793)
313
+ MINOR Типы получаемых из log_change.fields полей должны соответствовать типам полей из логируемых моделей
314
+
315
+
316
+ ## [0.8.6] - 2023-12-18
317
+
318
+ В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
319
+ списковому типу (ArrayField).
320
+
321
+ ### Добавлено
322
+
323
+ - [EDUSCHL-19606](https://jira.bars.group/browse/EDUSCHL-19606)
324
+ PATCH В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к
325
+ списковому типу (ArrayField).
326
+
292
327
 
293
328
  ## [0.8.5] - 2023-12-14
294
329
 
@@ -23,10 +23,12 @@ src/edu_rdm_integration/base.py
23
23
  src/edu_rdm_integration/consts.py
24
24
  src/edu_rdm_integration/entities.py
25
25
  src/edu_rdm_integration/enums.py
26
+ src/edu_rdm_integration/helpers.py
26
27
  src/edu_rdm_integration/mapping.py
27
28
  src/edu_rdm_integration/models.py
28
29
  src/edu_rdm_integration/signals.py
29
30
  src/edu_rdm_integration/storages.py
31
+ src/edu_rdm_integration/tasks.py
30
32
  src/edu_rdm_integration/utils.py
31
33
  src/edu_rdm_integration.egg-info/PKG-INFO
32
34
  src/edu_rdm_integration.egg-info/SOURCES.txt
@@ -154,10 +156,13 @@ src/edu_rdm_integration/function_templates/function_export_data_template/validat
154
156
  src/edu_rdm_integration/management/__init__.py
155
157
  src/edu_rdm_integration/management/general.py
156
158
  src/edu_rdm_integration/management/commands/__init__.py
159
+ src/edu_rdm_integration/management/commands/check_upload_status.py
160
+ src/edu_rdm_integration/management/commands/collect_latest_models_data.py
157
161
  src/edu_rdm_integration/management/commands/collect_models_data.py
158
162
  src/edu_rdm_integration/management/commands/datamart_status.py
159
163
  src/edu_rdm_integration/management/commands/datamart_upload.py
160
164
  src/edu_rdm_integration/management/commands/export_entities_data.py
165
+ src/edu_rdm_integration/management/commands/export_latest_entities_data.py
161
166
  src/edu_rdm_integration/migrations/0001_initial.py
162
167
  src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py
163
168
  src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py