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
@@ -5,55 +5,53 @@ from typing import (
5
5
  from edu_rdm_integration.adapters.strategies import (
6
6
  WebEduSyncBaseRunnerLazySavingPredefinedQueueFunctionImplementationStrategy,
7
7
  )
8
- from edu_rdm_integration.collect_data.non_calculated.base.caches import (
8
+ from edu_rdm_integration.core.consts import (
9
+ REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
10
+ )
11
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.caches import (
9
12
  BaseCollectingExportedDataFunctionCacheStorage,
10
13
  BaseCollectingExportedDataRunnerCacheStorage,
11
14
  )
12
- from edu_rdm_integration.collect_data.non_calculated.base.errors import (
15
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.errors import (
13
16
  BaseCollectingExportedDataError,
14
17
  )
15
- from edu_rdm_integration.collect_data.non_calculated.base.functions import (
18
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.functions import (
16
19
  BaseCollectingExportedDataFunction,
17
20
  )
18
- from edu_rdm_integration.collect_data.non_calculated.base.helpers import (
21
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.helpers import (
19
22
  BaseCollectingExportedDataFunctionHelper,
20
23
  BaseCollectingExportedDataRunnerHelper,
21
24
  )
22
- from edu_rdm_integration.collect_data.non_calculated.base.managers import (
25
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.managers import (
23
26
  BaseCollectingExportedDataRunnerManager,
24
27
  )
25
- from edu_rdm_integration.collect_data.non_calculated.base.presenters import (
28
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.presenters import (
26
29
  BaseCollectingExportedDataResultPresenter,
27
30
  )
28
- from edu_rdm_integration.collect_data.non_calculated.base.results import (
31
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.results import (
29
32
  BaseCollectingExportedDataFunctionResult,
30
33
  BaseCollectingExportedDataRunnerResult,
31
34
  )
32
- from edu_rdm_integration.collect_data.non_calculated.base.runners import (
35
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.runners import (
33
36
  BaseCollectingExportedDataRunner,
34
37
  )
35
- from edu_rdm_integration.collect_data.non_calculated.base.validators import (
38
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.validators import (
36
39
  BaseCollectingExportedDataFunctionValidator,
37
40
  BaseCollectingExportedDataRunnerValidator,
38
41
  )
39
- from edu_rdm_integration.consts import (
40
- REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
41
- )
42
42
 
43
43
 
44
44
  class CollectingExportedDataFunctionImplementationStrategy(
45
45
  WebEduSyncBaseRunnerLazySavingPredefinedQueueFunctionImplementationStrategy,
46
46
  ):
47
- """
48
- Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение.
47
+ """Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение.
49
48
 
50
49
  Используется для функций сбора данных для выгрузки в "Региональная витрина данных".
51
50
  """
52
51
 
53
52
  @classmethod
54
53
  def _prepare_uuid(cls):
55
- """
56
- Получение UUID класса. Используется при регистрации сущности в базе данных.
54
+ """Получение UUID класса. Используется при регистрации сущности в базе данных.
57
55
 
58
56
  Если ничего не возвращает, то регистрация в БД не будет произведена.
59
57
  """
@@ -61,9 +59,7 @@ class CollectingExportedDataFunctionImplementationStrategy(
61
59
 
62
60
  @classmethod
63
61
  def _prepare_verbose_name(cls) -> str:
64
- """
65
- Полное наименование для дальнейшей регистрации и отображения пользователю.
66
- """
62
+ """Полное наименование для дальнейшей регистрации и отображения пользователю."""
67
63
  return (
68
64
  'Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение '
69
65
  'функций сбора данных для выгрузки в "Региональная витрина данных"'
@@ -71,23 +67,17 @@ class CollectingExportedDataFunctionImplementationStrategy(
71
67
 
72
68
  @classmethod
73
69
  def _prepare_tags(cls) -> list[str]:
74
- """
75
- Список тегов, по которым сущность можно будет осуществлять поиск.
76
- """
70
+ """Список тегов, по которым сущность можно будет осуществлять поиск."""
77
71
  return [REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA]
78
72
 
79
73
  @classmethod
80
74
  def _prepare_key(cls) -> str:
81
- """
82
- Возвращает уникальный идентификатор стратегии создания функции.
83
- """
75
+ """Возвращает уникальный идентификатор стратегии создания функции."""
84
76
  return 'REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA'
85
77
 
86
78
  @classmethod
87
79
  def _prepare_title(cls) -> str:
88
- """
89
- Возвращает название стратегии создания функции.
90
- """
80
+ """Возвращает название стратегии создания функции."""
91
81
  return (
92
82
  'Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение '
93
83
  'функций сбора данных для выгрузки в "Региональная витрина данных". Сохранение производится после удачной '
@@ -96,85 +86,57 @@ class CollectingExportedDataFunctionImplementationStrategy(
96
86
 
97
87
  @classmethod
98
88
  def _prepare_function_template_name(cls) -> Optional[str]:
99
- """
100
- Формирование названия шаблона создания функции.
101
- """
89
+ """Формирование названия шаблона создания функции."""
102
90
  return 'function_collect_data_template'
103
91
 
104
92
  def _prepare_manager_class(self):
105
- """
106
- Устанавливает класс менеджера.
107
- """
93
+ """Устанавливает класс менеджера."""
108
94
  self._manager_class = BaseCollectingExportedDataRunnerManager
109
95
 
110
96
  def _prepare_runner_class(self):
111
- """
112
- Устанавливает класс ранера.
113
- """
97
+ """Устанавливает класс ранера."""
114
98
  self._runner_class = BaseCollectingExportedDataRunner
115
99
 
116
100
  def _prepare_function_class(self):
117
- """
118
- Устанавливает класс Функции.
119
- """
101
+ """Устанавливает класс Функции."""
120
102
  self._function_class = BaseCollectingExportedDataFunction
121
103
 
122
104
  def _prepare_runner_helper_class(self):
123
- """
124
- Устанавливает класс помощника ранера.
125
- """
105
+ """Устанавливает класс помощника ранера."""
126
106
  self._runner_helper_class = BaseCollectingExportedDataRunnerHelper
127
107
 
128
108
  def _prepare_function_helper_class(self):
129
- """
130
- Устанавливает класс помощника функции.
131
- """
109
+ """Устанавливает класс помощника функции."""
132
110
  self._function_helper_class = BaseCollectingExportedDataFunctionHelper
133
111
 
134
112
  def _prepare_runner_validator_class(self):
135
- """
136
- Устанавливает класс валидатора ранера.
137
- """
113
+ """Устанавливает класс валидатора ранера."""
138
114
  self._runner_validator_class = BaseCollectingExportedDataRunnerValidator
139
115
 
140
116
  def _prepare_function_validator_class(self):
141
- """
142
- Устанавливает класс валидатора Функции.
143
- """
117
+ """Устанавливает класс валидатора Функции."""
144
118
  self._function_validator_class = BaseCollectingExportedDataFunctionValidator
145
119
 
146
120
  def _prepare_runner_cache_storage_class(self):
147
- """
148
- Устанавливает класс хранилища кешей ранера.
149
- """
121
+ """Устанавливает класс хранилища кешей ранера."""
150
122
  self._runner_cache_storage_class = BaseCollectingExportedDataRunnerCacheStorage
151
123
 
152
124
  def _prepare_function_cache_storage_class(self):
153
- """
154
- Устанавливает класс хранилища кешей Функции.
155
- """
125
+ """Устанавливает класс хранилища кешей Функции."""
156
126
  self._function_cache_storage_class = BaseCollectingExportedDataFunctionCacheStorage
157
127
 
158
128
  def _prepare_error_class(self):
159
- """
160
- Устанавливает класс ошибки.
161
- """
129
+ """Устанавливает класс ошибки."""
162
130
  self._error_class = BaseCollectingExportedDataError
163
131
 
164
132
  def _prepare_runner_result_class(self):
165
- """
166
- Устанавливает класс результата.
167
- """
133
+ """Устанавливает класс результата."""
168
134
  self._runner_result_class = BaseCollectingExportedDataRunnerResult
169
135
 
170
136
  def _prepare_function_result_class(self):
171
- """
172
- Устанавливает класс результата.
173
- """
137
+ """Устанавливает класс результата."""
174
138
  self._function_result_class = BaseCollectingExportedDataFunctionResult
175
139
 
176
140
  def _prepare_result_presenter_class(self):
177
- """
178
- Устанавливает класс презентера результата.
179
- """
141
+ """Устанавливает класс презентера результата."""
180
142
  self._result_presenter_class = BaseCollectingExportedDataResultPresenter
@@ -29,18 +29,16 @@ from m3_db_utils.models import (
29
29
  ModelEnumValue,
30
30
  )
31
31
 
32
- from edu_rdm_integration import (
33
- consts,
34
- )
35
- from edu_rdm_integration.collect_data.const import (
36
- ALL_UNITS_IN_COMMAND,
37
- )
38
- from edu_rdm_integration.consts import (
32
+ from edu_rdm_integration.core.consts import (
33
+ BATCH_SIZE,
39
34
  DATE_FORMAT,
40
35
  )
41
- from edu_rdm_integration.models import (
36
+ from edu_rdm_integration.rdm_models.models import (
42
37
  RegionalDataMartModelEnum,
43
38
  )
39
+ from edu_rdm_integration.stages.collect_data.consts import (
40
+ ALL_UNITS_IN_COMMAND,
41
+ )
44
42
 
45
43
 
46
44
  if TYPE_CHECKING:
@@ -50,8 +48,7 @@ if TYPE_CHECKING:
50
48
 
51
49
 
52
50
  class BaseEduLogGenerator:
53
- """
54
- Базовый класс генератора логов для указанной модели РВД за определенный период времени.
51
+ """Базовый класс генератора логов для указанной модели РВД за определенный период времени.
55
52
 
56
53
  Для каждой модели РВД есть модели в продукте, создание экземпляров которых, сигнализирует о необходимости сбора
57
54
  и выгрузки данных в РВД. Модели можно найти в
@@ -69,8 +66,7 @@ class BaseEduLogGenerator:
69
66
  logs_period_ended_at: datetime = datetime.combine(date.today(), time.max),
70
67
  institute_ids: Optional[tuple[int, ...]] = (),
71
68
  ) -> list['AuditLog']:
72
- """
73
- Возвращает список сгенерированных экземпляров модели AuditLog.
69
+ """Возвращает список сгенерированных экземпляров модели AuditLog.
74
70
 
75
71
  Формирование логов производится для указанной модели РВД за указанный период времени.
76
72
 
@@ -102,7 +98,7 @@ class BaseFirstCollectModelsDataCommandsGenerator:
102
98
  split_by_quantity: Optional[int],
103
99
  logs_period_started_at=datetime.combine(date.today(), time.min),
104
100
  logs_period_ended_at=datetime.combine(date.today(), time.min),
105
- batch_size=consts.BATCH_SIZE,
101
+ batch_size=BATCH_SIZE,
106
102
  ):
107
103
  """Инициализация."""
108
104
  # Если модели не указаны, берется значение по умолчанию - все модели:
@@ -251,7 +247,6 @@ class FirstCollectModelsDataCommandsGenerator(BaseFirstCollectModelsDataCommands
251
247
  Returns:
252
248
  Cписок данных для формирования команд.
253
249
  """
254
-
255
250
  result_commands: List[dict] = []
256
251
  institute_ids_chunks: Tuple[Optional[Iterable]] = (None,)
257
252
 
@@ -0,0 +1,154 @@
1
+ from datetime import (
2
+ date,
3
+ datetime,
4
+ time,
5
+ timedelta,
6
+ )
7
+ from typing import (
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Iterable,
11
+ )
12
+
13
+ from django.conf import (
14
+ settings,
15
+ )
16
+ from django.db.models import (
17
+ CharField,
18
+ OuterRef,
19
+ Subquery,
20
+ Value,
21
+ )
22
+ from django.db.models.functions import (
23
+ Cast,
24
+ Coalesce,
25
+ Least,
26
+ )
27
+ from django.db.transaction import (
28
+ atomic,
29
+ )
30
+
31
+ from educommon import (
32
+ logger,
33
+ )
34
+
35
+ from edu_rdm_integration.stages.collect_data.models import (
36
+ CollectingDataStageStatus,
37
+ CollectingDataSubStageStatus,
38
+ CollectingExportedDataStage,
39
+ CollectingExportedDataSubStage,
40
+ )
41
+
42
+
43
+ if TYPE_CHECKING:
44
+ from edu_rdm_integration.rdm_models.models import (
45
+ BaseEntityModel,
46
+ )
47
+ from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.managers import (
48
+ BaseCollectingExportedDataRunnerManager,
49
+ )
50
+
51
+
52
+ @atomic
53
+ def set_failed_status_suspended_collecting_data_stages() -> dict[str, int]:
54
+ """Установить статус 'Завершено с ошибками' для зависших этапов и подэтапов сбора.
55
+
56
+ Сборка считается зависшей в случае если за определенное в параметре RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT время,
57
+ отсутствуют изменения в связанных подэтапах. Параметр RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT определяется
58
+ в настройках приложения.
59
+ """
60
+ changed_status_result = {
61
+ 'change_stage_count': 0,
62
+ 'change_sub_stage_count': 0,
63
+ }
64
+
65
+ current_datetime = datetime.now()
66
+ suspended_time_at = current_datetime - timedelta(minutes=settings.RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT)
67
+
68
+ suspended_stage_ids = set(
69
+ CollectingExportedDataStage.objects.annotate(
70
+ last_sub_stage_started_at=Coalesce(
71
+ Subquery(
72
+ CollectingExportedDataSubStage.objects.filter(stage_id=OuterRef('pk'))
73
+ .values('started_at')
74
+ .order_by('-started_at')[:1]
75
+ ),
76
+ Value(datetime.combine(date.min, time.min)),
77
+ )
78
+ )
79
+ .filter(
80
+ last_sub_stage_started_at__lt=suspended_time_at,
81
+ status__in=(
82
+ CollectingDataStageStatus.CREATED.key,
83
+ CollectingDataStageStatus.IN_PROGRESS.key,
84
+ ),
85
+ )
86
+ .values_list('pk', flat=True)
87
+ )
88
+
89
+ if suspended_stage_ids:
90
+ logger.info(f'find suspended CollectingExportedDataStage: {", ".join(map(str, suspended_stage_ids))}..')
91
+
92
+ change_stage_count = CollectingExportedDataStage.objects.filter(
93
+ pk__in=suspended_stage_ids,
94
+ ).update(
95
+ status=CollectingDataStageStatus.FAILED.key,
96
+ ended_at=current_datetime,
97
+ )
98
+
99
+ change_sub_stage_count = CollectingExportedDataSubStage.objects.filter(
100
+ stage_id__in=suspended_stage_ids,
101
+ ).update(
102
+ status=CollectingDataSubStageStatus.FAILED.key,
103
+ ended_at=current_datetime,
104
+ )
105
+
106
+ changed_status_result.update(
107
+ {
108
+ 'change_stage_count': change_stage_count,
109
+ 'change_sub_stage_count': change_sub_stage_count,
110
+ }
111
+ )
112
+
113
+ return changed_status_result
114
+
115
+
116
+ def get_collecting_managers_max_period_ended_dates(
117
+ collecting_managers: Iterable['BaseCollectingExportedDataRunnerManager'],
118
+ ) -> dict[str, 'datetime']:
119
+ """Возвращает дату и время завершения последнего успешного этапа сбора для менеджеров Функций сбора."""
120
+ managers_last_period_ended = (
121
+ CollectingExportedDataStage.objects.filter(
122
+ manager_id__in=[manager.uuid for manager in collecting_managers],
123
+ id=Subquery(
124
+ CollectingExportedDataStage.objects.filter(
125
+ manager_id=OuterRef('manager_id'),
126
+ status_id=CollectingDataStageStatus.FINISHED.key,
127
+ )
128
+ .order_by('-id')
129
+ .values('id')[:1]
130
+ ),
131
+ )
132
+ .annotate(
133
+ str_manager_id=Cast('manager_id', output_field=CharField()),
134
+ last_period_ended_at=Least('logs_period_ended_at', 'started_at'),
135
+ )
136
+ .values_list(
137
+ 'str_manager_id',
138
+ 'last_period_ended_at',
139
+ )
140
+ )
141
+
142
+ return {manager_id: last_period_ended_at for manager_id, last_period_ended_at in managers_last_period_ended}
143
+
144
+
145
+ def update_fields(entity: 'BaseEntityModel', field_values: dict[str, Any], mapping: dict[str, str]) -> None:
146
+ """Обновление значений полей сущности по измененным полям модели.
147
+
148
+ :param entity: Выгружаемая сущность
149
+ :param field_values: Словарь с измененными данными модели
150
+ :param mapping: Словарь маппинга полей модели к полям сущности
151
+ """
152
+ for model_field, entity_field in mapping.items():
153
+ if model_field in field_values:
154
+ setattr(entity, entity_field, field_values[model_field])
@@ -0,0 +1,100 @@
1
+ from datetime import (
2
+ date,
3
+ datetime,
4
+ time,
5
+ )
6
+
7
+ from django.core.management import (
8
+ BaseCommand,
9
+ CommandParser,
10
+ )
11
+
12
+ from edu_rdm_integration.core.consts import (
13
+ DATETIME_FORMAT,
14
+ )
15
+ from edu_rdm_integration.rdm_models.models import (
16
+ RegionalDataMartModelEnum,
17
+ )
18
+ from edu_rdm_integration.stages.collect_data.operations import (
19
+ BaseCollectModelsData,
20
+ )
21
+
22
+
23
+ class BaseCollectModelDataCommand(BaseCommand):
24
+ """Базовая команда для выполнения сбора данных моделей РВД."""
25
+
26
+ def add_arguments(self, parser: 'CommandParser'):
27
+ """Добавление параметров."""
28
+ models = ', '.join(
29
+ [f'{key} - {value.title}' for key, value in RegionalDataMartModelEnum.get_enum_data().items()]
30
+ )
31
+ models_help_text = (
32
+ f'Значением параметра является перечисление моделей РВД, для которых должен быть произведен сбор данных. '
33
+ f'Перечисление моделей:\n{models}. Если модели не указываются, то сбор данных производится для всех '
34
+ f'моделей. Модели перечисляются через запятую без пробелов.'
35
+ )
36
+ parser.add_argument(
37
+ '--models',
38
+ action='store',
39
+ dest='models',
40
+ type=lambda e: e.split(','),
41
+ help=models_help_text,
42
+ )
43
+
44
+ parser.add_argument(
45
+ '--logs_period_started_at',
46
+ action='store',
47
+ dest='logs_period_started_at',
48
+ type=lambda started_at: datetime.strptime(started_at, DATETIME_FORMAT),
49
+ default=datetime.combine(date.today(), time.min),
50
+ help=(
51
+ 'Дата и время начала периода обрабатываемых логов. Значение предоставляется в формате '
52
+ '"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 00:00:00.'
53
+ ),
54
+ )
55
+
56
+ parser.add_argument(
57
+ '--logs_period_ended_at',
58
+ action='store',
59
+ dest='logs_period_ended_at',
60
+ type=lambda ended_at: datetime.strptime(ended_at, DATETIME_FORMAT),
61
+ default=datetime.combine(date.today(), time.max),
62
+ help=(
63
+ 'Дата и время конца периода обрабатываемых логов. Значение предоставляется в формате '
64
+ '"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 23:59:59.'
65
+ ),
66
+ )
67
+
68
+ def _prepare_collect_models_data_class(self, *args, **kwargs) -> BaseCollectModelsData:
69
+ """Возвращает объект класса сбора данных моделей РВД."""
70
+ raise NotImplementedError
71
+
72
+ def handle(self, *args, **kwargs):
73
+ """Выполнение действий команды."""
74
+ collect_models_data = self._prepare_collect_models_data_class(*args, **kwargs)
75
+ collect_models_data.collect()
76
+
77
+
78
+ class BaseCollectModelsDataByGeneratingLogsCommand(BaseCollectModelDataCommand):
79
+ """Команда сбора данных моделей РВД на основе существующих в БД данных моделей ЭШ.
80
+
81
+ Можно регулировать, для каких моделей должен быть произведен сбор данных, и период, за который должны
82
+ быть собраны логи. Логи формируются в процессе выполнения команды при помощи генератора логов LogGenerator для
83
+ указанной модели.
84
+ """
85
+
86
+ # flake8: noqa: A003
87
+ help = 'Команда сбора данных моделей РВД на основе существующих в БД данных моделей продукта'
88
+
89
+ def add_arguments(self, parser: 'CommandParser'):
90
+ """Добавление параметров."""
91
+ super().add_arguments(parser=parser)
92
+
93
+ parser.add_argument(
94
+ '--institute_ids',
95
+ action='store',
96
+ dest='institute_ids',
97
+ type=lambda v: tuple(map(int, v.split(','))),
98
+ default=(),
99
+ help='Идентификаторы учебных заведений, для которых производится выгрузка.',
100
+ )
@@ -1,16 +1,14 @@
1
- from edu_rdm_integration.collect_data.collect import (
1
+ from edu_rdm_integration.stages.collect_data.management.base import (
2
+ BaseCollectModelDataCommand,
3
+ )
4
+ from edu_rdm_integration.stages.collect_data.operations import (
2
5
  BaseCollectLatestModelsData,
3
6
  BaseCollectModelsData,
4
7
  )
5
- from edu_rdm_integration.management.general import (
6
- BaseCollectModelDataCommand,
7
- )
8
8
 
9
9
 
10
10
  class Command(BaseCollectModelDataCommand):
11
- """
12
- Команда для сбора на основе логов за период с последней сборки до указанной даты.
13
- """
11
+ """Команда для сбора на основе логов за период с последней сборки до указанной даты."""
14
12
 
15
13
  def _prepare_collect_models_data_class(self, *args, **kwargs) -> BaseCollectModelsData:
16
14
  return BaseCollectLatestModelsData(
@@ -1,16 +1,14 @@
1
- from edu_rdm_integration.collect_data.collect import (
1
+ from edu_rdm_integration.stages.collect_data.management.base import (
2
+ BaseCollectModelDataCommand,
3
+ )
4
+ from edu_rdm_integration.stages.collect_data.operations import (
2
5
  BaseCollectModelsData,
3
6
  CollectModelsData,
4
7
  )
5
- from edu_rdm_integration.management.general import (
6
- BaseCollectModelDataCommand,
7
- )
8
8
 
9
9
 
10
10
  class Command(BaseCollectModelDataCommand):
11
- """
12
- Команда для сбора данных моделей РВД за указанных период по существующим логам.
13
- """
11
+ """Команда для сбора данных моделей РВД за указанных период по существующим логам."""
14
12
 
15
13
  # flake8: noqa: A003
16
14
  help = 'Команда для сбора данных моделей РВД за указанных период по существующим логам.'