edu-rdm-integration 3.9.2__py3-none-any.whl → 3.10.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- edu_rdm_integration/__init__.py +0 -1
- edu_rdm_integration/adapters/apps.py +15 -2
- edu_rdm_integration/adapters/caches.py +25 -12
- edu_rdm_integration/adapters/errors.py +13 -2
- edu_rdm_integration/adapters/functions.py +53 -14
- edu_rdm_integration/adapters/helpers.py +34 -8
- edu_rdm_integration/adapters/managers.py +41 -5
- edu_rdm_integration/adapters/presenters.py +26 -2
- edu_rdm_integration/adapters/receivers.py +16 -2
- edu_rdm_integration/adapters/results.py +50 -4
- edu_rdm_integration/adapters/runners.py +79 -20
- edu_rdm_integration/adapters/strategies.py +56 -54
- edu_rdm_integration/adapters/validators.py +43 -4
- edu_rdm_integration/apps.py +3 -23
- edu_rdm_integration/collect_and_export_data/__init__.py +1 -1
- edu_rdm_integration/collect_and_export_data/apps.py +1 -0
- edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +107 -17
- edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +4 -2
- edu_rdm_integration/{consts.py → core/consts.py} +0 -11
- edu_rdm_integration/{enums.py → core/enums.py} +7 -54
- edu_rdm_integration/core/helpers.py +331 -0
- edu_rdm_integration/core/operations.py +71 -0
- edu_rdm_integration/core/redis_cache.py +20 -0
- edu_rdm_integration/{collect_and_export_data → core/registry}/actions.py +6 -12
- edu_rdm_integration/core/registry/apps.py +11 -0
- edu_rdm_integration/{collect_and_export_data → core/registry}/ui.py +1 -1
- edu_rdm_integration/{storages.py → core/storages.py} +8 -17
- edu_rdm_integration/{utils.py → core/utils.py} +29 -91
- edu_rdm_integration/migrations/0001_initial.py +294 -44
- edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +1 -3
- edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -1
- edu_rdm_integration/migrations/0004_uploaderclientlog.py +1 -2
- edu_rdm_integration/migrations/0005_auto_20231204_1224.py +16 -4
- edu_rdm_integration/migrations/0006_request_status_data.py +60 -58
- edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -1
- edu_rdm_integration/migrations/0009_auto_20240522_1619.py +1 -5
- edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -1
- edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +16 -3
- edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -1
- edu_rdm_integration/migrations/0013_set_attachment_size.py +8 -12
- edu_rdm_integration/migrations/0014_uploaddatacommand.py +33 -6
- edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +1 -5
- edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +2 -2
- edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +3 -2
- edu_rdm_integration/migrations/__init__.py +1 -0
- edu_rdm_integration/{registry → pipelines/transfer}/actions.py +13 -26
- edu_rdm_integration/pipelines/transfer/app_meta.py +18 -0
- edu_rdm_integration/pipelines/transfer/apps.py +19 -0
- edu_rdm_integration/pipelines/transfer/enums.py +34 -0
- edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +57 -0
- edu_rdm_integration/{base.py → pipelines/transfer/mixins.py} +29 -53
- edu_rdm_integration/pipelines/transfer/models.py +48 -0
- edu_rdm_integration/{tasks.py → pipelines/transfer/tasks.py} +51 -150
- edu_rdm_integration/{registry → pipelines/transfer}/ui.py +4 -10
- edu_rdm_integration/rdm_entities/apps.py +11 -0
- edu_rdm_integration/{entities.py → rdm_entities/entities.py} +67 -57
- edu_rdm_integration/rdm_entities/migrations/0001_initial.py +44 -0
- edu_rdm_integration/{enum_register → rdm_entities}/mixins.py +8 -59
- edu_rdm_integration/rdm_entities/models.py +63 -0
- edu_rdm_integration/rdm_entities/utils.py +33 -0
- edu_rdm_integration/rdm_models/apps.py +16 -0
- edu_rdm_integration/rdm_models/migrations/0001_initial.py +40 -0
- edu_rdm_integration/rdm_models/mixins.py +67 -0
- edu_rdm_integration/rdm_models/models.py +73 -0
- edu_rdm_integration/rdm_models/utils.py +23 -0
- edu_rdm_integration/stages/collect_data/apps.py +11 -0
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/functions.py-tpl +2 -2
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/managers.py-tpl +1 -1
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/runners.py-tpl +1 -1
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/tests.py-tpl +2 -1
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/caches.py +2 -2
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/functions.py +15 -18
- edu_rdm_integration/stages/collect_data/functions/base/helpers.py +20 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/managers.py +20 -27
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/mixins.py +38 -55
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/runners.py +2 -5
- edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/caches.py +3 -7
- edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +7 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/functions.py +8 -16
- edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +24 -0
- edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +19 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/presenters.py +1 -3
- edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +12 -0
- edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +28 -0
- edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +20 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/strategies.py +32 -70
- edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/caches.py +13 -22
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +7 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/functions.py +8 -16
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +24 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +19 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/presenters.py +1 -3
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +12 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +28 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +20 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/strategies.py +32 -70
- edu_rdm_integration/{collect_data → stages/collect_data}/generators.py +9 -14
- edu_rdm_integration/stages/collect_data/helpers.py +154 -0
- edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
- edu_rdm_integration/stages/collect_data/management/base.py +100 -0
- edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
- edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_latest_models_data.py +5 -7
- edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_models_data.py +5 -7
- edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +187 -0
- edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +105 -0
- edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/collect_data/mixins.py +56 -0
- edu_rdm_integration/stages/collect_data/models.py +318 -0
- edu_rdm_integration/{collect_data/collect.py → stages/collect_data/operations.py} +30 -43
- edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
- edu_rdm_integration/{collect_data → stages/collect_data/registry}/actions.py +17 -20
- edu_rdm_integration/stages/collect_data/registry/apps.py +11 -0
- edu_rdm_integration/{collect_data → stages/collect_data/registry}/ui.py +8 -15
- edu_rdm_integration/{collect_data → stages/collect_data}/tests.py +2 -2
- edu_rdm_integration/stages/export_data/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/apps.py +11 -0
- edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
- edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/functions.py-tpl +2 -2
- edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/managers.py-tpl +2 -2
- edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/runners.py-tpl +2 -2
- edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/caches.py +3 -8
- edu_rdm_integration/stages/export_data/functions/base/errors.py +7 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/functions.py +28 -59
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/helpers.py +7 -17
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/managers.py +19 -28
- edu_rdm_integration/stages/export_data/functions/base/presenters.py +11 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/requests.py +13 -40
- edu_rdm_integration/stages/export_data/functions/base/results.py +12 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/runners.py +9 -21
- edu_rdm_integration/stages/export_data/functions/base/validators.py +20 -0
- edu_rdm_integration/{export_data → stages/export_data}/generators.py +7 -6
- edu_rdm_integration/stages/export_data/helpers.py +203 -0
- edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/management/base.py +101 -0
- edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
- edu_rdm_integration/{management → stages/export_data/management}/commands/export_entities_data.py +5 -7
- edu_rdm_integration/{management → stages/export_data/management}/commands/export_latest_entities_data.py +5 -7
- edu_rdm_integration/stages/export_data/migrations/0001_initial.py +324 -0
- edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/mixins.py +50 -0
- edu_rdm_integration/stages/export_data/models.py +362 -0
- edu_rdm_integration/{export_data/export.py → stages/export_data/operations.py} +13 -152
- edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
- edu_rdm_integration/{export_data → stages/export_data/registry}/actions.py +18 -18
- edu_rdm_integration/stages/export_data/registry/apps.py +11 -0
- edu_rdm_integration/{export_data → stages/export_data/registry}/ui.py +5 -7
- edu_rdm_integration/{export_data → stages/export_data}/strategies.py +30 -68
- edu_rdm_integration/stages/service/__init__.py +0 -0
- edu_rdm_integration/stages/service/apps.py +19 -0
- edu_rdm_integration/stages/service/tasks.py +63 -0
- edu_rdm_integration/stages/upload_data/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/apps.py +19 -0
- edu_rdm_integration/stages/upload_data/consts.py +10 -0
- edu_rdm_integration/{export_data → stages/upload_data}/dataclasses.py +1 -0
- edu_rdm_integration/stages/upload_data/enums.py +17 -0
- edu_rdm_integration/{export_data/export_manager.py → stages/upload_data/export_managers.py} +73 -68
- edu_rdm_integration/stages/upload_data/helpers.py +164 -0
- edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/management/base.py +134 -0
- edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
- edu_rdm_integration/{management → stages/upload_data/management}/commands/async_fix_attachment_size.py +32 -54
- edu_rdm_integration/{management → stages/upload_data/management}/commands/check_upload_status.py +7 -6
- edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_status.py +3 -3
- edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_upload.py +4 -4
- edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +161 -0
- edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/models.py +175 -0
- edu_rdm_integration/stages/upload_data/operations.py +156 -0
- edu_rdm_integration/{export_data/queue.py → stages/upload_data/queues.py} +10 -8
- edu_rdm_integration/stages/upload_data/tasks.py +103 -0
- edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
- edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/actions.py +14 -16
- edu_rdm_integration/stages/upload_data/uploader_log/apps.py +11 -0
- edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/managers.py +15 -30
- edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +31 -0
- edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/uploader_log/models.py +86 -0
- edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/ui.py +8 -6
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/METADATA +238 -238
- edu_rdm_integration-3.10.0.dist-info/RECORD +255 -0
- edu_rdm_integration/app_meta.py +0 -16
- edu_rdm_integration/app_settings.py +0 -77
- edu_rdm_integration/collect_and_export_data/models.py +0 -67
- edu_rdm_integration/collect_and_export_data/utils.py +0 -224
- edu_rdm_integration/collect_data/base/helpers.py +0 -26
- edu_rdm_integration/collect_data/calculated/base/errors.py +0 -9
- edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -32
- edu_rdm_integration/collect_data/calculated/base/managers.py +0 -23
- edu_rdm_integration/collect_data/calculated/base/results.py +0 -16
- edu_rdm_integration/collect_data/calculated/base/runners.py +0 -36
- edu_rdm_integration/collect_data/calculated/base/validators.py +0 -28
- edu_rdm_integration/collect_data/helpers.py +0 -92
- edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -9
- edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -32
- edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -23
- edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -16
- edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -36
- edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -28
- edu_rdm_integration/enum_register/register.py +0 -79
- edu_rdm_integration/export_data/base/errors.py +0 -9
- edu_rdm_integration/export_data/base/presenters.py +0 -13
- edu_rdm_integration/export_data/base/results.py +0 -16
- edu_rdm_integration/export_data/base/validators.py +0 -28
- edu_rdm_integration/export_data/helpers.py +0 -92
- edu_rdm_integration/helpers.py +0 -412
- edu_rdm_integration/management/general.py +0 -327
- edu_rdm_integration/models.py +0 -982
- edu_rdm_integration/redis_cache.py +0 -51
- edu_rdm_integration/uploader_log/apps.py +0 -10
- edu_rdm_integration-3.9.2.dist-info/RECORD +0 -198
- /edu_rdm_integration/{collect_and_export_data/migrations → core}/__init__.py +0 -0
- /edu_rdm_integration/{mapping.py → core/mapping.py} +0 -0
- /edu_rdm_integration/{collect_data → core/registry}/__init__.py +0 -0
- /edu_rdm_integration/{templates → core/registry/templates}/ui-js/start-task.js +0 -0
- /edu_rdm_integration/{signals.py → core/signals.py} +0 -0
- /edu_rdm_integration/{typing.py → core/typing.py} +0 -0
- /edu_rdm_integration/{collect_data/base → pipelines}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/calculated → pipelines/transfer}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/calculated/base → pipelines/transfer/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{templates → pipelines/transfer/templates}/ui-js/transferred-entity-list.js +0 -0
- /edu_rdm_integration/{collect_data/non_calculated → rdm_entities}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/non_calculated/base → rdm_entities/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{enum_register → rdm_models}/__init__.py +0 -0
- /edu_rdm_integration/{export_data → rdm_models/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{export_data/base → stages}/__init__.py +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/const.py → stages/collect_data/consts.py} +0 -0
- /edu_rdm_integration/{management → stages/collect_data/function_templates}/__init__.py +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/__init__.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/apps.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/caches.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/consts.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/enums.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/errors.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/helpers.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/presenters.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/results.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/strings.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/validators.py-tpl +0 -0
- /edu_rdm_integration/{management/commands → stages/collect_data/functions}/__init__.py +0 -0
- /edu_rdm_integration/{registry → stages/collect_data/functions/base}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/consts.py +0 -0
- /edu_rdm_integration/{uploader_log → stages/collect_data/functions/calculated}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/consts.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/enums.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/strings.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/tests.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/consts.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/enums.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/strings.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/tests.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data}/consts.py +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/__init__.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/apps.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/caches.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/consts.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/enums.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/errors.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/helpers.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/presenters.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/results.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/strings.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/tests.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/validators.py-tpl +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/consts.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/enums.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/strings.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/tests.py +0 -0
- /edu_rdm_integration/{templates → stages/export_data/registry/templates}/ui-js/stage_for_export.js +0 -0
- /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/enums.py +0 -0
- /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/templates/ui-js/object-grid-buttons.js +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/licenses/LICENSE +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.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.
|
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,
|
102
|
-
cls.
|
103
|
-
cls.
|
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
|
-
|
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
|
-
|
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
|
-
|
232
|
-
|
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
|
-
|
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.
|
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(
|
52
|
-
|
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 = 'Модели-перечисления моделей "Региональной витрины данных"'
|