edu-rdm-integration 3.9.1__py3-none-any.whl → 3.10.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. edu_rdm_integration/__init__.py +0 -1
  2. edu_rdm_integration/adapters/apps.py +15 -2
  3. edu_rdm_integration/adapters/caches.py +25 -12
  4. edu_rdm_integration/adapters/errors.py +13 -2
  5. edu_rdm_integration/adapters/functions.py +53 -14
  6. edu_rdm_integration/adapters/helpers.py +34 -8
  7. edu_rdm_integration/adapters/managers.py +41 -5
  8. edu_rdm_integration/adapters/presenters.py +26 -2
  9. edu_rdm_integration/adapters/receivers.py +16 -2
  10. edu_rdm_integration/adapters/results.py +50 -4
  11. edu_rdm_integration/adapters/runners.py +79 -20
  12. edu_rdm_integration/adapters/strategies.py +56 -54
  13. edu_rdm_integration/adapters/validators.py +43 -4
  14. edu_rdm_integration/apps.py +3 -23
  15. edu_rdm_integration/collect_and_export_data/__init__.py +1 -1
  16. edu_rdm_integration/collect_and_export_data/apps.py +1 -0
  17. edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +107 -17
  18. edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +4 -2
  19. edu_rdm_integration/{consts.py → core/consts.py} +0 -11
  20. edu_rdm_integration/{enums.py → core/enums.py} +7 -54
  21. edu_rdm_integration/core/helpers.py +331 -0
  22. edu_rdm_integration/core/operations.py +71 -0
  23. edu_rdm_integration/core/redis_cache.py +20 -0
  24. edu_rdm_integration/{collect_and_export_data → core/registry}/actions.py +6 -12
  25. edu_rdm_integration/core/registry/apps.py +11 -0
  26. edu_rdm_integration/{collect_and_export_data → core/registry}/ui.py +1 -1
  27. edu_rdm_integration/{storages.py → core/storages.py} +8 -17
  28. edu_rdm_integration/{utils.py → core/utils.py} +29 -91
  29. edu_rdm_integration/migrations/0001_initial.py +294 -44
  30. edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +1 -3
  31. edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -1
  32. edu_rdm_integration/migrations/0004_uploaderclientlog.py +1 -2
  33. edu_rdm_integration/migrations/0005_auto_20231204_1224.py +16 -4
  34. edu_rdm_integration/migrations/0006_request_status_data.py +60 -58
  35. edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -1
  36. edu_rdm_integration/migrations/0009_auto_20240522_1619.py +1 -5
  37. edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -1
  38. edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +16 -3
  39. edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -1
  40. edu_rdm_integration/migrations/0013_set_attachment_size.py +8 -12
  41. edu_rdm_integration/migrations/0014_uploaddatacommand.py +33 -6
  42. edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +1 -5
  43. edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +2 -2
  44. edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +3 -2
  45. edu_rdm_integration/migrations/__init__.py +1 -0
  46. edu_rdm_integration/{registry → pipelines/transfer}/actions.py +13 -26
  47. edu_rdm_integration/pipelines/transfer/app_meta.py +18 -0
  48. edu_rdm_integration/pipelines/transfer/apps.py +19 -0
  49. edu_rdm_integration/pipelines/transfer/enums.py +34 -0
  50. edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +57 -0
  51. edu_rdm_integration/{base.py → pipelines/transfer/mixins.py} +29 -53
  52. edu_rdm_integration/pipelines/transfer/models.py +48 -0
  53. edu_rdm_integration/{tasks.py → pipelines/transfer/tasks.py} +51 -150
  54. edu_rdm_integration/{registry → pipelines/transfer}/ui.py +4 -10
  55. edu_rdm_integration/rdm_entities/apps.py +11 -0
  56. edu_rdm_integration/{entities.py → rdm_entities/entities.py} +67 -57
  57. edu_rdm_integration/rdm_entities/migrations/0001_initial.py +44 -0
  58. edu_rdm_integration/{enum_register → rdm_entities}/mixins.py +8 -59
  59. edu_rdm_integration/rdm_entities/models.py +63 -0
  60. edu_rdm_integration/rdm_entities/utils.py +33 -0
  61. edu_rdm_integration/rdm_models/apps.py +16 -0
  62. edu_rdm_integration/rdm_models/migrations/0001_initial.py +40 -0
  63. edu_rdm_integration/rdm_models/mixins.py +67 -0
  64. edu_rdm_integration/rdm_models/models.py +73 -0
  65. edu_rdm_integration/rdm_models/utils.py +23 -0
  66. edu_rdm_integration/stages/collect_data/apps.py +11 -0
  67. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/functions.py-tpl +2 -2
  68. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/managers.py-tpl +1 -1
  69. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/runners.py-tpl +1 -1
  70. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/tests.py-tpl +2 -1
  71. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/caches.py +2 -2
  72. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/functions.py +15 -18
  73. edu_rdm_integration/stages/collect_data/functions/base/helpers.py +20 -0
  74. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/managers.py +20 -27
  75. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/mixins.py +38 -55
  76. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/runners.py +2 -5
  77. edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
  78. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/caches.py +3 -7
  79. edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +7 -0
  80. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/functions.py +8 -16
  81. edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +24 -0
  82. edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +19 -0
  83. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/presenters.py +1 -3
  84. edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +12 -0
  85. edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +28 -0
  86. edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +20 -0
  87. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/strategies.py +32 -70
  88. edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
  89. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
  90. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/caches.py +13 -22
  91. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +7 -0
  92. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/functions.py +8 -16
  93. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +24 -0
  94. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +19 -0
  95. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/presenters.py +1 -3
  96. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +12 -0
  97. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +28 -0
  98. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +20 -0
  99. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/strategies.py +32 -70
  100. edu_rdm_integration/{collect_data → stages/collect_data}/generators.py +9 -14
  101. edu_rdm_integration/stages/collect_data/helpers.py +154 -0
  102. edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
  103. edu_rdm_integration/stages/collect_data/management/base.py +100 -0
  104. edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
  105. edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_latest_models_data.py +5 -7
  106. edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_models_data.py +5 -7
  107. edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +187 -0
  108. edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +105 -0
  109. edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
  110. edu_rdm_integration/stages/collect_data/mixins.py +56 -0
  111. edu_rdm_integration/stages/collect_data/models.py +318 -0
  112. edu_rdm_integration/{collect_data/collect.py → stages/collect_data/operations.py} +30 -43
  113. edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
  114. edu_rdm_integration/{collect_data → stages/collect_data/registry}/actions.py +17 -20
  115. edu_rdm_integration/stages/collect_data/registry/apps.py +11 -0
  116. edu_rdm_integration/{collect_data → stages/collect_data/registry}/ui.py +8 -15
  117. edu_rdm_integration/{collect_data → stages/collect_data}/tests.py +2 -2
  118. edu_rdm_integration/stages/export_data/__init__.py +0 -0
  119. edu_rdm_integration/stages/export_data/apps.py +11 -0
  120. edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
  121. edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/functions.py-tpl +2 -2
  122. edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/managers.py-tpl +2 -2
  123. edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/runners.py-tpl +2 -2
  124. edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
  125. edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
  126. edu_rdm_integration/{export_data → stages/export_data/functions}/base/caches.py +3 -8
  127. edu_rdm_integration/stages/export_data/functions/base/errors.py +7 -0
  128. edu_rdm_integration/{export_data → stages/export_data/functions}/base/functions.py +28 -59
  129. edu_rdm_integration/{export_data → stages/export_data/functions}/base/helpers.py +7 -17
  130. edu_rdm_integration/{export_data → stages/export_data/functions}/base/managers.py +19 -28
  131. edu_rdm_integration/stages/export_data/functions/base/presenters.py +11 -0
  132. edu_rdm_integration/{export_data → stages/export_data/functions}/base/requests.py +13 -40
  133. edu_rdm_integration/stages/export_data/functions/base/results.py +12 -0
  134. edu_rdm_integration/{export_data → stages/export_data/functions}/base/runners.py +9 -21
  135. edu_rdm_integration/stages/export_data/functions/base/validators.py +20 -0
  136. edu_rdm_integration/{export_data → stages/export_data}/generators.py +7 -6
  137. edu_rdm_integration/stages/export_data/helpers.py +203 -0
  138. edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
  139. edu_rdm_integration/stages/export_data/management/base.py +101 -0
  140. edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
  141. edu_rdm_integration/{management → stages/export_data/management}/commands/export_entities_data.py +5 -7
  142. edu_rdm_integration/{management → stages/export_data/management}/commands/export_latest_entities_data.py +5 -7
  143. edu_rdm_integration/stages/export_data/migrations/0001_initial.py +324 -0
  144. edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
  145. edu_rdm_integration/stages/export_data/mixins.py +50 -0
  146. edu_rdm_integration/stages/export_data/models.py +362 -0
  147. edu_rdm_integration/{export_data/export.py → stages/export_data/operations.py} +30 -192
  148. edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
  149. edu_rdm_integration/{export_data → stages/export_data/registry}/actions.py +18 -18
  150. edu_rdm_integration/stages/export_data/registry/apps.py +11 -0
  151. edu_rdm_integration/{export_data → stages/export_data/registry}/ui.py +5 -7
  152. edu_rdm_integration/{export_data → stages/export_data}/strategies.py +30 -68
  153. edu_rdm_integration/stages/service/__init__.py +0 -0
  154. edu_rdm_integration/stages/service/apps.py +19 -0
  155. edu_rdm_integration/stages/service/tasks.py +63 -0
  156. edu_rdm_integration/stages/upload_data/__init__.py +0 -0
  157. edu_rdm_integration/stages/upload_data/apps.py +19 -0
  158. edu_rdm_integration/stages/upload_data/consts.py +10 -0
  159. edu_rdm_integration/{export_data → stages/upload_data}/dataclasses.py +1 -0
  160. edu_rdm_integration/stages/upload_data/enums.py +17 -0
  161. edu_rdm_integration/{export_data/export_manager.py → stages/upload_data/export_managers.py} +73 -68
  162. edu_rdm_integration/stages/upload_data/helpers.py +164 -0
  163. edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
  164. edu_rdm_integration/stages/upload_data/management/base.py +134 -0
  165. edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
  166. edu_rdm_integration/{management → stages/upload_data/management}/commands/async_fix_attachment_size.py +32 -54
  167. edu_rdm_integration/{management → stages/upload_data/management}/commands/check_upload_status.py +7 -6
  168. edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_status.py +3 -3
  169. edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_upload.py +4 -4
  170. edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +161 -0
  171. edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
  172. edu_rdm_integration/stages/upload_data/models.py +175 -0
  173. edu_rdm_integration/stages/upload_data/operations.py +156 -0
  174. edu_rdm_integration/{export_data/queue.py → stages/upload_data/queues.py} +10 -8
  175. edu_rdm_integration/stages/upload_data/tasks.py +103 -0
  176. edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
  177. edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/actions.py +14 -16
  178. edu_rdm_integration/stages/upload_data/uploader_log/apps.py +11 -0
  179. edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/managers.py +15 -30
  180. edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +31 -0
  181. edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
  182. edu_rdm_integration/stages/upload_data/uploader_log/models.py +86 -0
  183. edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/ui.py +8 -6
  184. {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.10.0.dist-info}/METADATA +238 -238
  185. edu_rdm_integration-3.10.0.dist-info/RECORD +255 -0
  186. edu_rdm_integration/app_meta.py +0 -16
  187. edu_rdm_integration/app_settings.py +0 -77
  188. edu_rdm_integration/collect_and_export_data/models.py +0 -67
  189. edu_rdm_integration/collect_and_export_data/utils.py +0 -224
  190. edu_rdm_integration/collect_data/base/helpers.py +0 -26
  191. edu_rdm_integration/collect_data/calculated/base/errors.py +0 -9
  192. edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -32
  193. edu_rdm_integration/collect_data/calculated/base/managers.py +0 -23
  194. edu_rdm_integration/collect_data/calculated/base/results.py +0 -16
  195. edu_rdm_integration/collect_data/calculated/base/runners.py +0 -36
  196. edu_rdm_integration/collect_data/calculated/base/validators.py +0 -28
  197. edu_rdm_integration/collect_data/helpers.py +0 -92
  198. edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -9
  199. edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -32
  200. edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -23
  201. edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -16
  202. edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -36
  203. edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -28
  204. edu_rdm_integration/enum_register/register.py +0 -79
  205. edu_rdm_integration/export_data/base/errors.py +0 -9
  206. edu_rdm_integration/export_data/base/presenters.py +0 -13
  207. edu_rdm_integration/export_data/base/results.py +0 -16
  208. edu_rdm_integration/export_data/base/validators.py +0 -28
  209. edu_rdm_integration/export_data/helpers.py +0 -92
  210. edu_rdm_integration/helpers.py +0 -412
  211. edu_rdm_integration/management/general.py +0 -327
  212. edu_rdm_integration/models.py +0 -982
  213. edu_rdm_integration/redis_cache.py +0 -51
  214. edu_rdm_integration/uploader_log/apps.py +0 -10
  215. edu_rdm_integration-3.9.1.dist-info/RECORD +0 -198
  216. /edu_rdm_integration/{collect_and_export_data/migrations → core}/__init__.py +0 -0
  217. /edu_rdm_integration/{mapping.py → core/mapping.py} +0 -0
  218. /edu_rdm_integration/{collect_data → core/registry}/__init__.py +0 -0
  219. /edu_rdm_integration/{templates → core/registry/templates}/ui-js/start-task.js +0 -0
  220. /edu_rdm_integration/{signals.py → core/signals.py} +0 -0
  221. /edu_rdm_integration/{typing.py → core/typing.py} +0 -0
  222. /edu_rdm_integration/{collect_data/base → pipelines}/__init__.py +0 -0
  223. /edu_rdm_integration/{collect_data/calculated → pipelines/transfer}/__init__.py +0 -0
  224. /edu_rdm_integration/{collect_data/calculated/base → pipelines/transfer/migrations}/__init__.py +0 -0
  225. /edu_rdm_integration/{templates → pipelines/transfer/templates}/ui-js/transferred-entity-list.js +0 -0
  226. /edu_rdm_integration/{collect_data/non_calculated → rdm_entities}/__init__.py +0 -0
  227. /edu_rdm_integration/{collect_data/non_calculated/base → rdm_entities/migrations}/__init__.py +0 -0
  228. /edu_rdm_integration/{enum_register → rdm_models}/__init__.py +0 -0
  229. /edu_rdm_integration/{export_data → rdm_models/migrations}/__init__.py +0 -0
  230. /edu_rdm_integration/{export_data/base → stages}/__init__.py +0 -0
  231. /edu_rdm_integration/{function_templates → stages/collect_data}/__init__.py +0 -0
  232. /edu_rdm_integration/{collect_data/const.py → stages/collect_data/consts.py} +0 -0
  233. /edu_rdm_integration/{management → stages/collect_data/function_templates}/__init__.py +0 -0
  234. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/__init__.py-tpl +0 -0
  235. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/apps.py-tpl +0 -0
  236. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/caches.py-tpl +0 -0
  237. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/consts.py-tpl +0 -0
  238. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/enums.py-tpl +0 -0
  239. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/errors.py-tpl +0 -0
  240. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/helpers.py-tpl +0 -0
  241. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/presenters.py-tpl +0 -0
  242. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/results.py-tpl +0 -0
  243. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/strings.py-tpl +0 -0
  244. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/validators.py-tpl +0 -0
  245. /edu_rdm_integration/{management/commands → stages/collect_data/functions}/__init__.py +0 -0
  246. /edu_rdm_integration/{registry → stages/collect_data/functions/base}/__init__.py +0 -0
  247. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/consts.py +0 -0
  248. /edu_rdm_integration/{uploader_log → stages/collect_data/functions/calculated}/__init__.py +0 -0
  249. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/consts.py +0 -0
  250. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/enums.py +0 -0
  251. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/strings.py +0 -0
  252. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/tests.py +0 -0
  253. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/consts.py +0 -0
  254. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/enums.py +0 -0
  255. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/strings.py +0 -0
  256. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/tests.py +0 -0
  257. /edu_rdm_integration/{export_data → stages/export_data}/consts.py +0 -0
  258. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/__init__.py-tpl +0 -0
  259. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/apps.py-tpl +0 -0
  260. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/caches.py-tpl +0 -0
  261. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/consts.py-tpl +0 -0
  262. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/enums.py-tpl +0 -0
  263. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/errors.py-tpl +0 -0
  264. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/helpers.py-tpl +0 -0
  265. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/presenters.py-tpl +0 -0
  266. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/results.py-tpl +0 -0
  267. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/strings.py-tpl +0 -0
  268. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/tests.py-tpl +0 -0
  269. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/validators.py-tpl +0 -0
  270. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/consts.py +0 -0
  271. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/enums.py +0 -0
  272. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/strings.py +0 -0
  273. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/tests.py +0 -0
  274. /edu_rdm_integration/{templates → stages/export_data/registry/templates}/ui-js/stage_for_export.js +0 -0
  275. /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/enums.py +0 -0
  276. /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/templates/ui-js/object-grid-buttons.js +0 -0
  277. {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.10.0.dist-info}/WHEEL +0 -0
  278. {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.10.0.dist-info}/licenses/LICENSE +0 -0
  279. {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.10.0.dist-info}/top_level.txt +0 -0
