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.
- 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} +30 -192
- 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.1.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.1.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.1.dist-info → edu_rdm_integration-3.10.0.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-3.9.1.dist-info → edu_rdm_integration-3.10.0.dist-info}/licenses/LICENSE +0 -0
- {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,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 =
|
38
|
-
|
39
|
-
|
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
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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.
|
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.
|
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] = [
|
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
|
-
|
391
|
-
]
|
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
|
File without changes
|
edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/caches.py
RENAMED
@@ -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)
|
edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/functions.py
RENAMED
@@ -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
|