edu-rdm-integration 3.9.2__py3-none-any.whl → 3.10.1__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/collect_and_export_data/models.py +1 -67
  20. edu_rdm_integration/{consts.py → core/consts.py} +0 -11
  21. edu_rdm_integration/{enums.py → core/enums.py} +7 -54
  22. edu_rdm_integration/core/helpers.py +331 -0
  23. edu_rdm_integration/core/operations.py +71 -0
  24. edu_rdm_integration/core/redis_cache.py +20 -0
  25. edu_rdm_integration/{collect_and_export_data → core/registry}/actions.py +6 -12
  26. edu_rdm_integration/core/registry/apps.py +11 -0
  27. edu_rdm_integration/{collect_and_export_data → core/registry}/ui.py +1 -1
  28. edu_rdm_integration/{storages.py → core/storages.py} +8 -17
  29. edu_rdm_integration/{utils.py → core/utils.py} +29 -91
  30. edu_rdm_integration/migrations/0001_initial.py +294 -44
  31. edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +1 -3
  32. edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -1
  33. edu_rdm_integration/migrations/0004_uploaderclientlog.py +1 -2
  34. edu_rdm_integration/migrations/0005_auto_20231204_1224.py +16 -4
  35. edu_rdm_integration/migrations/0006_request_status_data.py +60 -58
  36. edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -1
  37. edu_rdm_integration/migrations/0009_auto_20240522_1619.py +1 -5
  38. edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -1
  39. edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +16 -3
  40. edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -1
  41. edu_rdm_integration/migrations/0013_set_attachment_size.py +8 -12
  42. edu_rdm_integration/migrations/0014_uploaddatacommand.py +33 -6
  43. edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +1 -5
  44. edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +2 -2
  45. edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +3 -2
  46. edu_rdm_integration/migrations/__init__.py +1 -0
  47. edu_rdm_integration/{registry → pipelines/transfer}/actions.py +13 -26
  48. edu_rdm_integration/pipelines/transfer/app_meta.py +18 -0
  49. edu_rdm_integration/pipelines/transfer/apps.py +19 -0
  50. edu_rdm_integration/pipelines/transfer/enums.py +34 -0
  51. edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +57 -0
  52. edu_rdm_integration/{base.py → pipelines/transfer/mixins.py} +29 -53
  53. edu_rdm_integration/pipelines/transfer/models.py +48 -0
  54. edu_rdm_integration/{tasks.py → pipelines/transfer/tasks.py} +51 -150
  55. edu_rdm_integration/{registry → pipelines/transfer}/ui.py +4 -10
  56. edu_rdm_integration/rdm_entities/apps.py +11 -0
  57. edu_rdm_integration/{entities.py → rdm_entities/entities.py} +67 -57
  58. edu_rdm_integration/rdm_entities/migrations/0001_initial.py +44 -0
  59. edu_rdm_integration/{enum_register → rdm_entities}/mixins.py +8 -59
  60. edu_rdm_integration/rdm_entities/models.py +63 -0
  61. edu_rdm_integration/rdm_entities/utils.py +33 -0
  62. edu_rdm_integration/rdm_models/apps.py +16 -0
  63. edu_rdm_integration/rdm_models/migrations/0001_initial.py +40 -0
  64. edu_rdm_integration/rdm_models/mixins.py +67 -0
  65. edu_rdm_integration/rdm_models/models.py +73 -0
  66. edu_rdm_integration/rdm_models/utils.py +23 -0
  67. edu_rdm_integration/stages/collect_data/apps.py +11 -0
  68. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/functions.py-tpl +2 -2
  69. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/managers.py-tpl +1 -1
  70. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/runners.py-tpl +1 -1
  71. edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/tests.py-tpl +2 -1
  72. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/caches.py +2 -2
  73. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/functions.py +15 -18
  74. edu_rdm_integration/stages/collect_data/functions/base/helpers.py +20 -0
  75. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/managers.py +20 -27
  76. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/mixins.py +38 -55
  77. edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/runners.py +2 -5
  78. edu_rdm_integration/stages/collect_data/functions/calculated/__init__.py +0 -0
  79. edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
  80. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/caches.py +3 -7
  81. edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +7 -0
  82. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/functions.py +8 -16
  83. edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +24 -0
  84. edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +19 -0
  85. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/presenters.py +1 -3
  86. edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +12 -0
  87. edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +28 -0
  88. edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +20 -0
  89. edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/strategies.py +32 -70
  90. edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
  91. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
  92. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/caches.py +13 -22
  93. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +7 -0
  94. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/functions.py +8 -16
  95. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +24 -0
  96. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +19 -0
  97. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/presenters.py +1 -3
  98. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +12 -0
  99. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +28 -0
  100. edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +20 -0
  101. edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/strategies.py +32 -70
  102. edu_rdm_integration/{collect_data → stages/collect_data}/generators.py +9 -14
  103. edu_rdm_integration/stages/collect_data/helpers.py +154 -0
  104. edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
  105. edu_rdm_integration/stages/collect_data/management/base.py +100 -0
  106. edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
  107. edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_latest_models_data.py +5 -7
  108. edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_models_data.py +5 -7
  109. edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +187 -0
  110. edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +105 -0
  111. edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
  112. edu_rdm_integration/stages/collect_data/mixins.py +56 -0
  113. edu_rdm_integration/stages/collect_data/models.py +318 -0
  114. edu_rdm_integration/{collect_data/collect.py → stages/collect_data/operations.py} +30 -43
  115. edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
  116. edu_rdm_integration/{collect_data → stages/collect_data/registry}/actions.py +17 -20
  117. edu_rdm_integration/stages/collect_data/registry/apps.py +11 -0
  118. edu_rdm_integration/{collect_data → stages/collect_data/registry}/ui.py +8 -15
  119. edu_rdm_integration/{collect_data → stages/collect_data}/tests.py +2 -2
  120. edu_rdm_integration/stages/export_data/__init__.py +0 -0
  121. edu_rdm_integration/stages/export_data/apps.py +11 -0
  122. edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
  123. edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/functions.py-tpl +2 -2
  124. edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/managers.py-tpl +2 -2
  125. edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/runners.py-tpl +2 -2
  126. edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
  127. edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
  128. edu_rdm_integration/{export_data → stages/export_data/functions}/base/caches.py +3 -8
  129. edu_rdm_integration/stages/export_data/functions/base/errors.py +7 -0
  130. edu_rdm_integration/{export_data → stages/export_data/functions}/base/functions.py +28 -59
  131. edu_rdm_integration/{export_data → stages/export_data/functions}/base/helpers.py +7 -17
  132. edu_rdm_integration/{export_data → stages/export_data/functions}/base/managers.py +19 -28
  133. edu_rdm_integration/stages/export_data/functions/base/presenters.py +11 -0
  134. edu_rdm_integration/{export_data → stages/export_data/functions}/base/requests.py +13 -40
  135. edu_rdm_integration/stages/export_data/functions/base/results.py +12 -0
  136. edu_rdm_integration/{export_data → stages/export_data/functions}/base/runners.py +9 -21
  137. edu_rdm_integration/stages/export_data/functions/base/validators.py +20 -0
  138. edu_rdm_integration/{export_data → stages/export_data}/generators.py +7 -6
  139. edu_rdm_integration/stages/export_data/helpers.py +203 -0
  140. edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
  141. edu_rdm_integration/stages/export_data/management/base.py +101 -0
  142. edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
  143. edu_rdm_integration/{management → stages/export_data/management}/commands/export_entities_data.py +5 -7
  144. edu_rdm_integration/{management → stages/export_data/management}/commands/export_latest_entities_data.py +5 -7
  145. edu_rdm_integration/stages/export_data/migrations/0001_initial.py +324 -0
  146. edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
  147. edu_rdm_integration/stages/export_data/mixins.py +50 -0
  148. edu_rdm_integration/stages/export_data/models.py +362 -0
  149. edu_rdm_integration/{export_data/export.py → stages/export_data/operations.py} +13 -152
  150. edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
  151. edu_rdm_integration/{export_data → stages/export_data/registry}/actions.py +18 -18
  152. edu_rdm_integration/stages/export_data/registry/apps.py +11 -0
  153. edu_rdm_integration/{export_data → stages/export_data/registry}/ui.py +5 -7
  154. edu_rdm_integration/{export_data → stages/export_data}/strategies.py +30 -68
  155. edu_rdm_integration/stages/service/__init__.py +0 -0
  156. edu_rdm_integration/stages/service/apps.py +19 -0
  157. edu_rdm_integration/stages/service/tasks.py +63 -0
  158. edu_rdm_integration/stages/upload_data/__init__.py +0 -0
  159. edu_rdm_integration/stages/upload_data/apps.py +19 -0
  160. edu_rdm_integration/stages/upload_data/consts.py +10 -0
  161. edu_rdm_integration/{export_data → stages/upload_data}/dataclasses.py +1 -0
  162. edu_rdm_integration/stages/upload_data/enums.py +17 -0
  163. edu_rdm_integration/{export_data/export_manager.py → stages/upload_data/export_managers.py} +73 -68
  164. edu_rdm_integration/stages/upload_data/helpers.py +164 -0
  165. edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
  166. edu_rdm_integration/stages/upload_data/management/base.py +134 -0
  167. edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
  168. edu_rdm_integration/{management → stages/upload_data/management}/commands/async_fix_attachment_size.py +32 -54
  169. edu_rdm_integration/{management → stages/upload_data/management}/commands/check_upload_status.py +7 -6
  170. edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_status.py +3 -3
  171. edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_upload.py +4 -4
  172. edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +161 -0
  173. edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
  174. edu_rdm_integration/stages/upload_data/models.py +175 -0
  175. edu_rdm_integration/stages/upload_data/operations.py +156 -0
  176. edu_rdm_integration/{export_data/queue.py → stages/upload_data/queues.py} +10 -8
  177. edu_rdm_integration/stages/upload_data/tasks.py +103 -0
  178. edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
  179. edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/actions.py +14 -16
  180. edu_rdm_integration/stages/upload_data/uploader_log/apps.py +11 -0
  181. edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/managers.py +15 -30
  182. edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +31 -0
  183. edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
  184. edu_rdm_integration/stages/upload_data/uploader_log/models.py +86 -0
  185. edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/ui.py +8 -6
  186. {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.1.dist-info}/METADATA +238 -238
  187. edu_rdm_integration-3.10.1.dist-info/RECORD +257 -0
  188. edu_rdm_integration/app_meta.py +0 -16
  189. edu_rdm_integration/app_settings.py +0 -77
  190. edu_rdm_integration/collect_and_export_data/utils.py +0 -224
  191. edu_rdm_integration/collect_data/base/helpers.py +0 -26
  192. edu_rdm_integration/collect_data/calculated/base/errors.py +0 -9
  193. edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -32
  194. edu_rdm_integration/collect_data/calculated/base/managers.py +0 -23
  195. edu_rdm_integration/collect_data/calculated/base/results.py +0 -16
  196. edu_rdm_integration/collect_data/calculated/base/runners.py +0 -36
  197. edu_rdm_integration/collect_data/calculated/base/validators.py +0 -28
  198. edu_rdm_integration/collect_data/helpers.py +0 -92
  199. edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -9
  200. edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -32
  201. edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -23
  202. edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -16
  203. edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -36
  204. edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -28
  205. edu_rdm_integration/enum_register/register.py +0 -79
  206. edu_rdm_integration/export_data/base/errors.py +0 -9
  207. edu_rdm_integration/export_data/base/presenters.py +0 -13
  208. edu_rdm_integration/export_data/base/results.py +0 -16
  209. edu_rdm_integration/export_data/base/validators.py +0 -28
  210. edu_rdm_integration/export_data/helpers.py +0 -92
  211. edu_rdm_integration/helpers.py +0 -412
  212. edu_rdm_integration/management/general.py +0 -327
  213. edu_rdm_integration/models.py +0 -982
  214. edu_rdm_integration/redis_cache.py +0 -51
  215. edu_rdm_integration/uploader_log/apps.py +0 -10
  216. edu_rdm_integration-3.9.2.dist-info/RECORD +0 -198
  217. /edu_rdm_integration/{collect_data → core}/__init__.py +0 -0
  218. /edu_rdm_integration/{mapping.py → core/mapping.py} +0 -0
  219. /edu_rdm_integration/{collect_data/base → core/registry}/__init__.py +0 -0
  220. /edu_rdm_integration/{templates → core/registry/templates}/ui-js/start-task.js +0 -0
  221. /edu_rdm_integration/{signals.py → core/signals.py} +0 -0
  222. /edu_rdm_integration/{typing.py → core/typing.py} +0 -0
  223. /edu_rdm_integration/{collect_data/calculated → pipelines}/__init__.py +0 -0
  224. /edu_rdm_integration/{collect_data/calculated/base → pipelines/transfer}/__init__.py +0 -0
  225. /edu_rdm_integration/{collect_data/non_calculated → pipelines/transfer/migrations}/__init__.py +0 -0
  226. /edu_rdm_integration/{templates → pipelines/transfer/templates}/ui-js/transferred-entity-list.js +0 -0
  227. /edu_rdm_integration/{collect_data/non_calculated/base → rdm_entities}/__init__.py +0 -0
  228. /edu_rdm_integration/{enum_register → rdm_entities/migrations}/__init__.py +0 -0
  229. /edu_rdm_integration/{export_data → rdm_models}/__init__.py +0 -0
  230. /edu_rdm_integration/{export_data/base → rdm_models/migrations}/__init__.py +0 -0
  231. /edu_rdm_integration/{function_templates → stages}/__init__.py +0 -0
  232. /edu_rdm_integration/{management → stages/collect_data}/__init__.py +0 -0
  233. /edu_rdm_integration/{collect_data/const.py → stages/collect_data/consts.py} +0 -0
  234. /edu_rdm_integration/{management/commands → stages/collect_data/function_templates}/__init__.py +0 -0
  235. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/__init__.py-tpl +0 -0
  236. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/apps.py-tpl +0 -0
  237. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/caches.py-tpl +0 -0
  238. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/consts.py-tpl +0 -0
  239. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/enums.py-tpl +0 -0
  240. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/errors.py-tpl +0 -0
  241. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/helpers.py-tpl +0 -0
  242. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/presenters.py-tpl +0 -0
  243. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/results.py-tpl +0 -0
  244. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/strings.py-tpl +0 -0
  245. /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/validators.py-tpl +0 -0
  246. /edu_rdm_integration/{registry → stages/collect_data/functions}/__init__.py +0 -0
  247. /edu_rdm_integration/{uploader_log → stages/collect_data/functions/base}/__init__.py +0 -0
  248. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/consts.py +0 -0
  249. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/consts.py +0 -0
  250. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/enums.py +0 -0
  251. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/strings.py +0 -0
  252. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/tests.py +0 -0
  253. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/consts.py +0 -0
  254. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/enums.py +0 -0
  255. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/strings.py +0 -0
  256. /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/tests.py +0 -0
  257. /edu_rdm_integration/{export_data → stages/export_data}/consts.py +0 -0
  258. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/__init__.py-tpl +0 -0
  259. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/apps.py-tpl +0 -0
  260. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/caches.py-tpl +0 -0
  261. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/consts.py-tpl +0 -0
  262. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/enums.py-tpl +0 -0
  263. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/errors.py-tpl +0 -0
  264. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/helpers.py-tpl +0 -0
  265. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/presenters.py-tpl +0 -0
  266. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/results.py-tpl +0 -0
  267. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/strings.py-tpl +0 -0
  268. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/tests.py-tpl +0 -0
  269. /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/validators.py-tpl +0 -0
  270. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/consts.py +0 -0
  271. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/enums.py +0 -0
  272. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/strings.py +0 -0
  273. /edu_rdm_integration/{export_data → stages/export_data/functions}/base/tests.py +0 -0
  274. /edu_rdm_integration/{templates → stages/export_data/registry/templates}/ui-js/stage_for_export.js +0 -0
  275. /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/enums.py +0 -0
  276. /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/templates/ui-js/object-grid-buttons.js +0 -0
  277. {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.1.dist-info}/WHEEL +0 -0
  278. {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.1.dist-info}/licenses/LICENSE +0 -0
  279. {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.1.dist-info}/top_level.txt +0 -0