@@ -1,74 +1,48 @@
1
- import logging
2
- from abc import (
3
- ABC,
4
- abstractmethod,
5
- )
6
1
  from collections import (
7
2
  defaultdict,
8
3
  )
9
4
  from typing import (
10
- Optional,
11
- )
12
-
13
- from django.db.models import (
14
- Q,
5
+ TYPE_CHECKING,
15
6
  )
16
7
 
17
8
  from m3_db_utils.consts import (
18
9
  DEFAULT_ORDER_NUMBER,
19
10
  )
20
11
 
21
- from edu_rdm_integration.consts import (
12
+ from edu_rdm_integration.core.consts import (
22
13
  REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
23
14
  REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA,
24
15
  )
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,
16
+ from edu_rdm_integration.core.storages import (
17
+ RegionalDataMartEntityStorage,
30
18
  )
31
- from edu_rdm_integration.models import (
32
- ExportingDataSubStageUploaderClientLog,
19
+ from edu_rdm_integration.rdm_entities.models import (
33
20
  RegionalDataMartEntityEnum,
34
- TransferredEntity,
35
21
  )
36
- from edu_rdm_integration.storages import (
37
- RegionalDataMartEntityStorage,
22
+ from edu_rdm_integration.stages.collect_data.helpers import (
23
+ get_collecting_managers_max_period_ended_dates,
24
+ )
25
+ from edu_rdm_integration.stages.export_data.helpers import (
26
+ get_exporting_managers_max_period_ended_dates,
38
27
  )
39
28
 
40
29
 
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)
30
+ if TYPE_CHECKING:
31
+ from datetime import (
32
+ datetime,
33
+ )
61
34
 
62
- logging.getLogger('info_logger').addHandler(self._file_handler)
63
- logging.getLogger('exception_logger').addHandler(self._file_handler)
35
+ from django.db.models import (
36
+ QuerySet,
37
+ )
64
38
 
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)
39
+ from function_tools.managers import (
40
+ RunnerManager,
41
+ )
70
42
 
71
- self._file_handler.close()
43
+ from edu_rdm_integration.pipelines.transfer.models import (
44
+ TransferredEntity,
45
+ )
72
46
 
73
47
 
74
48
  class BaseTransferLatestEntitiesDataMixin:
@@ -87,12 +61,11 @@ class BaseTransferLatestEntitiesDataMixin:
87
61
  self._entites_models_map = defaultdict(list)
88
62
 
89
63
  def get_entity_qs(self) -> 'QuerySet[TransferredEntity]':
90
- """Возвращает сущностей сбора и выгрузки."""
64
+ """Возвращает QuerySet сущностей сбора и выгрузки."""
91
65
  raise NotImplementedError
92
66
 
93
67
  def _collect_transferred_entities(self) -> None:
94
68
  """Собирает сущности РВД, по которым будет произведен сбор и экспорт данных."""
95
-
96
69
  self._transferred_entities = [
97
70
  (RegionalDataMartEntityEnum.get_model_enum_value(key=entity), export_enabled)
98
71
  for entity, export_enabled in self.get_entity_qs().values_list('entity', 'export_enabled')
@@ -101,8 +74,11 @@ class BaseTransferLatestEntitiesDataMixin:
101
74
  # Собираем словарь по сущностям с моделями для сборки
102
75
  for entity, _ in self._transferred_entities:
103
76
  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)
77
+ (
78
+ model_enum
79
+ for model_enum in (*entity.additional_model_enums, entity.main_model_enum)
80
+ if model_enum.order_number != DEFAULT_ORDER_NUMBER
81
+ )
106
82
  )
