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
@@ -0,0 +1,23 @@
1
+ from django.apps import (
2
+ apps,
3
+ )
4
+ from django.db import (
5
+ models,
6
+ )
7
+
8
+ from edu_rdm_integration.core.utils import (
9
+ register_classes,
10
+ )
11
+ from edu_rdm_integration.rdm_models.mixins import (
12
+ ModelEnumRegisterMixin,
13
+ )
14
+
15
+
16
+ def is_register_model(model: models.Model) -> bool:
17
+ """Проверяет, является ли класс регистрируемой моделью."""
18
+ return issubclass(model, ModelEnumRegisterMixin)
19
+
20
+
21
+ def register_models() -> None:
22
+ """Регистрирует модели в RegionalDataMartModelEnum."""
23
+ register_classes([m for m in apps.get_models() if is_register_model(m)])
@@ -0,0 +1,11 @@
1
+ from django.apps import (
2
+ AppConfig,
3
+ )
4
+
5
+
6
+ class RDMCollectDataStageAppConfig(AppConfig):
7
+ """Приложение для организации этапа сбора данных."""
8
+
9
+ name = 'edu_rdm_integration.stages.collect_data'
10
+ label = 'edu_rdm_integration_collect_data_stage'
11
+ verbose_name = 'Сбор данных'
@@ -11,10 +11,10 @@ from educommon.integration_entities.helpers import (
11
11
  EntitySaver,
12
12
  )
13
13
 
