edu-rdm-integration 3.9.2__py3-none-any.whl → 3.10.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/collect_and_export_data/models.py +1 -67
- 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/__init__.py +0 -0
- 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.1.dist-info}/METADATA +238 -238
- edu_rdm_integration-3.10.1.dist-info/RECORD +257 -0
- edu_rdm_integration/app_meta.py +0 -16
- edu_rdm_integration/app_settings.py +0 -77
- 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_data → core}/__init__.py +0 -0
- /edu_rdm_integration/{mapping.py → core/mapping.py} +0 -0
- /edu_rdm_integration/{collect_data/base → 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/calculated → pipelines}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/calculated/base → pipelines/transfer}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/non_calculated → 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/base → rdm_entities}/__init__.py +0 -0
- /edu_rdm_integration/{enum_register → rdm_entities/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{export_data → rdm_models}/__init__.py +0 -0
- /edu_rdm_integration/{export_data/base → rdm_models/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{function_templates → stages}/__init__.py +0 -0
- /edu_rdm_integration/{management → 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/commands → 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/{registry → stages/collect_data/functions}/__init__.py +0 -0
- /edu_rdm_integration/{uploader_log → 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/{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.1.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.1.dist-info}/licenses/LICENSE +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,187 @@
|
|
1
|
+
# Generated by Django 3.2.24 on 2025-06-28 14:07
|
2
|
+
|
3
|
+
import django.db.models.deletion
|
4
|
+
from django.db import (
|
5
|
+
migrations,
|
6
|
+
models,
|
7
|
+
)
|
8
|
+
|
9
|
+
import educommon.django.db.mixins
|
10
|
+
import educommon.utils.date
|
11
|
+
|
12
|
+
|
13
|
+
class Migration(migrations.Migration):
|
14
|
+
initial = True
|
15
|
+
|
16
|
+
dependencies = [
|
17
|
+
('function_tools', '0005_auto_20220724_0050'),
|
18
|
+
('edu_rdm_integration', '0017_delete_uploaddatacommand'),
|
19
|
+
]
|
20
|
+
|
21
|
+
operations = [
|
22
|
+
migrations.SeparateDatabaseAndState(
|
23
|
+
state_operations=[
|
24
|
+
migrations.CreateModel(
|
25
|
+
name='CollectingDataStageStatus',
|
26
|
+
fields=[
|
27
|
+
('title', models.TextField(verbose_name='расшифровка значения')),
|
28
|
+
(
|
29
|
+
'key',
|
30
|
+
models.CharField(
|
31
|
+
db_index=True, max_length=512, primary_key=True, serialize=False, verbose_name='ключ'
|
32
|
+
),
|
33
|
+
),
|
34
|
+
('order_number', models.PositiveIntegerField(default=100000, verbose_name='Порядковый номер')),
|
35
|
+
],
|
36
|
+
options={
|
37
|
+
'verbose_name': 'Модель-перечисление статусов этапа сбора данных',
|
38
|
+
'verbose_name_plural': 'Модели-перечисления статусов этапов сбора данных',
|
39
|
+
'db_table': 'rdm_collecting_data_stage_status',
|
40
|
+
},
|
41
|
+
),
|
42
|
+
migrations.CreateModel(
|
43
|
+
name='CollectingDataSubStageStatus',
|
44
|
+
fields=[
|
45
|
+
('title', models.TextField(verbose_name='расшифровка значения')),
|
46
|
+
(
|
47
|
+
'key',
|
48
|
+
models.CharField(
|
49
|
+
db_index=True, max_length=512, primary_key=True, serialize=False, verbose_name='ключ'
|
50
|
+
),
|
51
|
+
),
|
52
|
+
('order_number', models.PositiveIntegerField(default=100000, verbose_name='Порядковый номер')),
|
53
|
+
],
|
54
|
+
options={
|
55
|
+
'verbose_name': 'Модель-перечисление статусов подэтапа сбора данных',
|
56
|
+
'verbose_name_plural': 'Модели-перечисления статусов подэтапов сбора данных',
|
57
|
+
'db_table': 'rdm_collecting_data_sub_stage_status',
|
58
|
+
},
|
59
|
+
),
|
60
|
+
migrations.CreateModel(
|
61
|
+
name='CollectingExportedDataStage',
|
62
|
+
fields=[
|
63
|
+
(
|
64
|
+
'id',
|
65
|
+
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
66
|
+
),
|
67
|
+
(
|
68
|
+
'logs_period_started_at',
|
69
|
+
models.DateTimeField(
|
70
|
+
db_index=True,
|
71
|
+
default=educommon.utils.date.get_today_min_datetime,
|
72
|
+
verbose_name='Левая граница периода обрабатываемых логов',
|
73
|
+
),
|
74
|
+
),
|
75
|
+
(
|
76
|
+
'logs_period_ended_at',
|
77
|
+
models.DateTimeField(
|
78
|
+
db_index=True,
|
79
|
+
default=educommon.utils.date.get_today_max_datetime,
|
80
|
+
verbose_name='Правая граница периода обрабатываемых логов',
|
81
|
+
),
|
82
|
+
),
|
83
|
+
(
|
84
|
+
'started_at',
|
85
|
+
models.DateTimeField(
|
86
|
+
auto_now_add=True, db_index=True, verbose_name='Время начала сбора данных'
|
87
|
+
),
|
88
|
+
),
|
89
|
+
(
|
90
|
+
'ended_at',
|
91
|
+
models.DateTimeField(
|
92
|
+
blank=True, db_index=True, null=True, verbose_name='Время завершения сбора данных'
|
93
|
+
),
|
94
|
+
),
|
95
|
+
(
|
96
|
+
'manager',
|
97
|
+
models.ForeignKey(
|
98
|
+
blank=True,
|
99
|
+
null=True,
|
100
|
+
on_delete=django.db.models.deletion.PROTECT,
|
101
|
+
to='function_tools.entity',
|
102
|
+
verbose_name='Менеджер ранера Функции',
|
103
|
+
),
|
104
|
+
),
|
105
|
+
(
|
106
|
+
'status',
|
107
|
+
models.ForeignKey(
|
108
|
+
default='CREATED',
|
109
|
+
on_delete=django.db.models.deletion.PROTECT,
|
110
|
+
to='edu_rdm_integration_collect_data_stage.collectingdatastagestatus',
|
111
|
+
verbose_name='Статус',
|
112
|
+
),
|
113
|
+
),
|
114
|
+
],
|
115
|
+
options={
|
116
|
+
'verbose_name': 'Этап формирования данных для выгрузки',
|
117
|
+
'verbose_name_plural': 'Этапы формирования данных для выгрузки',
|
118
|
+
'db_table': 'rdm_collecting_exported_data_stage',
|
119
|
+
},
|
120
|
+
bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
|
121
|
+
),
|
122
|
+
migrations.CreateModel(
|
123
|
+
name='CollectingExportedDataSubStage',
|
124
|
+
fields=[
|
125
|
+
(
|
126
|
+
'id',
|
127
|
+
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
128
|
+
),
|
129
|
+
(
|
130
|
+
'started_at',
|
131
|
+
models.DateTimeField(
|
132
|
+
auto_now_add=True, db_index=True, verbose_name='Время начала сбора данных'
|
133
|
+
),
|
134
|
+
),
|
135
|
+
(
|
136
|
+
'ended_at',
|
137
|
+
models.DateTimeField(
|
138
|
+
blank=True, db_index=True, null=True, verbose_name='Время завершения сбора данных'
|
139
|
+
),
|
140
|
+
),
|
141
|
+
(
|
142
|
+
'function',
|
143
|
+
models.ForeignKey(
|
144
|
+
on_delete=django.db.models.deletion.PROTECT,
|
145
|
+
to='function_tools.entity',
|
146
|
+
verbose_name='Функция',
|
147
|
+
),
|
148
|
+
),
|
149
|
+
(
|
150
|
+
'previous',
|
151
|
+
models.ForeignKey(
|
152
|
+
blank=True,
|
153
|
+
null=True,
|
154
|
+
on_delete=django.db.models.deletion.CASCADE,
|
155
|
+
to='edu_rdm_integration_collect_data_stage.collectingexporteddatasubstage',
|
156
|
+
verbose_name='Предыдущий сбор данных',
|
157
|
+
),
|
158
|
+
),
|
159
|
+
(
|
160
|
+
'stage',
|
161
|
+
models.ForeignKey(
|
162
|
+
on_delete=django.db.models.deletion.PROTECT,
|
163
|
+
to='edu_rdm_integration_collect_data_stage.collectingexporteddatastage',
|
164
|
+
verbose_name='Этап подготовки данных для экспорта',
|
165
|
+
),
|
166
|
+
),
|
167
|
+
(
|
168
|
+
'status',
|
169
|
+
models.ForeignKey(
|
170
|
+
default='CREATED',
|
171
|
+
on_delete=django.db.models.deletion.PROTECT,
|
172
|
+
to='edu_rdm_integration_collect_data_stage.collectingdatasubstagestatus',
|
173
|
+
verbose_name='Статус',
|
174
|
+
),
|
175
|
+
),
|
176
|
+
],
|
177
|
+
options={
|
178
|
+
'verbose_name': 'Подэтап формирования данных для выгрузки',
|
179
|
+
'verbose_name_plural': 'Подэтапы формирования данных для выгрузки',
|
180
|
+
'db_table': 'rdm_collecting_exported_data_sub_stage',
|
181
|
+
},
|
182
|
+
bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
|
183
|
+
),
|
184
|
+
],
|
185
|
+
database_operations=[],
|
186
|
+
),
|
187
|
+
]
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# Generated by Django 3.2.24 on 2025-06-28 14:09
|
2
|
+
|
3
|
+
import uuid
|
4
|
+
|
5
|
+
import django.db.models.deletion
|
6
|
+
import django.utils.timezone
|
7
|
+
from django.db import (
|
8
|
+
migrations,
|
9
|
+
models,
|
10
|
+
)
|
11
|
+
|
12
|
+
import educommon.django.db.mixins
|
13
|
+
|
14
|
+
import edu_rdm_integration.core.utils
|
15
|
+
|
16
|
+
|
17
|
+
class Migration(migrations.Migration):
|
18
|
+
dependencies = [
|
19
|
+
('edu_rdm_integration_models', '0001_initial'),
|
20
|
+
('async_task', '0003_alter_runningtask_options'),
|
21
|
+
('edu_rdm_integration_collect_data_stage', '0001_initial'),
|
22
|
+
]
|
23
|
+
|
24
|
+
operations = [
|
25
|
+
migrations.SeparateDatabaseAndState(
|
26
|
+
state_operations=[
|
27
|
+
migrations.CreateModel(
|
28
|
+
name='EduRdmCollectDataCommandProgress',
|
29
|
+
fields=[
|
30
|
+
(
|
31
|
+
'id',
|
32
|
+
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
33
|
+
),
|
34
|
+
(
|
35
|
+
'created',
|
36
|
+
models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата создания'),
|
37
|
+
),
|
38
|
+
(
|
39
|
+
'logs_period_started_at',
|
40
|
+
models.DateTimeField(verbose_name='Левая граница периода обрабатываемых логов'),
|
41
|
+
),
|
42
|
+
(
|
43
|
+
'logs_period_ended_at',
|
44
|
+
models.DateTimeField(verbose_name='Правая граница периода обрабатываемых логов'),
|
45
|
+
),
|
46
|
+
('generation_id', models.UUIDField(default=uuid.uuid4, verbose_name='Идентификатор генерации')),
|
47
|
+
(
|
48
|
+
'institute_ids',
|
49
|
+
models.JSONField(blank=True, default=list, null=True, verbose_name='id учебного заведения'),
|
50
|
+
),
|
51
|
+
(
|
52
|
+
'logs_link',
|
53
|
+
models.FileField(
|
54
|
+
max_length=255,
|
55
|
+
upload_to=edu_rdm_integration.core.utils.get_data_command_progress_attachment_path,
|
56
|
+
verbose_name='Ссылка на файл логов',
|
57
|
+
),
|
58
|
+
),
|
59
|
+
(
|
60
|
+
'type',
|
61
|
+
models.PositiveSmallIntegerField(
|
62
|
+
choices=[(1, 'Автоматический'), (2, 'Ручной')], verbose_name='Тип команды'
|
63
|
+
),
|
64
|
+
),
|
65
|
+
(
|
66
|
+
'model',
|
67
|
+
models.ForeignKey(
|
68
|
+
on_delete=django.db.models.deletion.PROTECT,
|
69
|
+
to='edu_rdm_integration_models.regionaldatamartmodelenum',
|
70
|
+
verbose_name='Модель РВД',
|
71
|
+
),
|
72
|
+
),
|
73
|
+
(
|
74
|
+
'stage',
|
75
|
+
models.ForeignKey(
|
76
|
+
blank=True,
|
77
|
+
null=True,
|
78
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
79
|
+
to='edu_rdm_integration_collect_data_stage.collectingexporteddatastage',
|
80
|
+
verbose_name='Этап формирования данных для выгрузки',
|
81
|
+
),
|
82
|
+
),
|
83
|
+
(
|
84
|
+
'task',
|
85
|
+
models.ForeignKey(
|
86
|
+
blank=True,
|
87
|
+
null=True,
|
88
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
89
|
+
to='async_task.runningtask',
|
90
|
+
verbose_name='Асинхронная задача',
|
91
|
+
),
|
92
|
+
),
|
93
|
+
],
|
94
|
+
options={
|
95
|
+
'verbose_name': 'Задача по сбору данных',
|
96
|
+
'verbose_name_plural': 'Задачи по сбору данных',
|
97
|
+
'db_table': 'edu_rdm_collecting_data_command_progress',
|
98
|
+
'abstract': False,
|
99
|
+
},
|
100
|
+
bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
|
101
|
+
),
|
102
|
+
],
|
103
|
+
database_operations=[],
|
104
|
+
),
|
105
|
+
]
|
File without changes
|
@@ -0,0 +1,56 @@
|
|
1
|
+
from educommon.async_task.models import (
|
2
|
+
AsyncTaskType,
|
3
|
+
)
|
4
|
+
|
5
|
+
from edu_rdm_integration.core.consts import (
|
6
|
+
TASK_QUEUE_NAME,
|
7
|
+
)
|
8
|
+
from edu_rdm_integration.core.helpers import (
|
9
|
+
save_command_log_link,
|
10
|
+
)
|
11
|
+
from edu_rdm_integration.stages.collect_data.models import (
|
12
|
+
EduRdmCollectDataCommandProgress,
|
13
|
+
)
|
14
|
+
from edu_rdm_integration.stages.collect_data.operations import (
|
15
|
+
BaseCollectModelsDataByGeneratingLogs,
|
16
|
+
)
|
17
|
+
|
18
|
+
|
19
|
+
class CollectCommandMixin:
|
20
|
+
"""Класс-примесь для запуска команды сборки моделей."""
|
21
|
+
|
22
|
+
queue = TASK_QUEUE_NAME
|
23
|
+
routing_key = TASK_QUEUE_NAME
|
24
|
+
description = 'Сбор данных моделей РВД'
|
25
|
+
task_type = AsyncTaskType.SYSTEM
|
26
|
+
|
27
|
+
def get_collect_command(self, command_id: int) -> EduRdmCollectDataCommandProgress:
|
28
|
+
"""Возвращает экземпляр модели команды запуска."""
|
29
|
+
command = EduRdmCollectDataCommandProgress.objects.get(id=command_id)
|
30
|
+
|
31
|
+
return command
|
32
|
+
|
33
|
+
def get_collect_models_class(self):
|
34
|
+
"""Возвращает класс для сбора данных."""
|
35
|
+
return BaseCollectModelsDataByGeneratingLogs
|
36
|
+
|
37
|
+
def run_collect_command(self, command) -> None:
|
38
|
+
"""Запуск команды сбора."""
|
39
|
+
collect_models_data_class = self.get_collect_models_class()
|
40
|
+
collect_models_data_class(
|
41
|
+
models=(command.model_id,),
|
42
|
+
logs_period_started_at=command.logs_period_started_at,
|
43
|
+
logs_period_ended_at=command.logs_period_ended_at,
|
44
|
+
command_id=command.id,
|
45
|
+
institute_ids=tuple(command.institute_ids or ()),
|
46
|
+
).collect()
|
47
|
+
|
48
|
+
def save_collect_command_logs(self, command_id: int, log_dir: str):
|
49
|
+
"""Сохранение ссылки на файл логов в команде."""
|
50
|
+
try:
|
51
|
+
command = self.get_collect_command(command_id)
|
52
|
+
except EduRdmCollectDataCommandProgress.DoesNotExist:
|
53
|
+
command = None
|
54
|
+
|
55
|
+
if command:
|
56
|
+
save_command_log_link(command, log_dir)
|
@@ -0,0 +1,318 @@
|
|
1
|
+
import uuid
|
2
|
+
from datetime import (
|
3
|
+
datetime,
|
4
|
+
)
|
5
|
+
|
6
|
+
from django.db.models import (
|
7
|
+
CASCADE,
|
8
|
+
PROTECT,
|
9
|
+
SET_NULL,
|
10
|
+
DateTimeField,
|
11
|
+
FileField,
|
12
|
+
ForeignKey,
|
13
|
+
JSONField,
|
14
|
+
PositiveSmallIntegerField,
|
15
|
+
UUIDField,
|
16
|
+
)
|
17
|
+
from django.utils import (
|
18
|
+
timezone,
|
19
|
+
)
|
20
|
+
from m3.db import (
|
21
|
+
BaseObjectModel,
|
22
|
+
)
|
23
|
+
|
24
|
+
from educommon.django.db.mixins import (
|
25
|
+
ReprStrPreModelMixin,
|
26
|
+
)
|
27
|
+
from educommon.utils.date import (
|
28
|
+
get_today_max_datetime,
|
29
|
+
get_today_min_datetime,
|
30
|
+
)
|
31
|
+
from function_tools.models import (
|
32
|
+
Entity,
|
33
|
+
)
|
34
|
+
from m3_db_utils.models import (
|
35
|
+
ModelEnumValue,
|
36
|
+
TitledModelEnum,
|
37
|
+
)
|
38
|
+
|
39
|
+
from edu_rdm_integration.core.enums import (
|
40
|
+
CommandType,
|
41
|
+
)
|
42
|
+
from edu_rdm_integration.core.utils import (
|
43
|
+
get_data_command_progress_attachment_path,
|
44
|
+
)
|
45
|
+
|
46
|
+
|
47
|
+
class CollectingDataStageStatus(TitledModelEnum):
|
48
|
+
"""Статус этапа сбора данных."""
|
49
|
+
|
50
|
+
CREATED = ModelEnumValue(
|
51
|
+
title='Создан',
|
52
|
+
)
|
53
|
+
|
54
|
+
IN_PROGRESS = ModelEnumValue(
|
55
|
+
title='В процессе сбора',
|
56
|
+
)
|
57
|
+
|
58
|
+
FAILED = ModelEnumValue(
|
59
|
+
title='Завершено с ошибками',
|
60
|
+
)
|
61
|
+
|
62
|
+
FINISHED = ModelEnumValue(
|
63
|
+
title='Завершено',
|
64
|
+
)
|
65
|
+
|
66
|
+
class Meta:
|
67
|
+
db_table = 'rdm_collecting_data_stage_status'
|
68
|
+
verbose_name = 'Модель-перечисление статусов этапа сбора данных'
|
69
|
+
verbose_name_plural = 'Модели-перечисления статусов этапов сбора данных'
|
70
|
+
|
71
|
+
|
72
|
+
class CollectingExportedDataStage(ReprStrPreModelMixin, BaseObjectModel):
|
73
|
+
"""Этап подготовки данных в рамках Функций. За работу Функции отвечает ранер менеджер."""
|
74
|
+
|
75
|
+
manager = ForeignKey(
|
76
|
+
to='function_tools.Entity',
|
77
|
+
verbose_name='Менеджер ранера Функции',
|
78
|
+
on_delete=PROTECT,
|
79
|
+
null=True,
|
80
|
+
blank=True,
|
81
|
+
)
|
82
|
+
|
83
|
+
logs_period_started_at = DateTimeField(
|
84
|
+
'Левая граница периода обрабатываемых логов',
|
85
|
+
db_index=True,
|
86
|
+
default=get_today_min_datetime,
|
87
|
+
)
|
88
|
+
|
89
|
+
logs_period_ended_at = DateTimeField(
|
90
|
+
'Правая граница периода обрабатываемых логов',
|
91
|
+
db_index=True,
|
92
|
+
default=get_today_max_datetime,
|
93
|
+
)
|
94
|
+
|
95
|
+
started_at = DateTimeField(
|
96
|
+
'Время начала сбора данных',
|
97
|
+
auto_now_add=True,
|
98
|
+
db_index=True,
|
99
|
+
)
|
100
|
+
|
101
|
+
ended_at = DateTimeField(
|
102
|
+
'Время завершения сбора данных',
|
103
|
+
null=True,
|
104
|
+
blank=True,
|
105
|
+
db_index=True,
|
106
|
+
)
|
107
|
+
|
108
|
+
status = ForeignKey(
|
109
|
+
to='edu_rdm_integration_collect_data_stage.CollectingDataStageStatus',
|
110
|
+
verbose_name='Статус',
|
111
|
+
on_delete=PROTECT,
|
112
|
+
default=CollectingDataStageStatus.CREATED.key,
|
113
|
+
)
|
114
|
+
|
115
|
+
class Meta:
|
116
|
+
db_table = 'rdm_collecting_exported_data_stage'
|
117
|
+
verbose_name = 'Этап формирования данных для выгрузки'
|
118
|
+
verbose_name_plural = 'Этапы формирования данных для выгрузки'
|
119
|
+
|
120
|
+
@property
|
121
|
+
def attrs_for_repr_str(self):
|
122
|
+
"""Список атрибутов для отображения экземпляра модели."""
|
123
|
+
return ['manager_id', 'logs_period_started_at', 'logs_period_ended_at', 'started_at', 'ended_at', 'status_id']
|
124
|
+
|
125
|
+
def save(self, *args, **kwargs):
|
126
|
+
"""Сохранение этапа сбора данных модели РВД."""
|
127
|
+
if (
|
128
|
+
self.status_id in (CollectingDataStageStatus.FAILED.key, CollectingDataStageStatus.FINISHED.key)
|
129
|
+
and not self.ended_at
|
130
|
+
):
|
131
|
+
self.ended_at = datetime.now()
|
132
|
+
|
133
|
+
super().save(*args, **kwargs)
|
134
|
+
|
135
|
+
|
136
|
+
class CollectingDataSubStageStatus(TitledModelEnum):
|
137
|
+
"""Статус этапа сбора данных."""
|
138
|
+
|
139
|
+
CREATED = ModelEnumValue(
|
140
|
+
title='Создан',
|
141
|
+
)
|
142
|
+
|
143
|
+
IN_PROGRESS = ModelEnumValue(
|
144
|
+
title='В процессе сбора',
|
145
|
+
)
|
146
|
+
|
147
|
+
READY_TO_EXPORT = ModelEnumValue(
|
148
|
+
title='Готово к выгрузке',
|
149
|
+
)
|
150
|
+
|
151
|
+
FAILED = ModelEnumValue(
|
152
|
+
title='Завершено с ошибками',
|
153
|
+
)
|
154
|
+
|
155
|
+
EXPORTED = ModelEnumValue(
|
156
|
+
title='Выгружено',
|
157
|
+
)
|
158
|
+
|
159
|
+
NOT_EXPORTED = ModelEnumValue(
|
160
|
+
title='Не выгружено',
|
161
|
+
)
|
162
|
+
|
163
|
+
class Meta:
|
164
|
+
db_table = 'rdm_collecting_data_sub_stage_status'
|
165
|
+
verbose_name = 'Модель-перечисление статусов подэтапа сбора данных'
|
166
|
+
verbose_name_plural = 'Модели-перечисления статусов подэтапов сбора данных'
|
167
|
+
|
168
|
+
|
169
|
+
class CollectingExportedDataSubStage(ReprStrPreModelMixin, BaseObjectModel):
|
170
|
+
"""Подэтап сбора данных для сущностей в рамках функции."""
|
171
|
+
|
172
|
+
stage = ForeignKey(
|
173
|
+
to=CollectingExportedDataStage,
|
174
|
+
verbose_name='Этап подготовки данных для экспорта',
|
175
|
+
on_delete=PROTECT,
|
176
|
+
)
|
177
|
+
|
178
|
+
function = ForeignKey(
|
179
|
+
to=Entity,
|
180
|
+
verbose_name='Функция',
|
181
|
+
on_delete=PROTECT,
|
182
|
+
)
|
183
|
+
|
184
|
+
started_at = DateTimeField(
|
185
|
+
'Время начала сбора данных',
|
186
|
+
auto_now_add=True,
|
187
|
+
db_index=True,
|
188
|
+
)
|
189
|
+
|
190
|
+
ended_at = DateTimeField(
|
191
|
+
'Время завершения сбора данных',
|
192
|
+
null=True,
|
193
|
+
blank=True,
|
194
|
+
db_index=True,
|
195
|
+
)
|
196
|
+
|
197
|
+
previous = ForeignKey(
|
198
|
+
'self',
|
199
|
+
null=True,
|
200
|
+
blank=True,
|
201
|
+
verbose_name='Предыдущий сбор данных',
|
202
|
+
on_delete=CASCADE,
|
203
|
+
)
|
204
|
+
|
205
|
+
status = ForeignKey(
|
206
|
+
to='edu_rdm_integration_collect_data_stage.CollectingDataSubStageStatus',
|
207
|
+
verbose_name='Статус',
|
208
|
+
on_delete=PROTECT,
|
209
|
+
default=CollectingDataSubStageStatus.CREATED.key,
|
210
|
+
)
|
211
|
+
|
212
|
+
class Meta:
|
213
|
+
db_table = 'rdm_collecting_exported_data_sub_stage'
|
214
|
+
verbose_name = 'Подэтап формирования данных для выгрузки'
|
215
|
+
verbose_name_plural = 'Подэтапы формирования данных для выгрузки'
|
216
|
+
|
217
|
+
@property
|
218
|
+
def attrs_for_repr_str(self):
|
219
|
+
"""Список атрибутов для отображения экземпляра модели."""
|
220
|
+
return ['stage_id', 'function_id', 'started_at', 'ended_at', 'previous_id', 'status_id']
|
221
|
+
|
222
|
+
def save(self, *args, **kwargs):
|
223
|
+
"""Сохранение подэтапа сбора данных."""
|
224
|
+
if (
|
225
|
+
self.status_id
|
226
|
+
in (CollectingDataSubStageStatus.FAILED.key, CollectingDataSubStageStatus.READY_TO_EXPORT.key)
|
227
|
+
and not self.ended_at
|
228
|
+
):
|
229
|
+
self.ended_at = datetime.now()
|
230
|
+
|
231
|
+
super().save(*args, **kwargs)
|
232
|
+
|
233
|
+
|
234
|
+
class AbstractCollectDataCommandProgress(ReprStrPreModelMixin, BaseObjectModel):
|
235
|
+
"""Модель, хранящая данные для формирования и отслеживания асинхронных задач по сбору данных.
|
236
|
+
|
237
|
+
В реализации необходимо определить поля:
|
238
|
+
1. Ссылку на асинхронную задачу, например:
|
239
|
+
task = ForeignKey(
|
240
|
+
to=RunningTask,
|
241
|
+
verbose_name='Асинхронная задача',
|
242
|
+
blank=True, null=True,
|
243
|
+
on_delete=SET_NULL,
|
244
|
+
)
|
245
|
+
2. Поле хранения лога:
|
246
|
+
logs_link = FileField(
|
247
|
+
upload_to=upload_file_handler,
|
248
|
+
max_length=255,
|
249
|
+
verbose_name='Ссылка на файл логов',
|
250
|
+
)
|
251
|
+
"""
|
252
|
+
|
253
|
+
task = ...
|
254
|
+
|
255
|
+
logs_link = ...
|
256
|
+
|
257
|
+
stage = ForeignKey(
|
258
|
+
to='edu_rdm_integration_collect_data_stage.CollectingExportedDataStage',
|
259
|
+
verbose_name='Этап формирования данных для выгрузки',
|
260
|
+
blank=True,
|
261
|
+
null=True,
|
262
|
+
on_delete=SET_NULL,
|
263
|
+
)
|
264
|
+
model = ForeignKey(
|
265
|
+
to='edu_rdm_integration_models.RegionalDataMartModelEnum',
|
266
|
+
verbose_name='Модель РВД',
|
267
|
+
on_delete=PROTECT,
|
268
|
+
)
|
269
|
+
created = DateTimeField(
|
270
|
+
verbose_name='Дата создания',
|
271
|
+
default=timezone.now,
|
272
|
+
)
|
273
|
+
logs_period_started_at = DateTimeField(
|
274
|
+
'Левая граница периода обрабатываемых логов',
|
275
|
+
)
|
276
|
+
logs_period_ended_at = DateTimeField(
|
277
|
+
'Правая граница периода обрабатываемых логов',
|
278
|
+
)
|
279
|
+
generation_id = UUIDField(
|
280
|
+
'Идентификатор генерации',
|
281
|
+
default=uuid.uuid4,
|
282
|
+
)
|
283
|
+
institute_ids = JSONField(
|
284
|
+
'id учебного заведения',
|
285
|
+
blank=True,
|
286
|
+
null=True,
|
287
|
+
default=list,
|
288
|
+
)
|
289
|
+
|
290
|
+
class Meta:
|
291
|
+
abstract = True
|
292
|
+
db_table = 'rdm_collecting_data_command_progress'
|
293
|
+
verbose_name = 'Задача по сбору данных'
|
294
|
+
verbose_name_plural = 'Задачи по сбору данных'
|
295
|
+
|
296
|
+
|
297
|
+
class EduRdmCollectDataCommandProgress(AbstractCollectDataCommandProgress):
|
298
|
+
"""Модель, хранящая данные для формирования и отслеживания асинхронных задач по сбору данных."""
|
299
|
+
|
300
|
+
task = ForeignKey(
|
301
|
+
to='async_task.RunningTask',
|
302
|
+
verbose_name='Асинхронная задача',
|
303
|
+
blank=True,
|
304
|
+
null=True,
|
305
|
+
on_delete=SET_NULL,
|
306
|
+
)
|
307
|
+
logs_link = FileField(
|
308
|
+
upload_to=get_data_command_progress_attachment_path,
|
309
|
+
max_length=255,
|
310
|
+
verbose_name='Ссылка на файл логов',
|
311
|
+
)
|
312
|
+
type = PositiveSmallIntegerField( # noqa: A003
|
313
|
+
verbose_name='Тип команды',
|
314
|
+
choices=CommandType.get_choices(),
|
315
|
+
)
|
316
|
+
|
317
|
+
class Meta(AbstractCollectDataCommandProgress.Meta):
|
318
|
+
db_table = 'edu_rdm_collecting_data_command_progress'
|