107
83
 
108
84
  def _collect_managers(self) -> None:
@@ -0,0 +1,48 @@
1
+ from django.db.models import (
2
+ CASCADE,
3
+ BooleanField,
4
+ OneToOneField,
5
+ PositiveIntegerField,
6
+ )
7
+ from m3 import (
8
+ json_encode,
9
+ )
10
+ from m3.db import (
11
+ BaseObjectModel,
12
+ )
13
+
14
+ from edu_rdm_integration.pipelines.transfer.enums import (
15
+ EntityLevelQueueTypeEnum,
16
+ )
17
+ from edu_rdm_integration.rdm_entities.models import (
18
+ RegionalDataMartEntityEnum,
19
+ )
20
+
21
+
22
+ class TransferredEntity(BaseObjectModel):
23
+ """Сущность, по которой должен быть произведен сбор и экспорт данных."""
24
+
25
+ entity = OneToOneField(
26
+ to=RegionalDataMartEntityEnum,
27
+ verbose_name='Сущность',
28
+ on_delete=CASCADE,
29
+ )
30
+ export_enabled = BooleanField(
31
+ verbose_name='Включение экспорта для сущности',
32
+ default=True,
33
+ )
34
+ queue_level = PositiveIntegerField(
35
+ choices=EntityLevelQueueTypeEnum.get_choices(),
36
+ default=EntityLevelQueueTypeEnum.BASE,
37
+ verbose_name='Уровень очереди',
38
+ )
39
+
40
+ class Meta:
41
+ db_table = 'rdm_transferred_entity'
42
+ verbose_name = 'Сущность, по которой должен быть произведен сбор и экспорт данных'
43
+ verbose_name_plural = 'Сущности, по которым должен быть произведен сбор и экспорт данных'
44
+
45
+ @json_encode
46
+ def no_export(self):
47
+ """Формирует отображение признака отключения экспорта."""
48
+ return 'Нет' if self.export_enabled else 'Да'
@@ -1,5 +1,5 @@
1
- from collections import (
2
- defaultdict,
1
+ from datetime import (
2
+ datetime,
3
3
  )
4
4
  from typing import (
5
5
  TYPE_CHECKING,
@@ -13,13 +13,13 @@ from celery.schedules import (
13
13
  from django.conf import (
14
14
  settings,
15
15
  )
16
- from django.core.cache import (
17
- cache,
18
- )
19
16
  from django.utils import (
20
17
  timezone,
21
18
  )
22
19
 
20
+ from educommon import (
21
+ logger,
22
+ )
23
23
  from educommon.async_task.models import (
24
24
  AsyncTaskType,
25
25
  RunningTask,
@@ -27,122 +27,52 @@ from educommon.async_task.models import (
27
27
  from educommon.async_task.tasks import (
28
28
  UniquePeriodicAsyncTask,
29
29
  )
30
+ from educommon.django.db.mixins.validation import (
31
+ QuerySet,
32
+ )
30
33
  from educommon.utils.date import (
31
34
  get_today_min_datetime,
32
35
  )
33
36
 
34
- from edu_rdm_integration.base import (
35
- BaseTransferLatestEntitiesDataMixin,
36
- )
37
- from edu_rdm_integration.collect_and_export_data.models import (
38
- EduRdmCollectDataCommandProgress,
39
- EduRdmExportDataCommandProgress,
40
- )
41
- from edu_rdm_integration.collect_data.collect import (
42
- BaseCollectLatestModelsData,
43
- )
44
- from edu_rdm_integration.collect_data.helpers import (
45
- set_failed_status_suspended_collecting_data_stages,
46
- )
47
- from edu_rdm_integration.consts import (
37
+ from edu_rdm_integration.core.consts import (
48
38
  FAST_TRANSFER_TASK_QUEUE_NAME,
49
39
  LONG_TRANSFER_TASK_QUEUE_NAME,
50
40
  TASK_QUEUE_NAME,
51
41
  )
52
- from edu_rdm_integration.enums import (
42
+ from edu_rdm_integration.core.enums import (
53
43
  CommandType,
44
+ )
45
+ from edu_rdm_integration.core.helpers import (
46
+ save_command_log_link,
47
+ )
48
+ from edu_rdm_integration.pipelines.transfer.enums import (
54
49
  EntityLevelQueueTypeEnum,
55
- FileUploadStatusEnum,
56
50
  )
57
- from edu_rdm_integration.export_data.export import (
58
- ExportLatestEntitiesData,
59
- UploadData,
51
+ from edu_rdm_integration.pipelines.transfer.mixins import (
52
+ BaseTransferLatestEntitiesDataMixin,
60
53
  )
61
- from edu_rdm_integration.export_data.helpers import (
62
- set_failed_status_suspended_exporting_data_stages,
54
+ from edu_rdm_integration.pipelines.transfer.models import (
55
+ TransferredEntity,
63
56
  )
64
- from edu_rdm_integration.export_data.queue import (
65
- RdmRedisSubStageAttachmentQueue,
57
+ from edu_rdm_integration.stages.collect_data.models import (
58
+ EduRdmCollectDataCommandProgress,
66
59
  )
67
- from edu_rdm_integration.helpers import (
68
- UploadStatusHelper,
69
- save_command_log_link,
60
+ from edu_rdm_integration.stages.collect_data.operations import (
61
+ BaseCollectLatestModelsData,
70
62
  )
71
- from edu_rdm_integration.models import (
72
- ExportingDataSubStageUploaderClientLog,
73
- TransferredEntity,
63
+ from edu_rdm_integration.stages.export_data.models import (
64
+ EduRdmExportDataCommandProgress,
65
+ )
66
+ from edu_rdm_integration.stages.export_data.operations import (
67
+ ExportLatestEntitiesData,
74
68
  )
75
69
 
76
70
 
77
71
  if TYPE_CHECKING:
78
- from datetime import (
79
- datetime,
80
- )
81
-
82
-
83
- class RDMCheckUploadStatus(UniquePeriodicAsyncTask):
84
- """Периодическая задача для сбора статусов по загрузке файла в витрину."""
85
-
86
- queue = TASK_QUEUE_NAME
87
- routing_key = TASK_QUEUE_NAME
88
- description = 'Сбор статусов загрузки данных в витрину "Региональная витрина данных"'
89
- lock_expire_seconds = settings.RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS
90
- task_type = AsyncTaskType.UNKNOWN
91
- run_every = crontab(
92
- minute=settings.RDM_UPLOAD_STATUS_TASK_MINUTE,
93
- hour=settings.RDM_UPLOAD_STATUS_TASK_HOUR,
94
- day_of_week=settings.RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK,
95
- )
96
-
97
- def process(self, *args, **kwargs):
98
- """Выполнение."""
99
- super().process(*args, **kwargs)
100
-
101
- # Получаем незавершенные загрузки данных в витрину
102
- in_progress_uploads = ExportingDataSubStageUploaderClientLog.objects.filter(
103
- file_upload_status=FileUploadStatusEnum.IN_PROGRESS,
104
- is_emulation=False,
105
- ).select_related('attachment')
106
-
107
- UploadStatusHelper(in_progress_uploads, cache).run()
108
-
109
-
110
- class CheckSuspendedExportedStagePeriodicTask(UniquePeriodicAsyncTask):
111
- """Периодическая задача поиска зависших этапов/подэтапов экспорта."""
112
-
113
- queue = TASK_QUEUE_NAME
114
- routing_key = TASK_QUEUE_NAME
115
- description = 'Поиск зависших этапов/подэтапов экспорта в "Региональная витрина данных"'
116
- lock_expire_seconds = settings.RDM_CHECK_SUSPEND_TASK_LOCK_EXPIRE_SECONDS
117
- task_type = AsyncTaskType.SYSTEM
118
- run_every = crontab(
119
- minute=settings.RDM_CHECK_SUSPEND_TASK_MINUTE,
120
- hour=settings.RDM_CHECK_SUSPEND_TASK_HOUR,
121
- day_of_week=settings.RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK,
72
+ from django.db.models import (
73
+ QuerySet,
122
74
  )
123
75
 
124
- def process(self, *args, **kwargs):
125
- """Выполнение задачи."""
126
- super().process(*args, **kwargs)
127
-
128
- change_status_collecting_result = set_failed_status_suspended_collecting_data_stages()
129
- change_status_exporting_result = set_failed_status_suspended_exporting_data_stages()
130
-
131
- task_result = {
132
- 'Прервано сборок': (
133
- f'Этапов {change_status_collecting_result["change_stage_count"]}'
134
- f' и подэтапов {change_status_collecting_result["change_sub_stage_count"]}'
135
- ),
136
- 'Прервано выгрузок': (
137
- f'Этапов {change_status_exporting_result["change_stage_count"]}'
138
- f' и подэтапов {change_status_exporting_result["change_sub_stage_count"]}'
139
- ),
140
- }
141
-
142
- self.set_progress(
143
- values=task_result
144
- )
145
-
146
76
 
147
77
  class BaseTransferLatestEntitiesDataPeriodicTask(BaseTransferLatestEntitiesDataMixin, UniquePeriodicAsyncTask):
148
78
  """Базовая периодическая задача сбора и выгрузки данных для переиспользования в разных очередях."""
@@ -186,8 +116,7 @@ class BaseTransferLatestEntitiesDataPeriodicTask(BaseTransferLatestEntitiesDataM
186
116
  """Создает команду сбора данных моделей РВД."""
187
117
  manager = self._collecting_data_managers[model]
188
118
  manager_last_collected = (
189
- self._collecting_data_manager_to_logs_period_end.get(manager.uuid)
190
- or get_today_min_datetime()
119
+ self._collecting_data_manager_to_logs_period_end.get(manager.uuid) or get_today_min_datetime()
191
120
  )
192
121
 
193
122
  period_started_at = manager_last_collected
@@ -218,9 +147,10 @@ class BaseTransferLatestEntitiesDataPeriodicTask(BaseTransferLatestEntitiesDataM
218
147
  type=CommandType.AUTO,
219
148
  )
220
149
 
150
+ return None
151
+
221
152
  def _prepare_collect_model_data_class(
222
- self,
223
- command: EduRdmCollectDataCommandProgress
153
+ self, command: EduRdmCollectDataCommandProgress
224
154
  ) -> BaseCollectLatestModelsData:
225
155
  """Подготавливает объект класса сбора данных моделей РВД."""
226
156
  return BaseCollectLatestModelsData(
@@ -252,9 +182,13 @@ class BaseTransferLatestEntitiesDataPeriodicTask(BaseTransferLatestEntitiesDataM
252
182
  self._period_ended_at = None
253
183
  self.prepare_collect_export_managers()
254
184
 
255
- task_id = RunningTask.objects.filter(
256
- pk=self.request.id,
257
- ).values_list('pk', flat=True).first()
185
+ task_id = (
186
+ RunningTask.objects.filter(
187
+ pk=self.request.id,
188
+ )
189
+ .values_list('pk', flat=True)
190
+ .first()
191
+ )
258
192
 
259
193
  collected_entity_models = set()
260
194
 
@@ -267,13 +201,17 @@ class BaseTransferLatestEntitiesDataPeriodicTask(BaseTransferLatestEntitiesDataM
267
201
  collected_entity_models.add(model_enum_value.key)
268
202
  try:
269
203
  self._run_collect_model_data(model_enum_value.key, task_id)
270
- except Exception:
204
+ except Exception as e:
205
+ logger.warning(e)
206
+
271
207
  continue
272
208
 
273
209
  try:
274
210
  if export_enabled:
275
211
  self._run_export_entity_data(entity_enum.key, task_id)
276
- except Exception:
212
+ except Exception as e:
213
+ logger.warning(e)
214
+
277
215
  continue
278
216
 
279
217
 
@@ -292,6 +230,7 @@ class TransferLatestEntitiesDataPeriodicTask(BaseTransferLatestEntitiesDataPerio
292
230
  )
293
231
 
294
232
  def get_entity_qs(self) -> 'QuerySet[TransferredEntity]':
233
+ """Возвращает QuerySet сущностей сбора и выгрузки."""
295
234
  return TransferredEntity.objects.filter(queue_level=EntityLevelQueueTypeEnum.BASE)
296
235
 
297
236
 
@@ -310,6 +249,7 @@ class TransferLatestEntitiesDataFastPeriodicTask(BaseTransferLatestEntitiesDataP
310
249
  )
311
250
 
312
251
  def get_entity_qs(self) -> 'QuerySet[TransferredEntity]':
252
+ """Возвращает QuerySet сущностей сбора и выгрузки."""
313
253
  return TransferredEntity.objects.filter(queue_level=EntityLevelQueueTypeEnum.FAST)
314
254
 
315
255
 
@@ -328,50 +268,11 @@ class TransferLatestEntitiesDataLongPeriodicTask(BaseTransferLatestEntitiesDataP
328
268
  )
329
269
 
330
270
  def get_entity_qs(self) -> 'QuerySet[TransferredEntity]':
271
+ """Возвращает QuerySet сущностей сбора и выгрузки."""
331
272
  return TransferredEntity.objects.filter(queue_level=EntityLevelQueueTypeEnum.LONG)
332
273
 
333
274
 
334
- class UploadDataAsyncTask(UniquePeriodicAsyncTask):
335
- """Формирование очереди файлов и их отправка."""
336
-
337
- queue = TASK_QUEUE_NAME
338
- routing_key = TASK_QUEUE_NAME
339
- description = 'Отправка данных в витрину "Региональная витрина данных"'
340
- lock_expire_seconds = settings.RDM_UPLOAD_DATA_TASK_LOCK_EXPIRE_SECONDS
341
- task_type = AsyncTaskType.SYSTEM
342
- run_every = crontab(
343
- minute=settings.RDM_UPLOAD_DATA_TASK_MINUTE,
344
- hour=settings.RDM_UPLOAD_DATA_TASK_HOUR,
345
- day_of_week=settings.RDM_UPLOAD_DATA_TASK_DAY_OF_WEEK,
346
- )
347
-
348
- def process(self, *args, **kwargs):
349
- """Выполнение."""
350
- super().process(*args, **kwargs)
351
-
352
- queue = RdmRedisSubStageAttachmentQueue()
353
- upload_data = UploadData(
354
- data_cache=cache,
355
- queue=queue,
356
- )
357
-
358
- upload_result = upload_data.upload_data()
359
-
360
- task_result = {
361
- 'Общий объем отправленных файлов': f"{upload_result['total_file_size']}",
362
- 'Очередь отправки переполнена': 'Да' if upload_result['queue_is_full'] else 'Нет',
363
- 'Сущности, отправленные в витрину': upload_result['uploaded_entities']
364
- }
365
-
366
- self.set_progress(
367
- values=task_result
368
- )
369
-
370
-
371
275
  celery_app = celery.app.app_or_default()
372
- celery_app.register_task(RDMCheckUploadStatus)
373
- celery_app.register_task(CheckSuspendedExportedStagePeriodicTask)
374
276
  celery_app.register_task(TransferLatestEntitiesDataPeriodicTask)
375
- celery_app.register_task(UploadDataAsyncTask)
376
277
  celery_app.register_task(TransferLatestEntitiesDataFastPeriodicTask)
377
- celery_app.register_task(TransferLatestEntitiesDataLongPeriodicTask)
278
+ celery_app.register_task(TransferLatestEntitiesDataLongPeriodicTask)
@@ -13,7 +13,7 @@ from educommon.utils.ui import (
13
13
  append_template_globals,
14
14
  )
15
15
 
16
- from edu_rdm_integration.models import (
16
+ from edu_rdm_integration.pipelines.transfer.models import (
17
17
  TransferredEntity,
18
18
  )
19
19
 
@@ -25,12 +25,8 @@ class TransferredEntityListWindow(BaseListWindow):
25
25
  """Инициализация компонентов окна."""
26
26
  super()._init_components()
27
27
 
28
- self.export_off_button = ExtButton(
29
- text='Отключить экспорт', handler='offExport'
30
- )
31
- self.export_on_button = ExtButton(
32
- text='Включить экспорт', handler='onExport'
33
- )
28
+ self.export_off_button = ExtButton(text='Отключить экспорт', handler='offExport')
29
+ self.export_on_button = ExtButton(text='Включить экспорт', handler='onExport')
34
30
 
35
31
  def _do_layout(self):
36
32
  """Размещение компонентов окна на форме."""
@@ -43,9 +39,7 @@ class TransferredEntityListWindow(BaseListWindow):
43
39
  super().set_params(params, *args, **kwargs)
44
40
 
45
41
  append_template_globals(self, 'ui-js/transferred-entity-list.js')
46
- self.export_change_action_url = (
47
- params['pack'].export_change_action.get_absolute_url()
48
- )
42
+ self.export_change_action_url = params['pack'].export_change_action.get_absolute_url()
49
43
  self.pack = params['pack']
50
44
 
51
45
 
@@ -0,0 +1,11 @@
1
+ from django.apps import (
2
+ AppConfig,
3
+ )
4
+
5
+
6
+ class RDMEntitiesAppConfig(AppConfig):
7
+ """Приложение для работы с сущностями РВД."""
8
+
9
+ name = 'edu_rdm_integration.rdm_entities'
10
+ label = 'edu_rdm_integration_entities'
11
+ verbose_name = 'Сущности РВД'