14
- from edu_rdm_integration.consts import (
14
+ from edu_rdm_integration.core.consts import (
15
15
  REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
16
16
  )
17
- from edu_rdm_integration.models import (
17
+ from edu_rdm_integration.rdm_models.models import (
18
18
  RegionalDataMartModelEnum,
19
19
  )
20
20
 
@@ -2,7 +2,7 @@ from typing import (
2
2
  Optional,
3
3
  )
4
4
 
5
- from edu_rdm_integration.consts import (
5
+ from edu_rdm_integration.core.consts import (
6
6
  REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
7
7
  )
8
8
 
@@ -6,7 +6,7 @@ from function_tools.general import (
6
6
  RunnableObject,
7
7
  )
8
8
 
9
- from edu_rdm_integration.consts import (
9
+ from edu_rdm_integration.core.consts import (
10
10
  REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
11
11
  )
12
12
 
@@ -2,10 +2,11 @@ from typing import (
2
2
  TYPE_CHECKING,
3
3
  )
4
4
 
5
- from edu_rdm_integration.collect_data.tests import (
5
+ from edu_rdm_integration.stages.collect_data.tests import (
6
6
  BaseCollectingFunctionTestCase,
7
7
  )
8
8
 
9
+
9
10
  from {{ function_python_path }}.managers import (
10
11
  {{ camel_case_function_name }}RunnerManager,
11
12
  )
@@ -42,7 +42,7 @@ class DependencyFilter(NamedTuple):
42
42
  model_label: str
43
43
  """
44
44
  Наименование модели от которой зависимы обрабатываемые логи.
45
-
45
+
46
46
  Строка должна соответствовать формату app_name.Model_name.
47
47
  """
48
48
 
@@ -65,4 +65,4 @@ class IgnoreLogDependency(NamedTuple):
65
65
  Словарь, определяющий, какие поля моделей должны быть проигнорированы при построении графа связей между моделями.
66
66
 
67
67
  Ключом является наименование модели, а в множестве описываются наименования полей.
68
- """
68
+ """
@@ -12,10 +12,10 @@ from educommon.integration_entities.mixins import (
12
12
  from edu_rdm_integration.adapters.functions import (
13
13
  WebEduLazySavingPredefinedQueueFunction,
14
14
  )
15
- from edu_rdm_integration.consts import (
15
+ from edu_rdm_integration.core.consts import (
16
16
  LOGS_DELIMITER,
17
17
  )
18
- from edu_rdm_integration.models import (
18
+ from edu_rdm_integration.stages.collect_data.models import (
19
19
  CollectingDataSubStageStatus,
20
20
  CollectingExportedDataStage,
21
21
  CollectingExportedDataSubStage,
@@ -27,16 +27,19 @@ class BaseCollectingCalculatedDataFunction(
27
27
  WebEduLazySavingPredefinedQueueFunction,
28
28
  metaclass=ABCMeta,
29
29
  ):
30
- """
31
- Базовый класс функций сбора данных для интеграции с "Региональная витрина данных".
32
- """
30
+ """Базовый класс функций сбора данных для интеграции с "Региональная витрина данных"."""
33
31
 
34
32
  def __init__(self, *args, stage: CollectingExportedDataStage, **kwargs):
35
33
  super().__init__(*args, stage=stage, **kwargs)
36
34
 
37
- previous_sub_stage = CollectingExportedDataSubStage.objects.filter(
38
- function_id=self.uuid,
39
- ).order_by('started_at').only('pk').first()
35
+ previous_sub_stage = (
36
+ CollectingExportedDataSubStage.objects.filter(
37
+ function_id=self.uuid,
38
+ )
39
+ .order_by('started_at')
40
+ .only('pk')
41
+ .first()
42
+ )
40
43
 
41
44
  self._sub_stage = CollectingExportedDataSubStage.objects.create(
42
45
  stage=stage,
@@ -49,18 +52,14 @@ class BaseCollectingCalculatedDataFunction(
49
52
  logger.info(f'{LOGS_DELIMITER * 3}created {repr(self._sub_stage)}')
50
53
 
51
54
  def _before_prepare(self, *args, **kwargs):
52
- """
53
- Выполнение действий функций системы.
54
- """
55
+ """Выполнение действий функций системы."""
55
56
  self._sub_stage.status_id = CollectingDataSubStageStatus.IN_PROGRESS.key
56
57
  self._sub_stage.save()
57
58
 
58
59
  logger.info(f'{LOGS_DELIMITER * 3}change status {repr(self._sub_stage)}')
59
60
 
60
61
  def before_run(self, *args, **kwargs):
61
- """
62
- Действия перед запуском.
63
- """
62
+ """Действия перед запуском."""
64
63
  super().before_run(*args, **kwargs)
65
64
 
66
65
  logger.info(
@@ -68,14 +67,12 @@ class BaseCollectingCalculatedDataFunction(
68
67
  delimiter=LOGS_DELIMITER * 2,
69
68
  force_run='force ' if kwargs.get('is_force_run', False) else '',
70
69
  runner_name=self.__class__.__name__,
71
- log_chunks=f' with logs chunk {self._chunk_index}' if self._chunk_index else ''
70
+ log_chunks=f' with logs chunk {self._chunk_index}' if self._chunk_index else '',
72
71
  )
73
72
  )
74
73
 
75
74
  def run(self, *args, **kwargs):
76
- """
77
- Выполнение действий функции с дальнейшим сохранением объектов в базу при отсутствии ошибок.
78
- """
75
+ """Выполнение действий функции с дальнейшим сохранением объектов в базу при отсутствии ошибок."""
79
76
  super().run(*args, **kwargs)
80
77
 
81
78
  if self.result.errors:
@@ -0,0 +1,20 @@
1
+ from edu_rdm_integration.adapters.helpers import (
2
+ WebEduFunctionHelper,
3
+ WebEduRunnerHelper,
4
+ )
5
+ from edu_rdm_integration.core.operations import (
6
+ ALL_OPERATIONS,
7
+ UPDATED_OPERATIONS,
8
+ )
9
+
10
+
11
+ class BaseCollectingDataRunnerHelper(WebEduRunnerHelper):
12
+ """Базовый класс помощников ранеров функций сбора данных для интеграции с "Региональная витрина данных"."""
13
+
14
+
15
+ class BaseCollectingDataFunctionHelper(WebEduFunctionHelper):
16
+ """Базовый класс помощников функций сбора данных для интеграции с "Региональная витрина данных"."""
17
+
18
+ def get_filtered_operations(self, with_deleted: bool = False) -> tuple[int]:
19
+ """Возвращает кортеж отфильтрованных операций."""
20
+ return ALL_OPERATIONS if with_deleted else UPDATED_OPERATIONS
@@ -28,11 +28,11 @@ from function_tools.runners import (
28
28
  from edu_rdm_integration.adapters.managers import (
29
29
  WebEduRunnerManager,
30
30
  )
31
- from edu_rdm_integration.consts import (
31
+ from edu_rdm_integration.core.consts import (
32
32
  DATETIME_FORMAT,
33
33
  LOGS_DELIMITER,
34
34
  )
35
- from edu_rdm_integration.models import (
35
+ from edu_rdm_integration.stages.collect_data.models import (
36
36
  CollectingDataStageStatus,
37
37
  CollectingExportedDataStage,
38
38
  )
@@ -45,9 +45,7 @@ if TYPE_CHECKING:
45
45
 
46
46
 
47
47
  class BaseCollectingDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
48
- """
49
- Базовый менеджер ранеров функций сбора данных для интеграции с "Региональная витрина данных".
50
- """
48
+ """Базовый менеджер ранеров функций сбора данных для интеграции с "Региональная витрина данных"."""
51
49
 
52
50
  forced_run = True
53
51
 
@@ -83,9 +81,7 @@ class BaseCollectingDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
83
81
  runner_class: type[BaseRunner],
84
82
  runner_regional_data_mart_integration_entities: list[str],
85
83
  ):
86
- """
87
- Собирает и возвращает список сущностей.
88
- """
84
+ """Собирает и возвращает список сущностей."""
89
85
  for runnable_class in runner_class._prepare_runnable_classes():
90
86
  if hasattr(runnable_class, '_prepare_runnable_classes'):
91
87
  self._collect_runner_regional_data_mart_integration_entities(
@@ -101,9 +97,7 @@ class BaseCollectingDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
101
97
  runner_regional_data_mart_integration_entities.extend(entities)
102
98
 
103
99
  def _get_loggable_models(self) -> set['Model']:
104
- """
105
- Возвращает перечень моделей по которым собираются логи.
106
- """
100
+ """Возвращает перечень моделей по которым собираются логи."""
107
101
  loggable_models = set()
108
102
  regional_data_mart_integration_entities = []
109
103
 
@@ -130,19 +124,19 @@ class BaseCollectingDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
130
124
  return loggable_models
131
125
 
132
126
  def _collect_logs(self):
133
- """
134
- Сбор логов для дальнейшей обработки.
135
- """
136
- return AuditLog.objects.filter(
137
- time__gte=self._logs_period_started_at,
138
- time__lt=self._logs_period_ended_at,
139
- table_id__in=get_models_table_ids(self._get_loggable_models()),
140
- ).order_by('time').iterator()
127
+ """Сбор логов для дальнейшей обработки."""
128
+ return (
129
+ AuditLog.objects.filter(
130
+ time__gte=self._logs_period_started_at,
131
+ time__lt=self._logs_period_ended_at,
132
+ table_id__in=get_models_table_ids(self._get_loggable_models()),
133
+ )
134
+ .order_by('time')
135
+ .iterator()
136
+ )
141
137
 
142
138
  def _create_runner(self, *args, **kwargs):
143
- """
144
- Метод создания ранера.
145
- """
139
+ """Метод создания ранера."""
146
140
  collected_logs = self._logs or self._collect_logs()
147
141
 
148
142
  logger.info(f'{LOGS_DELIMITER}{self.__class__.__name__} start preparing logs records..')
@@ -161,15 +155,14 @@ class BaseCollectingDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
161
155
  logger.info(f'{LOGS_DELIMITER}change status {repr(self._stage)}')
162
156
 
163
157
  def _start_runner(self, *args, **kwargs):
164
- """
165
- Ранер необходимо запустить с отложенным заполнением кешей, чтобы заполнение произошло перед запуском объекта.
158
+ """Ранер необходимо запустить с отложенным заполнением кешей.
159
+
160
+ Необходимо для заполнения перед запуском объекта.
166
161
  """
167
162
  super()._start_runner(*args, is_force_fill_cache=False, **kwargs)
168
163
 
169
164
  def _after_start_runner(self, *args, **kwargs):
170
- """
171
- Точка расширения поведения менеджера ранера после запуска ранера.
172
- """
165
+ """Точка расширения поведения менеджера ранера после запуска ранера."""
173
166
  if self._runner.result.errors:
174
167
  self._stage.status_id = CollectingDataStageStatus.FAILED.key
175
168
  else:
@@ -36,43 +36,41 @@ from educommon.integration_entities.helpers import (
36
36
  EntitySaver,
37
37
  )
38
38
 
39
- from edu_rdm_integration.collect_data.base.caches import (
40
- LogChange,
41
- )
42
- from edu_rdm_integration.collect_data.base.consts import (
43
- CACHED_OBJECTS_TYPE_MISMATCH_ERROR,
44
- NOT_SPECIFIED_QUEUE_TO_MODEL_ERROR,
45
- )
46
- from edu_rdm_integration.helpers import (
39
+ from edu_rdm_integration.core.helpers import (
47
40
  Graph,
48
41
  )
49
- from edu_rdm_integration.mapping import (
42
+ from edu_rdm_integration.core.mapping import (
50
43
  MODEL_FIELDS_LOG_FILTER,
51
44
  )
52
- from edu_rdm_integration.utils import (
45
+ from edu_rdm_integration.core.utils import (
53
46
  build_related_model_graph,
54
47
  )
48
+ from edu_rdm_integration.stages.collect_data.functions.base.caches import (
49
+ LogChange,
50
+ )
51
+ from edu_rdm_integration.stages.collect_data.functions.base.consts import (
52
+ CACHED_OBJECTS_TYPE_MISMATCH_ERROR,
53
+ NOT_SPECIFIED_QUEUE_TO_MODEL_ERROR,
54
+ )
55
55
 
56
56
 
57
57
  if TYPE_CHECKING:
58
58
  from edu_rdm_integration.adapters.caches import (
59
59
  WebEduEntityCache,
60
60
  )
61
- from edu_rdm_integration.collect_data.base.caches import (
62
- IgnoreLogDependency,
63
- LogChange,
64
- )
65
- from edu_rdm_integration.models import (
61
+ from edu_rdm_integration.rdm_models.models import (
66
62
  BaseEntityModel,
67
63
  )
64
+ from edu_rdm_integration.stages.collect_data.functions.base.caches import (
65
+ IgnoreLogDependency,
66
+ )
68
67
 
69
68
 
70
69
  class ReformatLogsMixin:
71
70
  """Миксин для преобразования логов к удобному для работы виду в кешах помощников функций."""
72
71
 
73
72
  def _reformat_logs(self):
74
- """
75
- Производится преобразование логов к удобному для работы виду.
73
+ """Производится преобразование логов к удобному для работы виду.
76
74
 
77
75
  Предполагается вложенные словари. На первом уровне ключом будет название
78
76
  модели, на втором идентификатор записи.
@@ -105,15 +103,15 @@ class ReformatLogsMixin:
105
103
  continue
106
104
 
107
105
  if log_change.operation == EntityLogOperation.DELETE:
108
- self.logs[model][log.object_id] = [log_change, ]
106
+ self.logs[model][log.object_id] = [
107
+ log_change,
108
+ ]
109
109
  else:
110
110
  self.logs[model][log.object_id].append(log_change)
111
111
 
112
112
  @staticmethod
113
113
  def _filter_log(model: str, log_change: LogChange) -> bool:
114
- """
115
- Производится проверка изменений на отслеживаемые поля.
116
- """
114
+ """Производится проверка изменений на отслеживаемые поля."""
117
115
  is_filtered = False
118
116
 
119
117
  if model in MODEL_FIELDS_LOG_FILTER[log_change.operation]:
@@ -198,9 +196,7 @@ class BaseIgnoreLogMixin:
198
196
  del self.logs[model_label][object_id]
199
197
 
200
198
  def _ignore_logs(self):
201
- """
202
- Исключение логов из обработки на основании описанных правил.
203
- """
199
+ """Исключение логов из обработки на основании описанных правил."""
204
200
  super()._ignore_logs()
205
201
 
206
202
  if not self._dependency:
@@ -226,9 +222,7 @@ class BaseIgnoreLogMixin:
226
222
  )
227
223
 
228
224
  q_filter |= self._build_filter(
229
- name_edges,
230
- dependency.filters,
231
- is_valid_lookup=bool(name_edges or find_model == log_model)
225
+ name_edges, dependency.filters, is_valid_lookup=bool(name_edges or find_model == log_model)
232
226
  )
233
227
 
234
228
  if q_filter:
@@ -240,8 +234,7 @@ class BaseIgnoreLogMixin:
240
234
 
241
235
 
242
236
  class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
243
- """
244
- Миксин, реализующий фильтрацию объектов перед сохранением.
237
+ """Миксин, реализующий фильтрацию объектов перед сохранением.
245
238
 
246
239
  Предназначен для использования в классах, которые занимаются сохранением сущностей, но при этом хотят исключить
247
240
  неизменённые объекты из операции записи, чтобы избежать лишних действий или запросов к базе данных.
@@ -249,11 +242,11 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
249
242
  определяет, какие сущности и с каким кешем нужно обработать.
250
243
 
251
244
  Attributes:
252
- _filtered_operations (tuple[EntityLogOperation]): : Операции, подлежащие фильтрации (по умолчанию только UPDATE).
245
+ _filtered_operations (tuple[EntityLogOperation]): : Операции, подлежащие фильтрации (по умолчанию только UPDATE)
253
246
  _saved_entities_to_cache_map (dict[type[BaseEntityModel], WebEduEntityCache]): Копия маппинга моделей на кэши,
254
- используемая для сравнения изменений.
247
+ используемая для сравнения изменений
255
248
  _ignored_fields (dict[EntityLogOperation, tuple[str]]): Словарь полей, которые следует игнорировать при
256
- сравнении для каждой операции.
249
+ сравнении для каждой операции
257
250
  """
258
251
 
259
252
  _filtered_operations: tuple[EntityLogOperation, ...] = (EntityLogOperation.UPDATE,)
@@ -263,12 +256,9 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
263
256
  }
264
257
 
265
258
  def _is_object_to_save(
266
- self,
267
- saved_object: 'BaseEntityModel',
268
- ignore_fields: Optional[Iterable[str]] = None
259
+ self, saved_object: 'BaseEntityModel', ignore_fields: Optional[Iterable[str]] = None
269
260
  ) -> bool:
270
- """
271
- Проверяет, должен ли объект быть добавлен в очередь на сохранение.
261
+ """Проверяет, должен ли объект быть добавлен в очередь на сохранение.
272
262
 
273
263
  Args:
274
264
  saved_object ('BaseEntityModel'): Объект, который предполагается сохранить.
@@ -294,10 +284,9 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
294
284
  self,
295
285
  saved_object: 'BaseEntityModel',
296
286
  original_object: 'BaseEntityModel',
297
- ignore_fields: Optional[Iterable[str]] = None
287
+ ignore_fields: Optional[Iterable[str]] = None,
298
288
  ) -> bool:
299
- """
300
- Проверяет, были ли изменения в указанном объекте относительно оригинала.
289
+ """Проверяет, были ли изменения в указанном объекте относительно оригинала.
301
290
 
302
291
  Args:
303
292
  saved_object ('BaseEntityModel'): Объект, который предполагается сохранить.
@@ -338,15 +327,13 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
338
327
  return False
339
328
 
340
329
  def _before_prepare(self, *args, **kwargs):
341
- """
342
- Подготовительный этап перед началом обработки объектов.
330
+ """Подготовительный этап перед началом обработки объектов.
343
331
 
344
332
  Сохраняет копию текущих сопоставлений объектов и кэшей, чтобы обеспечить чистое состояние для последующего
345
333
  сравнения.
346
334
  """
347
335
  self._saved_entities_to_cache_map = {
348
- model: deepcopy(cache)
349
- for model, cache in self._model_to_cache_map.items()
336
+ model: deepcopy(cache) for model, cache in self._model_to_cache_map.items()
350
337
  }
351
338
 
352
339
  super()._before_prepare(*args, **kwargs)
@@ -354,8 +341,7 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
354
341
  @property
355
342
  @abstractmethod
356
343
  def _model_to_cache_map(self) -> dict[type['BaseEntityModel'], 'WebEduEntityCache']:
357
- """
358
- Абстрактное свойство, возвращающее соответствие между типами моделей и их кэшами.
344
+ """Абстрактное свойство, возвращающее соответствие между типами моделей и их кэшами.
359
345
 
360
346
  Должно быть реализовано в дочернем классе. Используется для получения оригинальных данных объектов
361
347
  перед сравнением.
@@ -368,8 +354,7 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
368
354
  @property
369
355
  @abstractmethod
370
356
  def _model_to_save_queue_map(self) -> dict[type['BaseEntityModel'], dict]:
371
- """
372
- Абстрактное свойство, возвращающее соответствие между типами моделей и очередями сохранения.
357
+ """Абстрактное свойство, возвращающее соответствие между типами моделей и очередями сохранения.
373
358
 
374
359
  Должно быть реализовано в дочернем классе. Используется для определения, в какую очередь будет добавляться
375
360
  объект для сохранения.
@@ -386,9 +371,9 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
386
371
  ):
387
372
  """Добавление в очередь сущности на сохранение."""
388
373
  try:
389
- to_save_queue: dict[
390
- EntityLogOperation, dict[int, 'BaseEntityModel']
391
- ] = self._model_to_save_queue_map[type(save_object)]
374
+ to_save_queue: dict[EntityLogOperation, dict[int, 'BaseEntityModel']] = self._model_to_save_queue_map[
375
+ type(save_object)
376
+ ]
392
377
  except KeyError:
393
378
  raise KeyError(NOT_SPECIFIED_QUEUE_TO_MODEL_ERROR.format(save_object._meta.model_name))
394
379
 
@@ -402,8 +387,7 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
402
387
  to_save_queue[EntityLogOperation.UPDATE][save_object.id] = save_object
403
388
 
404
389
  def _get_entity_saver(self, model: 'BaseEntityModel') -> EntitySaver:
405
- """
406
- Возвращает экземпляр saver'а для указанной модели.
390
+ """Возвращает экземпляр saver'а для указанной модели.
407
391
 
408
392
  Args:
409
393
  model (BaseEntityModel): Тип модели, для которой требуется получить saver.
@@ -415,8 +399,7 @@ class FilteredSaveEntitiesFunctionMixin(metaclass=ABCMeta):
415
399
  return EntitySaver(to_save_entities=to_save_queue, model=model)
416
400
 
417
401
  def _save_entities(self):
418
- """
419
- Выполняет сохранение всех отфильтрованных и подготовленных объектов.
402
+ """Выполняет сохранение всех отфильтрованных и подготовленных объектов.
420
403
 
421
404
  Перебирает все модели из `_model_to_save_queue_map` и вызывает соответствующий `EntitySaver`.
422
405
  """
@@ -12,16 +12,13 @@ from edu_rdm_integration.adapters.runners import (
12
12
 
13
13
 
14
14
  class BaseCollectingDataRunner(WebEduRunner):
15
- """
16
- Базовый класс ранеров функций сбора данных для интеграции с "Региональная витрина данных".
15
+ """Базовый класс ранеров функций сбора данных для интеграции с "Региональная витрина данных".
17
16
 
18
17
  Поддерживается режим принудительного запуска функций без постановки в очередь на исполнение.
19
18
  """
20
19
 
21
20
  def _get_runnable_objects(self, logs, *args, **kwargs):
22
- """
23
- Возвращает генератор запускаемых объектов.
24
- """
21
+ """Возвращает генератор запускаемых объектов."""
25
22
  if not self.forced_run:
26
23
  yield from super()._get_runnable_objects(raw_logs=logs, *args, **kwargs)
27
24
  return
@@ -16,21 +16,17 @@ from edu_rdm_integration.adapters.caches import (
16
16
  WebEduFunctionCacheStorage,
17
17
  WebEduRunnerCacheStorage,
18
18
  )
19
- from edu_rdm_integration.collect_data.base.mixins import (
19
+ from edu_rdm_integration.stages.collect_data.functions.base.mixins import (
20
20
  ReformatLogsMixin,
21
21
  )
22
22
 
23
23
 
24
24
  class BaseCollectingCalculatedExportedDataRunnerCacheStorage(WebEduRunnerCacheStorage):
25
- """
26
- Базовый кеш помощников ранеров функций сбора расчетных данных для интеграции с "Региональная витрина данных".
27
- """
25
+ """Базовый кеш помощников ранеров функций сбора расчетных данных для интеграции с "Региональная витрина данных"."""
28
26
 
29
27
 
30
28
  class BaseCollectingCalculatedExportedDataFunctionCacheStorage(ReformatLogsMixin, WebEduFunctionCacheStorage):
31
- """
32
- Базовый кеш помощников функций сбора расчетных данных для интеграции с "Региональная витрина данных".
33
- """
29
+ """Базовый кеш помощников функций сбора расчетных данных для интеграции с "Региональная витрина данных"."""
34
30
 
35
31
  def __init__(self, raw_logs, *args, **kwargs):
36
32
  super().__init__(*args, **kwargs)
@@ -0,0 +1,7 @@
1
+ from edu_rdm_integration.adapters.errors import (
2
+ WebEduError,
3
+ )
4
+
5
+
6
+ class BaseCollectingCalculatedExportedDataError(WebEduError):
7
+ """Базовая ошибка функций сбора расчетных данных для интеграции с "Региональная витрина данных"."""
@@ -2,39 +2,31 @@ from abc import (
2
2
  ABCMeta,
3
3
  )
4
4
 
5
- from edu_rdm_integration.collect_data.base.functions import (
5
+ from edu_rdm_integration.stages.collect_data.functions.base.functions import (
6
6
  BaseCollectingCalculatedDataFunction,
7
7
  )
8
- from edu_rdm_integration.collect_data.calculated.base.helpers import (
8
+ from edu_rdm_integration.stages.collect_data.functions.calculated.base.helpers import (
9
9
  BaseCollectingCalculatedExportedDataFunctionHelper,
10
10
  )
11
- from edu_rdm_integration.collect_data.calculated.base.results import (
11
+ from edu_rdm_integration.stages.collect_data.functions.calculated.base.results import (
12
12
  BaseCollectingCalculatedExportedDataFunctionResult,
13
13
  )
14
- from edu_rdm_integration.collect_data.calculated.base.validators import (
14
+ from edu_rdm_integration.stages.collect_data.functions.calculated.base.validators import (
15
15
  BaseCollectingCalculatedExportedDataFunctionValidator,
16
16
  )
17
17
 
18
18
 
19
19
  class BaseCollectingCalculatedExportedDataFunction(BaseCollectingCalculatedDataFunction, metaclass=ABCMeta):
20
- """
21
- Базовый класс функций сбора расчетных данных для интеграции с "Региональная витрина данных".
22
- """
20
+ """Базовый класс функций сбора расчетных данных для интеграции с "Региональная витрина данных"."""
23
21
 
24
22
  def _prepare_helper_class(self) -> type[BaseCollectingCalculatedExportedDataFunctionHelper]:
25
- """
26
- Возвращает класс помощника функции.
27
- """
23
+ """Возвращает класс помощника функции."""
28
24
  return BaseCollectingCalculatedExportedDataFunctionHelper
29
25
 
30
26
  def _prepare_validator_class(self) -> type[BaseCollectingCalculatedExportedDataFunctionValidator]:
31
- """
32
- Возвращает класс валидатора функции.
33
- """
27
+ """Возвращает класс валидатора функции."""
34
28
  return BaseCollectingCalculatedExportedDataFunctionValidator
35
29
 
36
30
  def _prepare_result_class(self) -> type[BaseCollectingCalculatedExportedDataFunctionResult]:
37
- """
38
- Возвращает класс результата функции.
39
- """
31
+ """Возвращает класс результата функции."""
40
32
  return BaseCollectingCalculatedExportedDataFunctionResult
@@ -0,0 +1,24 @@
1
+ from edu_rdm_integration.stages.collect_data.functions.base.helpers import (
2
+ BaseCollectingDataFunctionHelper,
3
+ BaseCollectingDataRunnerHelper,
4
+ )
5
+ from edu_rdm_integration.stages.collect_data.functions.calculated.base.caches import (
6
+ BaseCollectingCalculatedExportedDataFunctionCacheStorage,
7
+ BaseCollectingCalculatedExportedDataRunnerCacheStorage,
8
+ )
9
+
10
+
11
+ class BaseCollectingCalculatedExportedDataRunnerHelper(BaseCollectingDataRunnerHelper):
12
+ """Базовый класс помощников ранеров функций сбора расчетных данных для интеграции с РВД."""
13
+
14
+ def _prepare_cache_class(self) -> type[BaseCollectingCalculatedExportedDataRunnerCacheStorage]:
15
+ """Возвращает класс кеша помощника ранера."""
16
+ return BaseCollectingCalculatedExportedDataRunnerCacheStorage
17
+
18
+
19
+ class BaseCollectingCalculatedExportedDataFunctionHelper(BaseCollectingDataFunctionHelper):
20
+ """Базовый класс помощников функций сбора расчетных данных для интеграции с РВД."""
21
+
22
+ def _prepare_cache_class(self) -> type[BaseCollectingCalculatedExportedDataFunctionCacheStorage]:
23
+ """Возвращает класс кеша помощника функции."""
24
+ return BaseCollectingCalculatedExportedDataFunctionCacheStorage