edu-rdm-integration 3.9.2__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} +13 -152
  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.2.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.2.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.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/WHEEL +0 -0
  278. {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/licenses/LICENSE +0 -0
  279. {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,101 @@
1
+ from datetime import (
2
+ date,
3
+ datetime,
4
+ time,
5
+ )
6
+ from typing import (
7
+ TYPE_CHECKING,
8
+ )
9
+
10
+ from django.core.management import (
11
+ BaseCommand,
12
+ CommandParser,
13
+ )
14
+
15
+ from edu_rdm_integration.core.consts import (
16
+ DATETIME_FORMAT,
17
+ )
18
+ from edu_rdm_integration.rdm_entities.models import (
19
+ RegionalDataMartEntityEnum,
20
+ )
21
+ from edu_rdm_integration.stages.export_data.operations import (
22
+ BaseExportEntitiesData,
23
+ )
24
+
25
+
26
+ if TYPE_CHECKING:
27
+ from django.core.management import (
28
+ CommandParser,
29
+ )
30
+
31
+
32
+ class BaseExportEntityDataCommand(BaseCommand):
33
+ """Базовая команда для выполнения выгрузки данных сущностей РВД за указанный период."""
34
+
35
+ def add_arguments(self, parser: 'CommandParser'):
36
+ """Добавление параметров."""
37
+ entities = ', '.join(
38
+ [f'{key} - {value.title}' for key, value in RegionalDataMartEntityEnum.get_enum_data().items()]
39
+ )
40
+ entities_help_text = (
41
+ f'Значением параметра является перечисление сущностей РВД, для которых должена быть произведена выгрузка '
42
+ f'данных. Перечисление сущностей:\n{entities}. Если сущности не указываются, то выгрузка данных '
43
+ f'производится для всех сущностей. Сущности перечисляются через запятую без пробелов.'
44
+ )
45
+ parser.add_argument(
46
+ '--entities',
47
+ action='store',
48
+ dest='entities',
49
+ type=lambda e: e.split(','),
50
+ help=entities_help_text,
51
+ )
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=(
70
+ lambda ended_at: datetime.strptime(ended_at, DATETIME_FORMAT).replace(microsecond=time.max.microsecond)
71
+ ),
72
+ default=datetime.combine(date.today(), time.max),
73
+ help=(
74
+ 'Дата и время конца периода сбора записей моделей РВД. Значение предоставляется в формате '
75
+ '"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 23:59:59.'
76
+ ),
77
+ )
78
+ parser.add_argument(
79
+ '--task_id',
80
+ action='store',
81
+ dest='task_id',
82
+ type=str,
83
+ default=None,
84
+ help='task_id для поиска асинхронной задачи',
85
+ )
86
+ parser.add_argument(
87
+ '--no-update-modified',
88
+ dest='update_modified',
89
+ action='store_false',
90
+ default=True,
91
+ help='Не обновлять поле modified моделей',
92
+ )
93
+
94
+ def _prepare_export_entities_data_class(self, *args, **kwargs) -> BaseExportEntitiesData:
95
+ """Возвращает объект класса экспорта данных сущностей РВД."""
96
+ raise NotImplementedError
97
+
98
+ def handle(self, *args, **kwargs):
99
+ """Выполнение действий команды."""
100
+ export_entities_data = self._prepare_export_entities_data_class(*args, **kwargs)
101
+ export_entities_data.export()
@@ -1,16 +1,14 @@
1
- from edu_rdm_integration.export_data.export import (
1
+ from edu_rdm_integration.stages.export_data.management.base import (
2
+ BaseExportEntityDataCommand,
3
+ )
4
+ from edu_rdm_integration.stages.export_data.operations import (
2
5
  BaseExportEntitiesData,
3
6
  ExportEntitiesData,
4
7
  )
5
- from edu_rdm_integration.management.general import (
6
- BaseExportEntityDataCommand,
7
- )
8
8
 
9
9
 
10
10
  class Command(BaseExportEntityDataCommand):
11
- """
12
- Команда для выгрузки данных сущностей РВД.
13
- """
11
+ """Команда для выгрузки данных сущностей РВД."""
14
12
 
15
13
  # flake8: noqa: A003
16
14
  help = 'Команда для выгрузки данных сущностей РВД за указанных период.'
@@ -1,16 +1,14 @@
1
- from edu_rdm_integration.export_data.export import (
1
+ from edu_rdm_integration.stages.export_data.management.base import (
2
+ BaseExportEntityDataCommand,
3
+ )
4
+ from edu_rdm_integration.stages.export_data.operations import (
2
5
  BaseExportEntitiesData,
3
6
  ExportLatestEntitiesData,
4
7
  )
5
- from edu_rdm_integration.management.general import (
6
- BaseExportEntityDataCommand,
7
- )
8
8
 
9
9
 
10
10
  class Command(BaseExportEntityDataCommand):
11
- """
12
- Команда для экспорта данных за период с последней сборки до указанной даты.
13
- """
11
+ """Команда для экспорта данных за период с последней сборки до указанной даты."""
14
12
 
15
13
  # flake8: noqa: A003
16
14
  help = 'Команда для запуска функции экспорта данных для интеграции с "Региональная витрина данных"'
@@ -0,0 +1,324 @@
1
+ # Generated by Django 3.2.24 on 2025-06-28 14:10
2
+
3
+ import uuid
4
+
5
+ import django.db.models.deletion
6
+ import django.utils.timezone
7
+ from django.db import (
8
+ migrations,
9
+ models,
10
+ )
11
+
12
+ import educommon.django.db.mixins
13
+
14
+ import edu_rdm_integration.core.utils
15
+ import edu_rdm_integration.stages.export_data.helpers
16
+
17
+
18
+ class Migration(migrations.Migration):
19
+ initial = True
20
+
21
+ dependencies = [
22
+ ('edu_rdm_integration_entities', '0001_initial'),
23
+ ('function_tools', '0005_auto_20220724_0050'),
24
+ ('async_task', '0003_alter_runningtask_options'),
25
+ ]
26
+
27
+ operations = [
28
+ migrations.SeparateDatabaseAndState(
29
+ state_operations=[
30
+ migrations.CreateModel(
31
+ name='ExportingDataStage',
32
+ fields=[
33
+ (
34
+ 'id',
35
+ models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
36
+ ),
37
+ (
38
+ 'period_started_at',
39
+ models.DateTimeField(
40
+ db_index=True, verbose_name='Левая граница периода выборки данных для выгрузки'
41
+ ),
42
+ ),
43
+ (
44
+ 'period_ended_at',
45
+ models.DateTimeField(
46
+ db_index=True, verbose_name='Правая граница периода выборки данных для выгрузки'
47
+ ),
48
+ ),
49
+ (
50
+ 'started_at',
51
+ models.DateTimeField(auto_now_add=True, verbose_name='Время начала выгрузки данных'),
52
+ ),
53
+ (
54
+ 'ended_at',
55
+ models.DateTimeField(
56
+ blank=True, null=True, verbose_name='Время завершения выгрузки данных'
57
+ ),
58
+ ),
59
+ (
60
+ 'manager',
61
+ models.ForeignKey(
62
+ blank=True,
63
+ null=True,
64
+ on_delete=django.db.models.deletion.PROTECT,
65
+ to='function_tools.entity',
66
+ verbose_name='Менеджер ранера Функции',
67
+ ),
68
+ ),
69
+ ],
70
+ options={
71
+ 'verbose_name': 'Этап формирования данных для выгрузки',
72
+ 'verbose_name_plural': 'Этапы формирования данных для выгрузки',
73
+ 'db_table': 'rdm_exporting_data_stage',
74
+ },
75
+ bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
76
+ ),
77
+ migrations.CreateModel(
78
+ name='ExportingDataStageStatus',
79
+ fields=[
80
+ ('title', models.TextField(verbose_name='расшифровка значения')),
81
+ (
82
+ 'key',
83
+ models.CharField(
84
+ db_index=True, max_length=512, primary_key=True, serialize=False, verbose_name='ключ'
85
+ ),
86
+ ),
87
+ ('order_number', models.PositiveIntegerField(default=100000, verbose_name='Порядковый номер')),
88
+ ],
89
+ options={
90
+ 'verbose_name': 'Модель-перечисление статусов этапа выгрузки данных',
91
+ 'verbose_name_plural': 'Модели-перечисления статусов этапов выгрузки данных',
92
+ 'db_table': 'rdm_exporting_data_stage_status',
93
+ },
94
+ ),
95
+ migrations.CreateModel(
96
+ name='ExportingDataSubStage',
97
+ fields=[
98
+ (
99
+ 'id',
100
+ models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
101
+ ),
102
+ (
103
+ 'started_at',
104
+ models.DateTimeField(
105
+ auto_now_add=True, db_index=True, verbose_name='Время начала сбора данных'
106
+ ),
107
+ ),
108
+ (
109
+ 'ended_at',
110
+ models.DateTimeField(
111
+ blank=True, db_index=True, null=True, verbose_name='Время завершения сбора данных'
112
+ ),
113
+ ),
114
+ (
115
+ 'function',
116
+ models.ForeignKey(
117
+ blank=True,
118
+ null=True,
119
+ on_delete=django.db.models.deletion.PROTECT,
120
+ to='function_tools.entity',
121
+ verbose_name='Функция',
122
+ ),
123
+ ),
124
+ (
125
+ 'stage',
126
+ models.ForeignKey(
127
+ on_delete=django.db.models.deletion.CASCADE,
128
+ to='edu_rdm_integration_export_data_stage.exportingdatastage',
129
+ verbose_name='Этап выгрузки данных',
130
+ ),
131
+ ),
132
+ ],
133
+ options={
134
+ 'verbose_name': 'Стадия выгрузки данных',
135
+ 'verbose_name_plural': 'Стадии выгрузки данных',
136
+ 'db_table': 'rdm_exporting_data_sub_stage',
137
+ },
138
+ bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
139
+ ),
140
+ migrations.CreateModel(
141
+ name='ExportingDataSubStageStatus',
142
+ fields=[
143
+ ('title', models.TextField(verbose_name='расшифровка значения')),
144
+ (
145
+ 'key',
146
+ models.CharField(
147
+ db_index=True, max_length=512, primary_key=True, serialize=False, verbose_name='ключ'
148
+ ),
149
+ ),
150
+ ('order_number', models.PositiveIntegerField(default=100000, verbose_name='Порядковый номер')),
151
+ ],
152
+ options={
153
+ 'verbose_name': 'Модель-перечисление статусов подэтапа выгрузки данных',
154
+ 'verbose_name_plural': 'Модели-перечисления статусов подэтапов выгрузки данных',
155
+ 'db_table': 'rdm_exporting_data_sub_stage_status',
156
+ },
157
+ ),
158
+ migrations.CreateModel(
159
+ name='ExportingDataSubStageEntity',
160
+ fields=[
161
+ (
162
+ 'id',
163
+ models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
164
+ ),
165
+ (
166
+ 'entity',
167
+ models.ForeignKey(
168
+ on_delete=django.db.models.deletion.PROTECT,
169
+ to='edu_rdm_integration_entities.regionaldatamartentityenum',
170
+ verbose_name='Сущность РВД',
171
+ ),
172
+ ),
173
+ (
174
+ 'exporting_data_sub_stage',
175
+ models.ForeignKey(
176
+ on_delete=django.db.models.deletion.CASCADE,
177
+ to='edu_rdm_integration_export_data_stage.exportingdatasubstage',
178
+ verbose_name='Подэтап выгрузки данных',
179
+ ),
180
+ ),
181
+ ],
182
+ options={
183
+ 'verbose_name': 'Связь сущности и подэтапа выгрузки',
184
+ 'verbose_name_plural': 'Связи сущности и подэтапа выгрузки',
185
+ 'db_table': 'rdm_exporting_data_sub_stage_entity',
186
+ },
187
+ ),
188
+ migrations.CreateModel(
189
+ name='ExportingDataSubStageAttachment',
190
+ fields=[
191
+ (
192
+ 'id',
193
+ models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
194
+ ),
195
+ (
196
+ 'attachment',
197
+ models.FileField(
198
+ blank=True,
199
+ max_length=512,
200
+ null=True,
201
+ upload_to=edu_rdm_integration.stages.export_data.helpers.get_exporting_data_stage_attachment_path,
202
+ verbose_name='Сгенерированный файл',
203
+ ),
204
+ ),
205
+ (
206
+ 'operation',
207
+ models.SmallIntegerField(
208
+ choices=[(1, 'Создание'), (2, 'Изменение'), (3, 'Удаление')], verbose_name='Действие'
209
+ ),
210
+ ),
211
+ ('created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Дата создания')),
212
+ ('modified', models.DateTimeField(auto_now=True, null=True, verbose_name='Дата изменения')),
213
+ ('attachment_size', models.PositiveIntegerField(null=True, verbose_name='Размер файла (байт)')),
214
+ (
215
+ 'exporting_data_sub_stage',
216
+ models.ForeignKey(
217
+ on_delete=django.db.models.deletion.CASCADE,
218
+ to='edu_rdm_integration_export_data_stage.exportingdatasubstage',
219
+ verbose_name='Подэтап выгрузки данных',
220
+ ),
221
+ ),
222
+ ],
223
+ options={
224
+ 'verbose_name': 'Сгенерированный файл для дальнейшей выгрузки в "Региональная витрина данных"',
225
+ 'verbose_name_plural': 'Сгенерированные файлы для дальнейшей выгрузки в "Региональная витрина данных"',
226
+ 'db_table': 'rdm_exporting_data_sub_stage_attachment',
227
+ },
228
+ bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
229
+ ),
230
+ migrations.AddField(
231
+ model_name='exportingdatasubstage',
232
+ name='status',
233
+ field=models.ForeignKey(
234
+ default='CREATED',
235
+ on_delete=django.db.models.deletion.PROTECT,
236
+ to='edu_rdm_integration_export_data_stage.exportingdatasubstagestatus',
237
+ verbose_name='Статус',
238
+ ),
239
+ ),
240
+ migrations.AddField(
241
+ model_name='exportingdatastage',
242
+ name='status',
243
+ field=models.ForeignKey(
244
+ default='CREATED',
245
+ on_delete=django.db.models.deletion.PROTECT,
246
+ to='edu_rdm_integration_export_data_stage.exportingdatastagestatus',
247
+ verbose_name='Статус',
248
+ ),
249
+ ),
250
+ migrations.CreateModel(
251
+ name='EduRdmExportDataCommandProgress',
252
+ fields=[
253
+ (
254
+ 'id',
255
+ models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
256
+ ),
257
+ (
258
+ 'created',
259
+ models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата создания'),
260
+ ),
261
+ (
262
+ 'period_started_at',
263
+ models.DateTimeField(verbose_name='Левая граница периода выборки данных для выгрузки'),
264
+ ),
265
+ (
266
+ 'period_ended_at',
267
+ models.DateTimeField(verbose_name='Правая граница периода выборки данных для выгрузки'),
268
+ ),
269
+ ('generation_id', models.UUIDField(default=uuid.uuid4, verbose_name='Идентификатор генерации')),
270
+ (
271
+ 'logs_link',
272
+ models.FileField(
273
+ max_length=255,
274
+ upload_to=edu_rdm_integration.core.utils.get_data_command_progress_attachment_path,
275
+ verbose_name='Файл лога',
276
+ ),
277
+ ),
278
+ (
279
+ 'type',
280
+ models.PositiveSmallIntegerField(
281
+ choices=[(1, 'Автоматический'), (2, 'Ручной')], verbose_name='Тип команды'
282
+ ),
283
+ ),
284
+ (
285
+ 'entity',
286
+ models.ForeignKey(
287
+ on_delete=django.db.models.deletion.PROTECT,
288
+ to='edu_rdm_integration_entities.regionaldatamartentityenum',
289
+ verbose_name='Сущность РВД',
290
+ ),
291
+ ),
292
+ (
293
+ 'stage',
294
+ models.ForeignKey(
295
+ blank=True,
296
+ null=True,
297
+ on_delete=django.db.models.deletion.SET_NULL,
298
+ to='edu_rdm_integration_export_data_stage.exportingdatastage',
299
+ verbose_name='Этап выгрузки данных',
300
+ ),
301
+ ),
302
+ (
303
+ 'task',
304
+ models.ForeignKey(
305
+ blank=True,
306
+ null=True,
307
+ on_delete=django.db.models.deletion.SET_NULL,
308
+ to='async_task.runningtask',
309
+ verbose_name='Асинхронная задача',
310
+ ),
311
+ ),
312
+ ],
313
+ options={
314
+ 'verbose_name': 'Команда экспорта данных',
315
+ 'verbose_name_plural': 'Команды экспорта данных',
316
+ 'db_table': 'edu_rdm_exporting_data_command_progress',
317
+ 'abstract': False,
318
+ },
319
+ bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
320
+ ),
321
+ ],
322
+ database_operations=[],
323
+ ),
324
+ ]
@@ -0,0 +1,50 @@
1
+ from educommon.async_task.models import (
2
+ AsyncTaskType,
3
+ )
4
+
5
+ from edu_rdm_integration.core.consts import (
6
+ TASK_QUEUE_NAME,
7
+ )
8
+ from edu_rdm_integration.core.helpers import (
9
+ save_command_log_link,
10
+ )
11
+ from edu_rdm_integration.stages.export_data.models import (
12
+ EduRdmExportDataCommandProgress,
13
+ )
14
+ from edu_rdm_integration.stages.export_data.operations import (
15
+ ExportEntitiesData,
16
+ )
17
+
18
+
19
+ class ExportCommandMixin:
20
+ """Класс-примесь для запуска команды выгрузки сущностей."""
21
+
22
+ queue = TASK_QUEUE_NAME
23
+ routing_key = TASK_QUEUE_NAME
24
+ description = 'Экспорт данных сущностей РВД'
25
+ task_type = AsyncTaskType.SYSTEM
26
+
27
+ def get_export_command(self, command_id: int) -> EduRdmExportDataCommandProgress:
28
+ """Возвращает экземпляр модели команды запуска."""
29
+ command = EduRdmExportDataCommandProgress.objects.get(id=command_id)
30
+
31
+ return command
32
+
33
+ def run_export_command(self, command: EduRdmExportDataCommandProgress) -> None:
34
+ """Запуск команды выгрузки."""
35
+ ExportEntitiesData(
36
+ entities=(command.entity_id,),
37
+ period_started_at=command.period_started_at,
38
+ period_ended_at=command.period_ended_at,
39
+ command_id=command.id,
40
+ ).export()
41
+
42
+ def save_export_command_logs(self, command_id: int, log_dir: str):
43
+ """Сохранение ссылки на файл логов в команде."""
44
+ try:
45
+ command = self.get_export_command(command_id)
46
+ except EduRdmExportDataCommandProgress.DoesNotExist:
47
+ command = None
48
+
49
+ if command:
50
+ save_command_log_link(command, log_dir)