@@ -15,10 +15,10 @@ from m3_db_utils.models import (
15
15
  ModelEnumValue,
16
16
  )
17
17
 
18
- from edu_rdm_integration.enum_register.mixins import (
18
+ from edu_rdm_integration.rdm_entities.mixins import (
19
19
  EntityEnumRegisterMixin,
20
20
  )
21
- from edu_rdm_integration.models import (
21
+ from edu_rdm_integration.rdm_models.models import (
22
22
  RegionalDataMartModelEnum,
23
23
  )
24
24
 
@@ -83,24 +83,35 @@ class AddressEntity(EntityEnumRegisterMixin, BaseEntity):
83
83
 
84
84
  @classmethod
85
85
  def get_primary_key_fields(cls) -> tuple[str, ...]:
86
- """
87
- Возвращает кортеж полей первичного ключа.
88
- """
89
- return cls.ID,
86
+ """Возвращает кортеж полей первичного ключа."""
87
+ return (cls.ID,)
90
88
 
91
89
  @classmethod
92
90
  def get_foreign_key_fields(cls) -> tuple[str, ...]:
93
- """
94
- Возвращает кортеж полей внешних ключей.
95
- """
91
+ """Возвращает кортеж полей внешних ключей."""
96
92
  return ()
97
93
 
98
94
  @classmethod
99
95
  def get_ordered_fields(cls) -> tuple[str, ...]:
96
+ """Возвращает кортеж полей в правильном порядке."""
100
97
  return (
101
- cls.ID, cls.USE_ADDRESS, cls.TYPE_ADDRESS, cls.TEXT, cls.CITY, cls.DISTRICT, cls.STATE, cls.POSTAL_CODE,
102
- cls.COUNTRY, cls.START_DATETIME, cls.END_DATETIME, cls.FLAT, cls.BUILDING, cls.HOUSE, cls.STREET,
103
- cls.CREATE_DATETIME, cls.SEND_DATETIME
98
+ cls.ID,
99
+ cls.USE_ADDRESS,
100
+ cls.TYPE_ADDRESS,
101
+ cls.TEXT,
102
+ cls.CITY,
103
+ cls.DISTRICT,
104
+ cls.STATE,
105
+ cls.POSTAL_CODE,
106
+ cls.COUNTRY,
107
+ cls.START_DATETIME,
108
+ cls.END_DATETIME,
109
+ cls.FLAT,
110
+ cls.BUILDING,
111
+ cls.HOUSE,
112
+ cls.STREET,
113
+ cls.CREATE_DATETIME,
114
+ cls.SEND_DATETIME,
104
115
  )
105
116
 
106
117
  # TODO EDUSCHL-20938 Удалить в рамках задачи
@@ -114,6 +125,7 @@ class AddressEntity(EntityEnumRegisterMixin, BaseEntity):
114
125
  """
115
126
  return RegionalDataMartModelEnum.ADDRESS
116
127
 
128
+
117
129
  @dataclass
118
130
  class AddressOrganisationEntity(EntityEnumRegisterMixin, BaseEntity):
119
131
  """Сущность РВД 'Адреса'."""
@@ -150,21 +162,26 @@ class AddressOrganisationEntity(EntityEnumRegisterMixin, BaseEntity):
150
162
 
151
163
  @classmethod
152
164
  def get_primary_key_fields(cls) -> tuple[str, ...]:
153
- """
154
- Возвращает кортеж полей первичного ключа.
155
- """
156
- return cls.ADDRESS_ID, cls.ORGANISATION_ID,
165
+ """Возвращает кортеж полей первичного ключа."""
166
+ return (
167
+ cls.ADDRESS_ID,
168
+ cls.ORGANISATION_ID,
169
+ )
157
170
 
158
171
  @classmethod
159
172
  def get_foreign_key_fields(cls) -> tuple[str, ...]:
160
- """
161
- Возвращает кортеж полей внешних ключей.
162
- """
173
+ """Возвращает кортеж полей внешних ключей."""
163
174
  return ()
164
175
 
165
176
  @classmethod
166
177
  def get_ordered_fields(cls) -> tuple[str, ...]:
167
- return cls.ADDRESS_ID, cls.ORGANISATION_ID, cls.CREATE_DATETIME, cls.SEND_DATETIME,
178
+ """Возвращает кортеж полей в правильном порядке."""
179
+ return (
180
+ cls.ADDRESS_ID,
181
+ cls.ORGANISATION_ID,
182
+ cls.CREATE_DATETIME,
183
+ cls.SEND_DATETIME,
184
+ )
168
185
 
169
186
  # TODO EDUSCHL-20938 Удалить в рамках задачи
170
187
  @classmethod
@@ -186,7 +203,7 @@ class AddressOrganisationEntity(EntityEnumRegisterMixin, BaseEntity):
186
203
 
187
204
  !!! Временное решение. Будет удалено в рамках EDUSCHL-20938.
188
205
  """
189
- return (RegionalDataMartModelEnum.ORGANISATION, )
206
+ return (RegionalDataMartModelEnum.ORGANISATION,)
190
207
 
191
208
 
192
209
  @dataclass
@@ -225,32 +242,37 @@ class TelecomEntity(EntityEnumRegisterMixin, BaseEntity):
225
242
 
226
243
  @classmethod
227
244
  def get_ordered_fields(cls) -> tuple[str, ...]:
228
- """
229
- Возвращает кортеж полей в правильном порядке.
230
- """
231
- return (cls.ID, cls.TYPE_CONTACT, cls.VALUE_TYPE, cls.USE_COD, cls.RANK_CONTACT,
232
- cls.START_DATETIME, cls.END_DATETIME, cls.CREATE_DATETIME, cls.SEND_DATETIME,)
245
+ """Возвращает кортеж полей в правильном порядке."""
246
+ return (
247
+ cls.ID,
248
+ cls.TYPE_CONTACT,
249
+ cls.VALUE_TYPE,
250
+ cls.USE_COD,
251
+ cls.RANK_CONTACT,
252
+ cls.START_DATETIME,
253
+ cls.END_DATETIME,
254
+ cls.CREATE_DATETIME,
255
+ cls.SEND_DATETIME,
256
+ )
233
257
 
234
258
  @classmethod
235
259
  def get_primary_key_fields(cls) -> tuple[str, ...]:
236
- """
237
- Возвращает кортеж полей первичного ключа.
238
- """
239
- return cls.ID,
260
+ """Возвращает кортеж полей первичного ключа."""
261
+ return (cls.ID,)
240
262
 
241
263
  @classmethod
242
264
  def get_foreign_key_fields(cls) -> tuple[str, ...]:
243
- """
244
- Возвращает кортеж полей внешних ключей.
245
- """
265
+ """Возвращает кортеж полей внешних ключей."""
246
266
  return ()
247
267
 
248
268
  @classmethod
249
269
  def get_required_fields(cls) -> tuple[str, ...]:
250
- """
251
- Возвращает кортеж обязательных полей.
252
- """
253
- return cls.ID, cls.CREATE_DATETIME, cls.SEND_DATETIME,
270
+ """Возвращает кортеж обязательных полей."""
271
+ return (
272
+ cls.ID,
273
+ cls.CREATE_DATETIME,
274
+ cls.SEND_DATETIME,
275
+ )
254
276
 
255
277
  @classmethod
256
278
  def get_hashable_fields(cls) -> tuple[str, ...]:
@@ -271,9 +293,7 @@ class TelecomEntity(EntityEnumRegisterMixin, BaseEntity):
271
293
 
272
294
  @dataclass
273
295
  class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
274
- """
275
- Сущность РВД "Организации".
276
- """
296
+ """Сущность РВД "Организации"."""
277
297
 
278
298
  # Параметры регистрации в модель-перечисление РВД
279
299
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -326,9 +346,7 @@ class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
326
346
 
327
347
  @classmethod
328
348
  def get_ordered_fields(cls) -> tuple[str, ...]:
329
- """
330
- Возвращает кортеж полей в правильном порядке.
331
- """
349
+ """Возвращает кортеж полей в правильном порядке."""
332
350
  return (
333
351
  cls.ID,
334
352
  cls.ROSOBR_ID,
@@ -353,9 +371,7 @@ class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
353
371
 
354
372
  @classmethod
355
373
  def get_required_fields(cls) -> tuple[str, ...]:
356
- """
357
- Возвращает кортеж обязательных полей.
358
- """
374
+ """Возвращает кортеж обязательных полей."""
359
375
  return (
360
376
  cls.ID,
361
377
  cls.ROSOBR_ID,
@@ -377,23 +393,17 @@ class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
377
393
 
378
394
  @classmethod
379
395
  def get_primary_key_fields(cls) -> tuple[str, ...]:
380
- """
381
- Возвращает кортеж полей первичного ключа.
382
- """
383
- return cls.ID,
396
+ """Возвращает кортеж полей первичного ключа."""
397
+ return (cls.ID,)
384
398
 
385
399
  @classmethod
386
400
  def get_foreign_key_fields(cls) -> tuple[str, ...]:
387
- """
388
- Возвращает кортеж полей внешних ключей.
389
- """
390
- return cls.PARTOF_ID,
401
+ """Возвращает кортеж полей внешних ключей."""
402
+ return (cls.PARTOF_ID,)
391
403
 
392
404
  @classmethod
393
405
  def get_hashable_fields(cls) -> tuple[str, ...]:
394
- """
395
- Возвращает кортеж полей, которые необходимо деперсонализировать (хэшировать).
396
- """
406
+ """Возвращает кортеж полей, которые необходимо деперсонализировать (хэшировать)."""
397
407
  return ()
398
408
 
399
409
  # TODO EDUSCHL-20938 Удалить в рамках задачи
@@ -0,0 +1,44 @@
1
+ # Generated by Django 3.2.24 on 2025-06-28 12:04
2
+
3
+ from django.db import (
4
+ migrations,
5
+ models,
6
+ )
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+ initial = True
11
+
12
+ dependencies = [
13
+ ('edu_rdm_integration', '0017_delete_uploaddatacommand'),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.SeparateDatabaseAndState(
18
+ state_operations=[
19
+ migrations.CreateModel(
20
+ name='RegionalDataMartEntityEnum',
21
+ fields=[
22
+ ('title', models.TextField(verbose_name='расшифровка значения')),
23
+ (
24
+ 'key',
25
+ models.CharField(
26
+ db_index=True, max_length=512, primary_key=True, serialize=False, verbose_name='ключ'
27
+ ),
28
+ ),
29
+ ('order_number', models.PositiveIntegerField(default=100000, verbose_name='Порядковый номер')),
30
+ ],
31
+ options={
32
+ 'verbose_name': 'Модель-перечисление сущностей "Региональной витрины данных"',
33
+ 'verbose_name_plural': 'Модели-перечисления сущностей "Региональной витрины данных"',
34
+ 'db_table': 'rdm_entity',
35
+ },
36
+ ),
37
+ ],
38
+ database_operations=[],
39
+ ),
40
+ migrations.SeparateDatabaseAndState(
41
+ state_operations=[],
42
+ database_operations=[],
43
+ ),
44
+ ]
@@ -1,13 +1,8 @@
1
1
  from typing import (
2
2
  Any,
3
- NamedTuple,
4
3
  Optional,
5
4
  )
6
5
 
7
- from django.db import (
8
- models,
9
- )
10
-
11
6
  from m3_db_utils.mixins import (
12
7
  BaseEnumRegisterMixin,
13
8
  )
@@ -18,16 +13,12 @@ from m3_django_compat import (
18
13
  classproperty,
19
14
  )
20
15
 
21
- from edu_rdm_integration.models import (
22
- RegionalDataMartEntityEnum,
23
- RegionalDataMartModelEnum,
24
- )
25
- from edu_rdm_integration.typing import (
26
- MODEL_TYPE_VAR,
27
- )
28
- from edu_rdm_integration.utils import (
16
+ from edu_rdm_integration.core.utils import (
29
17
  camel_to_underscore,
30
18
  )
19
+ from edu_rdm_integration.rdm_entities.models import (
20
+ RegionalDataMartEntityEnum,
21
+ )
31
22
 
32
23
 
33
24
  class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
@@ -48,11 +39,13 @@ class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
48
39
  """Расшифровка сущности модели-перечисления"""
49
40
 
50
41
  @classproperty
51
- def key(cls) -> str:
52
- return camel_to_underscore(cls.__name__.rsplit('Entity', 1)[0], upper=True)
42
+ def key(self) -> str:
43
+ """Ключ сущности в модели-перечислении RegionalDataMartEntityEnum."""
44
+ return camel_to_underscore(self.__name__.rsplit('Entity', 1)[0], upper=True)
53
45
 
54
46
  @classmethod
55
47
  def get_register_params(cls) -> dict[str, Any]:
48
+ """Параметры для регистрации сущности в модели перечислении RegionalDataMartEntityEnum."""
56
49
  register_params = super().get_register_params()
57
50
 
58
51
  register_params['main_model_enum'] = getattr(cls, 'main_model_enum', None) or cls.get_main_model_enum()
@@ -81,47 +74,3 @@ class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
81
74
  !!! Временное решение. Будет удалено в рамках EDUSCHL-20938.
82
75
  """
83
76
  return ()
84
-
85
-
86
- class ModelEnumRegisterMixin(BaseEnumRegisterMixin):
87
- """Миксин, для регистрации модели в RegionalDataMartModelEnum."""
88
-
89
- enum = RegionalDataMartModelEnum
90
- """Модель-перечисление в которую регистрируется модель."""
91
-
92
- creating_trigger_models: tuple[models.Model, ...] = ()
93
- """Перечень моделей по которым генерируются логи."""
94
-
95
- loggable_models: tuple[models.Model, ...] = ()
96
- """Перечень моделей по которым собираются логи."""
97
-
98
- @classproperty
99
- def key(cls) -> str:
100
- return camel_to_underscore(cls.__name__).upper()
101
-
102
- @classproperty
103
- def title(cls):
104
- return cls._meta.verbose_name
105
-
106
- @classmethod
107
- def get_register_params(cls) -> dict[str, Any]:
108
- register_params = super().get_register_params()
109
- register_params['model'] = cls
110
- register_params['creating_trigger_models'] = cls.creating_trigger_models
111
- register_params['loggable_models'] = cls.loggable_models
112
-
113
- return register_params
114
-
115
-
116
- class FromNamedTupleMixin:
117
- """Миксин получения экземпляра модели из получаемого кэша значений."""
118
-
119
- @classmethod
120
- def from_namedtuple(cls: type[MODEL_TYPE_VAR], namedtuple: NamedTuple) -> MODEL_TYPE_VAR:
121
- """Создает экземпляр класса из NamedTuple."""
122
- return cls(
123
- **{
124
- field: getattr(namedtuple, field)
125
- for field in [f.column for f in cls._meta.get_fields()]
126
- }
127
- )
@@ -0,0 +1,63 @@
1
+ from m3_db_utils.models import (
2
+ ModelEnumValue,
3
+ TitledModelEnum,
4
+ )
5
+
6
+
7
+ class RegionalDataMartEntityEnum(TitledModelEnum):
8
+ """Модель-перечисление сущностей выгрузки в Региональная витрина данных.
9
+
10
+ Поля:
11
+ entity - data-класс сущности;
12
+ main_model_enum - значение модели-перечисления RegionalDataMartModelEnum основной модели РВД для формирования
13
+ данных сущности. Обычно это модель идентификаторы записей которой соответствуют идентификаторам в записях
14
+ сущности. У этих записей проставляется подэтап выгрузки данных;
15
+ additional_model_enums - кортеж значений модели-перечисления RegionalDataMartModelEnum с дополнительными
16
+ моделями РВД, которые участвуют в формировании записей сущностей. Они показывают, что перед запуском
17
+ экспорта данных сущности по ним и основной модели должен быть запущен сбор данных.
18
+ """
19
+
20
+ class Meta:
21
+ db_table = 'rdm_entity'
22
+ extensible = True
23
+ verbose_name = 'Модель-перечисление сущностей "Региональной витрины данных"'
24
+ verbose_name_plural = 'Модели-перечисления сущностей "Региональной витрины данных"'
25
+
26
+ @property
27
+ def model_enums(self):
28
+ """Возвращает модели, от которых зависит сущность."""
29
+ value = self.model_enum_value
30
+
31
+ return self.get_model_enums_from_value(value=value)
32
+
33
+ @staticmethod
34
+ def get_model_enums_from_value(value: ModelEnumValue):
35
+ """Получение значений модели-перечисления моделей по значению модели-перечисления сущностей."""
36
+ model_enums = [value.main_model_enum, *value.additional_model_enums]
37
+
38
+ return model_enums
39
+
40
+ @classmethod
41
+ def get_entities_model_enums(
42
+ cls,
43
+ entity_enums: list[ModelEnumValue],
44
+ is_sorted: bool = True,
45
+ ) -> list[ModelEnumValue]:
46
+ """Получение списка значений модели-перечисления моделей RegionalDataMartModelEnum.
47
+
48
+ Args:
49
+ entity_enums: Список значений модели-перечисления сущностей RegionalDataMartEntityEnum;
50
+ is_sorted: Необходимость сортировки значений модели-перечисления RegionalDataMartModelEnum по полю
51
+ order_number.
52
+ """
53
+ model_enums = set()
54
+
55
+ for entity_enum_value in entity_enums:
56
+ model_enums.update(cls.get_model_enums_from_value(value=entity_enum_value))
57
+
58
+ model_enums = list(model_enums)
59
+
60
+ if is_sorted:
61
+ model_enums = sorted(model_enums, key=lambda value: value.order_number)
62
+
63
+ return model_enums
@@ -0,0 +1,33 @@
1
+ import inspect
2
+ import sys
3
+ from importlib import (
4
+ import_module,
5
+ )
6
+
7
+ from educommon.integration_entities.entities import (
8
+ BaseEntity,
9
+ )
10
+
11
+ from edu_rdm_integration.core.utils import (
12
+ register_classes,
13
+ )
14
+ from edu_rdm_integration.rdm_entities.mixins import (
15
+ EntityEnumRegisterMixin,
16
+ )
17
+
18
+
19
+ def is_register_entity(class_) -> bool:
20
+ """Проверяет, является ли класс регистрируемой сущностью."""
21
+ return inspect.isclass(class_) and issubclass(class_, BaseEntity) and issubclass(class_, EntityEnumRegisterMixin)
22
+
23
+
24
+ def register_entities(import_path: str) -> None:
25
+ """Находит регистрируемые сущности в модуле по переданному пути и регистрирует в RegionalDataMartEntityEnum.
26
+
27
+ Args:
28
+ import_path: Путь до пакета, хранящего классы сущностей;
29
+ """
30
+ import_module(import_path)
31
+ entities_module = sys.modules[import_path]
32
+
33
+ register_classes([c[1] for c in inspect.getmembers(entities_module, is_register_entity)])
@@ -0,0 +1,16 @@
1
+ from django.apps import (
2
+ AppConfig,
3
+ )
4
+
5
+
6
+ class RDMModelsConfigApp(AppConfig):
7
+ """Приложение для работы с моделями РВД."""
8
+
9
+ name = 'edu_rdm_integration.rdm_models'
10
+ label = 'edu_rdm_integration_models'
11
+ verbose_name = 'Модели РВД'
12
+
13
+ def __init__(self, *args, **kwargs):
14
+ print('1')
15
+
16
+ super().__init__(*args, **kwargs)
@@ -0,0 +1,40 @@
1
+ # Generated by Django 3.2.24 on 2025-06-28 14:08
2
+
3
+ from django.db import (
4
+ migrations,
5
+ models,
6
+ )
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+ initial = True
11
+
12
+ dependencies = [
13
+ ('edu_rdm_integration', '0017_delete_uploaddatacommand'),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.SeparateDatabaseAndState(
18
+ state_operations=[
19
+ migrations.CreateModel(
20
+ name='RegionalDataMartModelEnum',
21
+ fields=[
22
+ ('title', models.TextField(verbose_name='расшифровка значения')),
23
+ (
24
+ 'key',
25
+ models.CharField(
26
+ db_index=True, max_length=512, primary_key=True, serialize=False, verbose_name='ключ'
27
+ ),
28
+ ),
29
+ ('order_number', models.PositiveIntegerField(default=100000, verbose_name='Порядковый номер')),
30
+ ],
31
+ options={
32
+ 'verbose_name': 'Модель-перечисление моделей "Региональной витрины данных"',
33
+ 'verbose_name_plural': 'Модели-перечисления моделей "Региональной витрины данных"',
34
+ 'db_table': 'rdm_model',
35
+ },
36
+ ),
37
+ ],
38
+ database_operations=[],
39
+ ),
40
+ ]
@@ -0,0 +1,67 @@
1
+ from typing import (
2
+ Any,
3
+ NamedTuple,
4
+ )
5
+
6
+ from django.db import (
7
+ models,
8
+ )
9
+
10
+ from m3_db_utils.mixins import (
11
+ BaseEnumRegisterMixin,
12
+ )
13
+ from m3_django_compat import (
14
+ classproperty,
15
+ )
16
+
17
+ from edu_rdm_integration.core.typing import (
18
+ MODEL_TYPE_VAR,
19
+ )
20
+ from edu_rdm_integration.core.utils import (
21
+ camel_to_underscore,
22
+ )
23
+ from edu_rdm_integration.rdm_models.models import (
24
+ RegionalDataMartModelEnum,
25
+ )
26
+
27
+
28
+ class ModelEnumRegisterMixin(BaseEnumRegisterMixin):
29
+ """Миксин, для регистрации модели в RegionalDataMartModelEnum."""
30
+
31
+ enum = RegionalDataMartModelEnum
32
+ """Модель-перечисление в которую регистрируется модель."""
33
+
34
+ creating_trigger_models: tuple[models.Model, ...] = ()
35
+ """Перечень моделей по которым генерируются логи."""
36
+
37
+ loggable_models: tuple[models.Model, ...] = ()
38
+ """Перечень моделей по которым собираются логи."""
39
+
40
+ @classproperty
41
+ def key(self) -> str:
42
+ """Ключ сущности в модели-перечислении RegionalDataMartEntityEnum."""
43
+ return camel_to_underscore(self.__name__).upper()
44
+
45
+ @classproperty
46
+ def title(self):
47
+ """Название сущности."""
48
+ return self._meta.verbose_name
49
+
50
+ @classmethod
51
+ def get_register_params(cls) -> dict[str, Any]:
52
+ """Параметры для регистрации сущности в модели перечислении RegionalDataMartEntityEnum."""
53
+ register_params = super().get_register_params()
54
+ register_params['model'] = cls
55
+ register_params['creating_trigger_models'] = cls.creating_trigger_models
56
+ register_params['loggable_models'] = cls.loggable_models
57
+
58
+ return register_params
59
+
60
+
61
+ class FromNamedTupleMixin:
62
+ """Миксин получения экземпляра модели из получаемого кэша значений."""
63
+
64
+ @classmethod
65
+ def from_namedtuple(cls: type[MODEL_TYPE_VAR], namedtuple: NamedTuple) -> MODEL_TYPE_VAR:
66
+ """Создает экземпляр класса из NamedTuple."""
67
+ return cls(**{field: getattr(namedtuple, field) for field in [f.column for f in cls._meta.get_fields()]})
@@ -0,0 +1,73 @@
1
+ from django.db.models import (
2
+ CASCADE,
3
+ DateTimeField,
4
+ ForeignKey,
5
+ SmallIntegerField,
6
+ )
7
+ from m3.db import (
8
+ BaseObjectModel,
9
+ )
10
+
11
+ from educommon.django.db.mixins import (
12
+ ReprStrPreModelMixin,
13
+ )
14
+ from educommon.integration_entities.enums import (
15
+ EntityLogOperation,
16
+ )
17
+ from m3_db_utils.models import (
18
+ TitledModelEnum,
19
+ )
20
+
21
+
22
+ class BaseEntityModel(ReprStrPreModelMixin, BaseObjectModel):
23
+ """Базовая модель сущности."""
24
+
25
+ collecting_sub_stage = ForeignKey(
26
+ verbose_name='Подэтап сбора данных сущности',
27
+ to='edu_rdm_integration_collect_data_stage.CollectingExportedDataSubStage',
28
+ on_delete=CASCADE,
29
+ )
30
+ exporting_sub_stage = ForeignKey(
31
+ verbose_name='Подэтап выгрузки',
32
+ to='edu_rdm_integration_export_data_stage.ExportingDataSubStage',
33
+ blank=True,
34
+ null=True,
35
+ on_delete=CASCADE,
36
+ )
37
+ operation = SmallIntegerField(
38
+ verbose_name='Действие',
39
+ choices=EntityLogOperation.get_choices(),
40
+ )
41
+
42
+ created = DateTimeField(
43
+ verbose_name='Дата создания',
44
+ auto_now_add=True,
45
+ null=True,
46
+ blank=True,
47
+ db_index=True,
48
+ )
49
+ modified = DateTimeField(
50
+ verbose_name='Дата изменения',
51
+ auto_now=True,
52
+ null=True,
53
+ blank=True,
54
+ db_index=True,
55
+ )
56
+
57
+ @property
58
+ def attrs_for_repr_str(self):
59
+ """Список атрибутов для отображения экземпляра модели."""
60
+ return ['collecting_sub_stage', 'exporting_sub_stage', 'operation', 'created', 'modified']
61
+
62
+ class Meta:
63
+ abstract = True
64
+
65
+
66
+ class RegionalDataMartModelEnum(TitledModelEnum):
67
+ """Модель-перечисление моделей "Региональная витрина данных"."""
68
+
69
+ class Meta:
70
+ db_table = 'rdm_model'
71
+ extensible = True
72
+ verbose_name = 'Модель-перечисление моделей "Региональной витрины данных"'
73
+ verbose_name_plural = 'Модели-перечисления моделей "Региональной витрины данных"'