edu-rdm-integration 3.9.2__py3-none-any.whl → 3.10.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- edu_rdm_integration/__init__.py +0 -1
- edu_rdm_integration/adapters/apps.py +15 -2
- edu_rdm_integration/adapters/caches.py +25 -12
- edu_rdm_integration/adapters/errors.py +13 -2
- edu_rdm_integration/adapters/functions.py +53 -14
- edu_rdm_integration/adapters/helpers.py +34 -8
- edu_rdm_integration/adapters/managers.py +41 -5
- edu_rdm_integration/adapters/presenters.py +26 -2
- edu_rdm_integration/adapters/receivers.py +16 -2
- edu_rdm_integration/adapters/results.py +50 -4
- edu_rdm_integration/adapters/runners.py +79 -20
- edu_rdm_integration/adapters/strategies.py +56 -54
- edu_rdm_integration/adapters/validators.py +43 -4
- edu_rdm_integration/apps.py +3 -23
- edu_rdm_integration/collect_and_export_data/__init__.py +1 -1
- edu_rdm_integration/collect_and_export_data/apps.py +1 -0
- edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +107 -17
- edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +4 -2
- edu_rdm_integration/{consts.py → core/consts.py} +0 -11
- edu_rdm_integration/{enums.py → core/enums.py} +7 -54
- edu_rdm_integration/core/helpers.py +331 -0
- edu_rdm_integration/core/operations.py +71 -0
- edu_rdm_integration/core/redis_cache.py +20 -0
- edu_rdm_integration/{collect_and_export_data → core/registry}/actions.py +6 -12
- edu_rdm_integration/core/registry/apps.py +11 -0
- edu_rdm_integration/{collect_and_export_data → core/registry}/ui.py +1 -1
- edu_rdm_integration/{storages.py → core/storages.py} +8 -17
- edu_rdm_integration/{utils.py → core/utils.py} +29 -91
- edu_rdm_integration/migrations/0001_initial.py +294 -44
- edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +1 -3
- edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -1
- edu_rdm_integration/migrations/0004_uploaderclientlog.py +1 -2
- edu_rdm_integration/migrations/0005_auto_20231204_1224.py +16 -4
- edu_rdm_integration/migrations/0006_request_status_data.py +60 -58
- edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -1
- edu_rdm_integration/migrations/0009_auto_20240522_1619.py +1 -5
- edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -1
- edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +16 -3
- edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -1
- edu_rdm_integration/migrations/0013_set_attachment_size.py +8 -12
- edu_rdm_integration/migrations/0014_uploaddatacommand.py +33 -6
- edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +1 -5
- edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +2 -2
- edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +3 -2
- edu_rdm_integration/migrations/__init__.py +1 -0
- edu_rdm_integration/{registry → pipelines/transfer}/actions.py +13 -26
- edu_rdm_integration/pipelines/transfer/app_meta.py +18 -0
- edu_rdm_integration/pipelines/transfer/apps.py +19 -0
- edu_rdm_integration/pipelines/transfer/enums.py +34 -0
- edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +57 -0
- edu_rdm_integration/{base.py → pipelines/transfer/mixins.py} +29 -53
- edu_rdm_integration/pipelines/transfer/models.py +48 -0
- edu_rdm_integration/{tasks.py → pipelines/transfer/tasks.py} +51 -150
- edu_rdm_integration/{registry → pipelines/transfer}/ui.py +4 -10
- edu_rdm_integration/rdm_entities/apps.py +11 -0
- edu_rdm_integration/{entities.py → rdm_entities/entities.py} +67 -57
- edu_rdm_integration/rdm_entities/migrations/0001_initial.py +44 -0
- edu_rdm_integration/{enum_register → rdm_entities}/mixins.py +8 -59
- edu_rdm_integration/rdm_entities/models.py +63 -0
- edu_rdm_integration/rdm_entities/utils.py +33 -0
- edu_rdm_integration/rdm_models/apps.py +16 -0
- edu_rdm_integration/rdm_models/migrations/0001_initial.py +40 -0
- edu_rdm_integration/rdm_models/mixins.py +67 -0
- edu_rdm_integration/rdm_models/models.py +73 -0
- edu_rdm_integration/rdm_models/utils.py +23 -0
- edu_rdm_integration/stages/collect_data/apps.py +11 -0
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/functions.py-tpl +2 -2
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/managers.py-tpl +1 -1
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/runners.py-tpl +1 -1
- edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/tests.py-tpl +2 -1
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/caches.py +2 -2
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/functions.py +15 -18
- edu_rdm_integration/stages/collect_data/functions/base/helpers.py +20 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/managers.py +20 -27
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/mixins.py +38 -55
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/runners.py +2 -5
- edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/caches.py +3 -7
- edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +7 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/functions.py +8 -16
- edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +24 -0
- edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +19 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/presenters.py +1 -3
- edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +12 -0
- edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +28 -0
- edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +20 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/strategies.py +32 -70
- edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/caches.py +13 -22
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +7 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/functions.py +8 -16
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +24 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +19 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/presenters.py +1 -3
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +12 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +28 -0
- edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +20 -0
- edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/strategies.py +32 -70
- edu_rdm_integration/{collect_data → stages/collect_data}/generators.py +9 -14
- edu_rdm_integration/stages/collect_data/helpers.py +154 -0
- edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
- edu_rdm_integration/stages/collect_data/management/base.py +100 -0
- edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
- edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_latest_models_data.py +5 -7
- edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_models_data.py +5 -7
- edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +187 -0
- edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +105 -0
- edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/collect_data/mixins.py +56 -0
- edu_rdm_integration/stages/collect_data/models.py +318 -0
- edu_rdm_integration/{collect_data/collect.py → stages/collect_data/operations.py} +30 -43
- edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
- edu_rdm_integration/{collect_data → stages/collect_data/registry}/actions.py +17 -20
- edu_rdm_integration/stages/collect_data/registry/apps.py +11 -0
- edu_rdm_integration/{collect_data → stages/collect_data/registry}/ui.py +8 -15
- edu_rdm_integration/{collect_data → stages/collect_data}/tests.py +2 -2
- edu_rdm_integration/stages/export_data/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/apps.py +11 -0
- edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
- edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/functions.py-tpl +2 -2
- edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/managers.py-tpl +2 -2
- edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/runners.py-tpl +2 -2
- edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/caches.py +3 -8
- edu_rdm_integration/stages/export_data/functions/base/errors.py +7 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/functions.py +28 -59
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/helpers.py +7 -17
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/managers.py +19 -28
- edu_rdm_integration/stages/export_data/functions/base/presenters.py +11 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/requests.py +13 -40
- edu_rdm_integration/stages/export_data/functions/base/results.py +12 -0
- edu_rdm_integration/{export_data → stages/export_data/functions}/base/runners.py +9 -21
- edu_rdm_integration/stages/export_data/functions/base/validators.py +20 -0
- edu_rdm_integration/{export_data → stages/export_data}/generators.py +7 -6
- edu_rdm_integration/stages/export_data/helpers.py +203 -0
- edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/management/base.py +101 -0
- edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
- edu_rdm_integration/{management → stages/export_data/management}/commands/export_entities_data.py +5 -7
- edu_rdm_integration/{management → stages/export_data/management}/commands/export_latest_entities_data.py +5 -7
- edu_rdm_integration/stages/export_data/migrations/0001_initial.py +324 -0
- edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/export_data/mixins.py +50 -0
- edu_rdm_integration/stages/export_data/models.py +362 -0
- edu_rdm_integration/{export_data/export.py → stages/export_data/operations.py} +13 -152
- edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
- edu_rdm_integration/{export_data → stages/export_data/registry}/actions.py +18 -18
- edu_rdm_integration/stages/export_data/registry/apps.py +11 -0
- edu_rdm_integration/{export_data → stages/export_data/registry}/ui.py +5 -7
- edu_rdm_integration/{export_data → stages/export_data}/strategies.py +30 -68
- edu_rdm_integration/stages/service/__init__.py +0 -0
- edu_rdm_integration/stages/service/apps.py +19 -0
- edu_rdm_integration/stages/service/tasks.py +63 -0
- edu_rdm_integration/stages/upload_data/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/apps.py +19 -0
- edu_rdm_integration/stages/upload_data/consts.py +10 -0
- edu_rdm_integration/{export_data → stages/upload_data}/dataclasses.py +1 -0
- edu_rdm_integration/stages/upload_data/enums.py +17 -0
- edu_rdm_integration/{export_data/export_manager.py → stages/upload_data/export_managers.py} +73 -68
- edu_rdm_integration/stages/upload_data/helpers.py +164 -0
- edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/management/base.py +134 -0
- edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
- edu_rdm_integration/{management → stages/upload_data/management}/commands/async_fix_attachment_size.py +32 -54
- edu_rdm_integration/{management → stages/upload_data/management}/commands/check_upload_status.py +7 -6
- edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_status.py +3 -3
- edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_upload.py +4 -4
- edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +161 -0
- edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/models.py +175 -0
- edu_rdm_integration/stages/upload_data/operations.py +156 -0
- edu_rdm_integration/{export_data/queue.py → stages/upload_data/queues.py} +10 -8
- edu_rdm_integration/stages/upload_data/tasks.py +103 -0
- edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
- edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/actions.py +14 -16
- edu_rdm_integration/stages/upload_data/uploader_log/apps.py +11 -0
- edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/managers.py +15 -30
- edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +31 -0
- edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
- edu_rdm_integration/stages/upload_data/uploader_log/models.py +86 -0
- edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/ui.py +8 -6
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/METADATA +238 -238
- edu_rdm_integration-3.10.0.dist-info/RECORD +255 -0
- edu_rdm_integration/app_meta.py +0 -16
- edu_rdm_integration/app_settings.py +0 -77
- edu_rdm_integration/collect_and_export_data/models.py +0 -67
- edu_rdm_integration/collect_and_export_data/utils.py +0 -224
- edu_rdm_integration/collect_data/base/helpers.py +0 -26
- edu_rdm_integration/collect_data/calculated/base/errors.py +0 -9
- edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -32
- edu_rdm_integration/collect_data/calculated/base/managers.py +0 -23
- edu_rdm_integration/collect_data/calculated/base/results.py +0 -16
- edu_rdm_integration/collect_data/calculated/base/runners.py +0 -36
- edu_rdm_integration/collect_data/calculated/base/validators.py +0 -28
- edu_rdm_integration/collect_data/helpers.py +0 -92
- edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -9
- edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -32
- edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -23
- edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -16
- edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -36
- edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -28
- edu_rdm_integration/enum_register/register.py +0 -79
- edu_rdm_integration/export_data/base/errors.py +0 -9
- edu_rdm_integration/export_data/base/presenters.py +0 -13
- edu_rdm_integration/export_data/base/results.py +0 -16
- edu_rdm_integration/export_data/base/validators.py +0 -28
- edu_rdm_integration/export_data/helpers.py +0 -92
- edu_rdm_integration/helpers.py +0 -412
- edu_rdm_integration/management/general.py +0 -327
- edu_rdm_integration/models.py +0 -982
- edu_rdm_integration/redis_cache.py +0 -51
- edu_rdm_integration/uploader_log/apps.py +0 -10
- edu_rdm_integration-3.9.2.dist-info/RECORD +0 -198
- /edu_rdm_integration/{collect_and_export_data/migrations → core}/__init__.py +0 -0
- /edu_rdm_integration/{mapping.py → core/mapping.py} +0 -0
- /edu_rdm_integration/{collect_data → core/registry}/__init__.py +0 -0
- /edu_rdm_integration/{templates → core/registry/templates}/ui-js/start-task.js +0 -0
- /edu_rdm_integration/{signals.py → core/signals.py} +0 -0
- /edu_rdm_integration/{typing.py → core/typing.py} +0 -0
- /edu_rdm_integration/{collect_data/base → pipelines}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/calculated → pipelines/transfer}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/calculated/base → pipelines/transfer/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{templates → pipelines/transfer/templates}/ui-js/transferred-entity-list.js +0 -0
- /edu_rdm_integration/{collect_data/non_calculated → rdm_entities}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/non_calculated/base → rdm_entities/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{enum_register → rdm_models}/__init__.py +0 -0
- /edu_rdm_integration/{export_data → rdm_models/migrations}/__init__.py +0 -0
- /edu_rdm_integration/{export_data/base → stages}/__init__.py +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data/const.py → stages/collect_data/consts.py} +0 -0
- /edu_rdm_integration/{management → stages/collect_data/function_templates}/__init__.py +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/__init__.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/apps.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/caches.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/consts.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/enums.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/errors.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/helpers.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/presenters.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/results.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/strings.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/collect_data/function_templates}/function_collect_data_template/validators.py-tpl +0 -0
- /edu_rdm_integration/{management/commands → stages/collect_data/functions}/__init__.py +0 -0
- /edu_rdm_integration/{registry → stages/collect_data/functions/base}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/base/consts.py +0 -0
- /edu_rdm_integration/{uploader_log → stages/collect_data/functions/calculated}/__init__.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/consts.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/enums.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/strings.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/calculated/base/tests.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/consts.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/enums.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/strings.py +0 -0
- /edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/base/tests.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data}/consts.py +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/__init__.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/apps.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/caches.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/consts.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/enums.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/errors.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/helpers.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/presenters.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/results.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/strings.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/tests.py-tpl +0 -0
- /edu_rdm_integration/{function_templates → stages/export_data/function_templates}/function_export_data_template/validators.py-tpl +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/consts.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/enums.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/strings.py +0 -0
- /edu_rdm_integration/{export_data → stages/export_data/functions}/base/tests.py +0 -0
- /edu_rdm_integration/{templates → stages/export_data/registry/templates}/ui-js/stage_for_export.js +0 -0
- /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/enums.py +0 -0
- /edu_rdm_integration/{uploader_log → stages/upload_data/uploader_log}/templates/ui-js/object-grid-buttons.js +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/licenses/LICENSE +0 -0
- {edu_rdm_integration-3.9.2.dist-info → edu_rdm_integration-3.10.0.dist-info}/top_level.txt +0 -0
edu_rdm_integration/{collect_data → stages/collect_data/functions}/non_calculated/strategies.py
RENAMED
@@ -5,55 +5,53 @@ from typing import (
|
|
5
5
|
from edu_rdm_integration.adapters.strategies import (
|
6
6
|
WebEduSyncBaseRunnerLazySavingPredefinedQueueFunctionImplementationStrategy,
|
7
7
|
)
|
8
|
-
from edu_rdm_integration.
|
8
|
+
from edu_rdm_integration.core.consts import (
|
9
|
+
REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
|
10
|
+
)
|
11
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.caches import (
|
9
12
|
BaseCollectingExportedDataFunctionCacheStorage,
|
10
13
|
BaseCollectingExportedDataRunnerCacheStorage,
|
11
14
|
)
|
12
|
-
from edu_rdm_integration.collect_data.non_calculated.base.errors import (
|
15
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.errors import (
|
13
16
|
BaseCollectingExportedDataError,
|
14
17
|
)
|
15
|
-
from edu_rdm_integration.collect_data.non_calculated.base.functions import (
|
18
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.functions import (
|
16
19
|
BaseCollectingExportedDataFunction,
|
17
20
|
)
|
18
|
-
from edu_rdm_integration.collect_data.non_calculated.base.helpers import (
|
21
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.helpers import (
|
19
22
|
BaseCollectingExportedDataFunctionHelper,
|
20
23
|
BaseCollectingExportedDataRunnerHelper,
|
21
24
|
)
|
22
|
-
from edu_rdm_integration.collect_data.non_calculated.base.managers import (
|
25
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.managers import (
|
23
26
|
BaseCollectingExportedDataRunnerManager,
|
24
27
|
)
|
25
|
-
from edu_rdm_integration.collect_data.non_calculated.base.presenters import (
|
28
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.presenters import (
|
26
29
|
BaseCollectingExportedDataResultPresenter,
|
27
30
|
)
|
28
|
-
from edu_rdm_integration.collect_data.non_calculated.base.results import (
|
31
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.results import (
|
29
32
|
BaseCollectingExportedDataFunctionResult,
|
30
33
|
BaseCollectingExportedDataRunnerResult,
|
31
34
|
)
|
32
|
-
from edu_rdm_integration.collect_data.non_calculated.base.runners import (
|
35
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.runners import (
|
33
36
|
BaseCollectingExportedDataRunner,
|
34
37
|
)
|
35
|
-
from edu_rdm_integration.collect_data.non_calculated.base.validators import (
|
38
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.validators import (
|
36
39
|
BaseCollectingExportedDataFunctionValidator,
|
37
40
|
BaseCollectingExportedDataRunnerValidator,
|
38
41
|
)
|
39
|
-
from edu_rdm_integration.consts import (
|
40
|
-
REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
|
41
|
-
)
|
42
42
|
|
43
43
|
|
44
44
|
class CollectingExportedDataFunctionImplementationStrategy(
|
45
45
|
WebEduSyncBaseRunnerLazySavingPredefinedQueueFunctionImplementationStrategy,
|
46
46
|
):
|
47
|
-
"""
|
48
|
-
Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение.
|
47
|
+
"""Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение.
|
49
48
|
|
50
49
|
Используется для функций сбора данных для выгрузки в "Региональная витрина данных".
|
51
50
|
"""
|
52
51
|
|
53
52
|
@classmethod
|
54
53
|
def _prepare_uuid(cls):
|
55
|
-
"""
|
56
|
-
Получение UUID класса. Используется при регистрации сущности в базе данных.
|
54
|
+
"""Получение UUID класса. Используется при регистрации сущности в базе данных.
|
57
55
|
|
58
56
|
Если ничего не возвращает, то регистрация в БД не будет произведена.
|
59
57
|
"""
|
@@ -61,9 +59,7 @@ class CollectingExportedDataFunctionImplementationStrategy(
|
|
61
59
|
|
62
60
|
@classmethod
|
63
61
|
def _prepare_verbose_name(cls) -> str:
|
64
|
-
"""
|
65
|
-
Полное наименование для дальнейшей регистрации и отображения пользователю.
|
66
|
-
"""
|
62
|
+
"""Полное наименование для дальнейшей регистрации и отображения пользователю."""
|
67
63
|
return (
|
68
64
|
'Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение '
|
69
65
|
'функций сбора данных для выгрузки в "Региональная витрина данных"'
|
@@ -71,23 +67,17 @@ class CollectingExportedDataFunctionImplementationStrategy(
|
|
71
67
|
|
72
68
|
@classmethod
|
73
69
|
def _prepare_tags(cls) -> list[str]:
|
74
|
-
"""
|
75
|
-
Список тегов, по которым сущность можно будет осуществлять поиск.
|
76
|
-
"""
|
70
|
+
"""Список тегов, по которым сущность можно будет осуществлять поиск."""
|
77
71
|
return [REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA]
|
78
72
|
|
79
73
|
@classmethod
|
80
74
|
def _prepare_key(cls) -> str:
|
81
|
-
"""
|
82
|
-
Возвращает уникальный идентификатор стратегии создания функции.
|
83
|
-
"""
|
75
|
+
"""Возвращает уникальный идентификатор стратегии создания функции."""
|
84
76
|
return 'REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA'
|
85
77
|
|
86
78
|
@classmethod
|
87
79
|
def _prepare_title(cls) -> str:
|
88
|
-
"""
|
89
|
-
Возвращает название стратегии создания функции.
|
90
|
-
"""
|
80
|
+
"""Возвращает название стратегии создания функции."""
|
91
81
|
return (
|
92
82
|
'Стратегия создания функции с отложенным сохранением и предустановленной очередью объектов на сохранение '
|
93
83
|
'функций сбора данных для выгрузки в "Региональная витрина данных". Сохранение производится после удачной '
|
@@ -96,85 +86,57 @@ class CollectingExportedDataFunctionImplementationStrategy(
|
|
96
86
|
|
97
87
|
@classmethod
|
98
88
|
def _prepare_function_template_name(cls) -> Optional[str]:
|
99
|
-
"""
|
100
|
-
Формирование названия шаблона создания функции.
|
101
|
-
"""
|
89
|
+
"""Формирование названия шаблона создания функции."""
|
102
90
|
return 'function_collect_data_template'
|
103
91
|
|
104
92
|
def _prepare_manager_class(self):
|
105
|
-
"""
|
106
|
-
Устанавливает класс менеджера.
|
107
|
-
"""
|
93
|
+
"""Устанавливает класс менеджера."""
|
108
94
|
self._manager_class = BaseCollectingExportedDataRunnerManager
|
109
95
|
|
110
96
|
def _prepare_runner_class(self):
|
111
|
-
"""
|
112
|
-
Устанавливает класс ранера.
|
113
|
-
"""
|
97
|
+
"""Устанавливает класс ранера."""
|
114
98
|
self._runner_class = BaseCollectingExportedDataRunner
|
115
99
|
|
116
100
|
def _prepare_function_class(self):
|
117
|
-
"""
|
118
|
-
Устанавливает класс Функции.
|
119
|
-
"""
|
101
|
+
"""Устанавливает класс Функции."""
|
120
102
|
self._function_class = BaseCollectingExportedDataFunction
|
121
103
|
|
122
104
|
def _prepare_runner_helper_class(self):
|
123
|
-
"""
|
124
|
-
Устанавливает класс помощника ранера.
|
125
|
-
"""
|
105
|
+
"""Устанавливает класс помощника ранера."""
|
126
106
|
self._runner_helper_class = BaseCollectingExportedDataRunnerHelper
|
127
107
|
|
128
108
|
def _prepare_function_helper_class(self):
|
129
|
-
"""
|
130
|
-
Устанавливает класс помощника функции.
|
131
|
-
"""
|
109
|
+
"""Устанавливает класс помощника функции."""
|
132
110
|
self._function_helper_class = BaseCollectingExportedDataFunctionHelper
|
133
111
|
|
134
112
|
def _prepare_runner_validator_class(self):
|
135
|
-
"""
|
136
|
-
Устанавливает класс валидатора ранера.
|
137
|
-
"""
|
113
|
+
"""Устанавливает класс валидатора ранера."""
|
138
114
|
self._runner_validator_class = BaseCollectingExportedDataRunnerValidator
|
139
115
|
|
140
116
|
def _prepare_function_validator_class(self):
|
141
|
-
"""
|
142
|
-
Устанавливает класс валидатора Функции.
|
143
|
-
"""
|
117
|
+
"""Устанавливает класс валидатора Функции."""
|
144
118
|
self._function_validator_class = BaseCollectingExportedDataFunctionValidator
|
145
119
|
|
146
120
|
def _prepare_runner_cache_storage_class(self):
|
147
|
-
"""
|
148
|
-
Устанавливает класс хранилища кешей ранера.
|
149
|
-
"""
|
121
|
+
"""Устанавливает класс хранилища кешей ранера."""
|
150
122
|
self._runner_cache_storage_class = BaseCollectingExportedDataRunnerCacheStorage
|
151
123
|
|
152
124
|
def _prepare_function_cache_storage_class(self):
|
153
|
-
"""
|
154
|
-
Устанавливает класс хранилища кешей Функции.
|
155
|
-
"""
|
125
|
+
"""Устанавливает класс хранилища кешей Функции."""
|
156
126
|
self._function_cache_storage_class = BaseCollectingExportedDataFunctionCacheStorage
|
157
127
|
|
158
128
|
def _prepare_error_class(self):
|
159
|
-
"""
|
160
|
-
Устанавливает класс ошибки.
|
161
|
-
"""
|
129
|
+
"""Устанавливает класс ошибки."""
|
162
130
|
self._error_class = BaseCollectingExportedDataError
|
163
131
|
|
164
132
|
def _prepare_runner_result_class(self):
|
165
|
-
"""
|
166
|
-
Устанавливает класс результата.
|
167
|
-
"""
|
133
|
+
"""Устанавливает класс результата."""
|
168
134
|
self._runner_result_class = BaseCollectingExportedDataRunnerResult
|
169
135
|
|
170
136
|
def _prepare_function_result_class(self):
|
171
|
-
"""
|
172
|
-
Устанавливает класс результата.
|
173
|
-
"""
|
137
|
+
"""Устанавливает класс результата."""
|
174
138
|
self._function_result_class = BaseCollectingExportedDataFunctionResult
|
175
139
|
|
176
140
|
def _prepare_result_presenter_class(self):
|
177
|
-
"""
|
178
|
-
Устанавливает класс презентера результата.
|
179
|
-
"""
|
141
|
+
"""Устанавливает класс презентера результата."""
|
180
142
|
self._result_presenter_class = BaseCollectingExportedDataResultPresenter
|
@@ -29,18 +29,16 @@ from m3_db_utils.models import (
|
|
29
29
|
ModelEnumValue,
|
30
30
|
)
|
31
31
|
|
32
|
-
from edu_rdm_integration import (
|
33
|
-
|
34
|
-
)
|
35
|
-
from edu_rdm_integration.collect_data.const import (
|
36
|
-
ALL_UNITS_IN_COMMAND,
|
37
|
-
)
|
38
|
-
from edu_rdm_integration.consts import (
|
32
|
+
from edu_rdm_integration.core.consts import (
|
33
|
+
BATCH_SIZE,
|
39
34
|
DATE_FORMAT,
|
40
35
|
)
|
41
|
-
from edu_rdm_integration.models import (
|
36
|
+
from edu_rdm_integration.rdm_models.models import (
|
42
37
|
RegionalDataMartModelEnum,
|
43
38
|
)
|
39
|
+
from edu_rdm_integration.stages.collect_data.consts import (
|
40
|
+
ALL_UNITS_IN_COMMAND,
|
41
|
+
)
|
44
42
|
|
45
43
|
|
46
44
|
if TYPE_CHECKING:
|
@@ -50,8 +48,7 @@ if TYPE_CHECKING:
|
|
50
48
|
|
51
49
|
|
52
50
|
class BaseEduLogGenerator:
|
53
|
-
"""
|
54
|
-
Базовый класс генератора логов для указанной модели РВД за определенный период времени.
|
51
|
+
"""Базовый класс генератора логов для указанной модели РВД за определенный период времени.
|
55
52
|
|
56
53
|
Для каждой модели РВД есть модели в продукте, создание экземпляров которых, сигнализирует о необходимости сбора
|
57
54
|
и выгрузки данных в РВД. Модели можно найти в
|
@@ -69,8 +66,7 @@ class BaseEduLogGenerator:
|
|
69
66
|
logs_period_ended_at: datetime = datetime.combine(date.today(), time.max),
|
70
67
|
institute_ids: Optional[tuple[int, ...]] = (),
|
71
68
|
) -> list['AuditLog']:
|
72
|
-
"""
|
73
|
-
Возвращает список сгенерированных экземпляров модели AuditLog.
|
69
|
+
"""Возвращает список сгенерированных экземпляров модели AuditLog.
|
74
70
|
|
75
71
|
Формирование логов производится для указанной модели РВД за указанный период времени.
|
76
72
|
|
@@ -102,7 +98,7 @@ class BaseFirstCollectModelsDataCommandsGenerator:
|
|
102
98
|
split_by_quantity: Optional[int],
|
103
99
|
logs_period_started_at=datetime.combine(date.today(), time.min),
|
104
100
|
logs_period_ended_at=datetime.combine(date.today(), time.min),
|
105
|
-
batch_size=
|
101
|
+
batch_size=BATCH_SIZE,
|
106
102
|
):
|
107
103
|
"""Инициализация."""
|
108
104
|
# Если модели не указаны, берется значение по умолчанию - все модели:
|
@@ -251,7 +247,6 @@ class FirstCollectModelsDataCommandsGenerator(BaseFirstCollectModelsDataCommands
|
|
251
247
|
Returns:
|
252
248
|
Cписок данных для формирования команд.
|
253
249
|
"""
|
254
|
-
|
255
250
|
result_commands: List[dict] = []
|
256
251
|
institute_ids_chunks: Tuple[Optional[Iterable]] = (None,)
|
257
252
|
|
@@ -0,0 +1,154 @@
|
|
1
|
+
from datetime import (
|
2
|
+
date,
|
3
|
+
datetime,
|
4
|
+
time,
|
5
|
+
timedelta,
|
6
|
+
)
|
7
|
+
from typing import (
|
8
|
+
TYPE_CHECKING,
|
9
|
+
Any,
|
10
|
+
Iterable,
|
11
|
+
)
|
12
|
+
|
13
|
+
from django.conf import (
|
14
|
+
settings,
|
15
|
+
)
|
16
|
+
from django.db.models import (
|
17
|
+
CharField,
|
18
|
+
OuterRef,
|
19
|
+
Subquery,
|
20
|
+
Value,
|
21
|
+
)
|
22
|
+
from django.db.models.functions import (
|
23
|
+
Cast,
|
24
|
+
Coalesce,
|
25
|
+
Least,
|
26
|
+
)
|
27
|
+
from django.db.transaction import (
|
28
|
+
atomic,
|
29
|
+
)
|
30
|
+
|
31
|
+
from educommon import (
|
32
|
+
logger,
|
33
|
+
)
|
34
|
+
|
35
|
+
from edu_rdm_integration.stages.collect_data.models import (
|
36
|
+
CollectingDataStageStatus,
|
37
|
+
CollectingDataSubStageStatus,
|
38
|
+
CollectingExportedDataStage,
|
39
|
+
CollectingExportedDataSubStage,
|
40
|
+
)
|
41
|
+
|
42
|
+
|
43
|
+
if TYPE_CHECKING:
|
44
|
+
from edu_rdm_integration.rdm_models.models import (
|
45
|
+
BaseEntityModel,
|
46
|
+
)
|
47
|
+
from edu_rdm_integration.stages.collect_data.functions.non_calculated.base.managers import (
|
48
|
+
BaseCollectingExportedDataRunnerManager,
|
49
|
+
)
|
50
|
+
|
51
|
+
|
52
|
+
@atomic
|
53
|
+
def set_failed_status_suspended_collecting_data_stages() -> dict[str, int]:
|
54
|
+
"""Установить статус 'Завершено с ошибками' для зависших этапов и подэтапов сбора.
|
55
|
+
|
56
|
+
Сборка считается зависшей в случае если за определенное в параметре RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT время,
|
57
|
+
отсутствуют изменения в связанных подэтапах. Параметр RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT определяется
|
58
|
+
в настройках приложения.
|
59
|
+
"""
|
60
|
+
changed_status_result = {
|
61
|
+
'change_stage_count': 0,
|
62
|
+
'change_sub_stage_count': 0,
|
63
|
+
}
|
64
|
+
|
65
|
+
current_datetime = datetime.now()
|
66
|
+
suspended_time_at = current_datetime - timedelta(minutes=settings.RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT)
|
67
|
+
|
68
|
+
suspended_stage_ids = set(
|
69
|
+
CollectingExportedDataStage.objects.annotate(
|
70
|
+
last_sub_stage_started_at=Coalesce(
|
71
|
+
Subquery(
|
72
|
+
CollectingExportedDataSubStage.objects.filter(stage_id=OuterRef('pk'))
|
73
|
+
.values('started_at')
|
74
|
+
.order_by('-started_at')[:1]
|
75
|
+
),
|
76
|
+
Value(datetime.combine(date.min, time.min)),
|
77
|
+
)
|
78
|
+
)
|
79
|
+
.filter(
|
80
|
+
last_sub_stage_started_at__lt=suspended_time_at,
|
81
|
+
status__in=(
|
82
|
+
CollectingDataStageStatus.CREATED.key,
|
83
|
+
CollectingDataStageStatus.IN_PROGRESS.key,
|
84
|
+
),
|
85
|
+
)
|
86
|
+
.values_list('pk', flat=True)
|
87
|
+
)
|
88
|
+
|
89
|
+
if suspended_stage_ids:
|
90
|
+
logger.info(f'find suspended CollectingExportedDataStage: {", ".join(map(str, suspended_stage_ids))}..')
|
91
|
+
|
92
|
+
change_stage_count = CollectingExportedDataStage.objects.filter(
|
93
|
+
pk__in=suspended_stage_ids,
|
94
|
+
).update(
|
95
|
+
status=CollectingDataStageStatus.FAILED.key,
|
96
|
+
ended_at=current_datetime,
|
97
|
+
)
|
98
|
+
|
99
|
+
change_sub_stage_count = CollectingExportedDataSubStage.objects.filter(
|
100
|
+
stage_id__in=suspended_stage_ids,
|
101
|
+
).update(
|
102
|
+
status=CollectingDataSubStageStatus.FAILED.key,
|
103
|
+
ended_at=current_datetime,
|
104
|
+
)
|
105
|
+
|
106
|
+
changed_status_result.update(
|
107
|
+
{
|
108
|
+
'change_stage_count': change_stage_count,
|
109
|
+
'change_sub_stage_count': change_sub_stage_count,
|
110
|
+
}
|
111
|
+
)
|
112
|
+
|
113
|
+
return changed_status_result
|
114
|
+
|
115
|
+
|
116
|
+
def get_collecting_managers_max_period_ended_dates(
|
117
|
+
collecting_managers: Iterable['BaseCollectingExportedDataRunnerManager'],
|
118
|
+
) -> dict[str, 'datetime']:
|
119
|
+
"""Возвращает дату и время завершения последнего успешного этапа сбора для менеджеров Функций сбора."""
|
120
|
+
managers_last_period_ended = (
|
121
|
+
CollectingExportedDataStage.objects.filter(
|
122
|
+
manager_id__in=[manager.uuid for manager in collecting_managers],
|
123
|
+
id=Subquery(
|
124
|
+
CollectingExportedDataStage.objects.filter(
|
125
|
+
manager_id=OuterRef('manager_id'),
|
126
|
+
status_id=CollectingDataStageStatus.FINISHED.key,
|
127
|
+
)
|
128
|
+
.order_by('-id')
|
129
|
+
.values('id')[:1]
|
130
|
+
),
|
131
|
+
)
|
132
|
+
.annotate(
|
133
|
+
str_manager_id=Cast('manager_id', output_field=CharField()),
|
134
|
+
last_period_ended_at=Least('logs_period_ended_at', 'started_at'),
|
135
|
+
)
|
136
|
+
.values_list(
|
137
|
+
'str_manager_id',
|
138
|
+
'last_period_ended_at',
|
139
|
+
)
|
140
|
+
)
|
141
|
+
|
142
|
+
return {manager_id: last_period_ended_at for manager_id, last_period_ended_at in managers_last_period_ended}
|
143
|
+
|
144
|
+
|
145
|
+
def update_fields(entity: 'BaseEntityModel', field_values: dict[str, Any], mapping: dict[str, str]) -> None:
|
146
|
+
"""Обновление значений полей сущности по измененным полям модели.
|
147
|
+
|
148
|
+
:param entity: Выгружаемая сущность
|
149
|
+
:param field_values: Словарь с измененными данными модели
|
150
|
+
:param mapping: Словарь маппинга полей модели к полям сущности
|
151
|
+
"""
|
152
|
+
for model_field, entity_field in mapping.items():
|
153
|
+
if model_field in field_values:
|
154
|
+
setattr(entity, entity_field, field_values[model_field])
|
File without changes
|
@@ -0,0 +1,100 @@
|
|
1
|
+
from datetime import (
|
2
|
+
date,
|
3
|
+
datetime,
|
4
|
+
time,
|
5
|
+
)
|
6
|
+
|
7
|
+
from django.core.management import (
|
8
|
+
BaseCommand,
|
9
|
+
CommandParser,
|
10
|
+
)
|
11
|
+
|
12
|
+
from edu_rdm_integration.core.consts import (
|
13
|
+
DATETIME_FORMAT,
|
14
|
+
)
|
15
|
+
from edu_rdm_integration.rdm_models.models import (
|
16
|
+
RegionalDataMartModelEnum,
|
17
|
+
)
|
18
|
+
from edu_rdm_integration.stages.collect_data.operations import (
|
19
|
+
BaseCollectModelsData,
|
20
|
+
)
|
21
|
+
|
22
|
+
|
23
|
+
class BaseCollectModelDataCommand(BaseCommand):
|
24
|
+
"""Базовая команда для выполнения сбора данных моделей РВД."""
|
25
|
+
|
26
|
+
def add_arguments(self, parser: 'CommandParser'):
|
27
|
+
"""Добавление параметров."""
|
28
|
+
models = ', '.join(
|
29
|
+
[f'{key} - {value.title}' for key, value in RegionalDataMartModelEnum.get_enum_data().items()]
|
30
|
+
)
|
31
|
+
models_help_text = (
|
32
|
+
f'Значением параметра является перечисление моделей РВД, для которых должен быть произведен сбор данных. '
|
33
|
+
f'Перечисление моделей:\n{models}. Если модели не указываются, то сбор данных производится для всех '
|
34
|
+
f'моделей. Модели перечисляются через запятую без пробелов.'
|
35
|
+
)
|
36
|
+
parser.add_argument(
|
37
|
+
'--models',
|
38
|
+
action='store',
|
39
|
+
dest='models',
|
40
|
+
type=lambda e: e.split(','),
|
41
|
+
help=models_help_text,
|
42
|
+
)
|
43
|
+
|
44
|
+
parser.add_argument(
|
45
|
+
'--logs_period_started_at',
|
46
|
+
action='store',
|
47
|
+
dest='logs_period_started_at',
|
48
|
+
type=lambda started_at: datetime.strptime(started_at, DATETIME_FORMAT),
|
49
|
+
default=datetime.combine(date.today(), time.min),
|
50
|
+
help=(
|
51
|
+
'Дата и время начала периода обрабатываемых логов. Значение предоставляется в формате '
|
52
|
+
'"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 00:00:00.'
|
53
|
+
),
|
54
|
+
)
|
55
|
+
|
56
|
+
parser.add_argument(
|
57
|
+
'--logs_period_ended_at',
|
58
|
+
action='store',
|
59
|
+
dest='logs_period_ended_at',
|
60
|
+
type=lambda ended_at: datetime.strptime(ended_at, DATETIME_FORMAT),
|
61
|
+
default=datetime.combine(date.today(), time.max),
|
62
|
+
help=(
|
63
|
+
'Дата и время конца периода обрабатываемых логов. Значение предоставляется в формате '
|
64
|
+
'"дд.мм.гггг чч:мм:сс". По умолчанию, сегодняшний день, время 23:59:59.'
|
65
|
+
),
|
66
|
+
)
|
67
|
+
|
68
|
+
def _prepare_collect_models_data_class(self, *args, **kwargs) -> BaseCollectModelsData:
|
69
|
+
"""Возвращает объект класса сбора данных моделей РВД."""
|
70
|
+
raise NotImplementedError
|
71
|
+
|
72
|
+
def handle(self, *args, **kwargs):
|
73
|
+
"""Выполнение действий команды."""
|
74
|
+
collect_models_data = self._prepare_collect_models_data_class(*args, **kwargs)
|
75
|
+
collect_models_data.collect()
|
76
|
+
|
77
|
+
|
78
|
+
class BaseCollectModelsDataByGeneratingLogsCommand(BaseCollectModelDataCommand):
|
79
|
+
"""Команда сбора данных моделей РВД на основе существующих в БД данных моделей ЭШ.
|
80
|
+
|
81
|
+
Можно регулировать, для каких моделей должен быть произведен сбор данных, и период, за который должны
|
82
|
+
быть собраны логи. Логи формируются в процессе выполнения команды при помощи генератора логов LogGenerator для
|
83
|
+
указанной модели.
|
84
|
+
"""
|
85
|
+
|
86
|
+
# flake8: noqa: A003
|
87
|
+
help = 'Команда сбора данных моделей РВД на основе существующих в БД данных моделей продукта'
|
88
|
+
|
89
|
+
def add_arguments(self, parser: 'CommandParser'):
|
90
|
+
"""Добавление параметров."""
|
91
|
+
super().add_arguments(parser=parser)
|
92
|
+
|
93
|
+
parser.add_argument(
|
94
|
+
'--institute_ids',
|
95
|
+
action='store',
|
96
|
+
dest='institute_ids',
|
97
|
+
type=lambda v: tuple(map(int, v.split(','))),
|
98
|
+
default=(),
|
99
|
+
help='Идентификаторы учебных заведений, для которых производится выгрузка.',
|
100
|
+
)
|
File without changes
|
@@ -1,16 +1,14 @@
|
|
1
|
-
from edu_rdm_integration.collect_data.
|
1
|
+
from edu_rdm_integration.stages.collect_data.management.base import (
|
2
|
+
BaseCollectModelDataCommand,
|
3
|
+
)
|
4
|
+
from edu_rdm_integration.stages.collect_data.operations import (
|
2
5
|
BaseCollectLatestModelsData,
|
3
6
|
BaseCollectModelsData,
|
4
7
|
)
|
5
|
-
from edu_rdm_integration.management.general import (
|
6
|
-
BaseCollectModelDataCommand,
|
7
|
-
)
|
8
8
|
|
9
9
|
|
10
10
|
class Command(BaseCollectModelDataCommand):
|
11
|
-
"""
|
12
|
-
Команда для сбора на основе логов за период с последней сборки до указанной даты.
|
13
|
-
"""
|
11
|
+
"""Команда для сбора на основе логов за период с последней сборки до указанной даты."""
|
14
12
|
|
15
13
|
def _prepare_collect_models_data_class(self, *args, **kwargs) -> BaseCollectModelsData:
|
16
14
|
return BaseCollectLatestModelsData(
|
edu_rdm_integration/{management → stages/collect_data/management}/commands/collect_models_data.py
RENAMED
@@ -1,16 +1,14 @@
|
|
1
|
-
from edu_rdm_integration.collect_data.
|
1
|
+
from edu_rdm_integration.stages.collect_data.management.base import (
|
2
|
+
BaseCollectModelDataCommand,
|
3
|
+
)
|
4
|
+
from edu_rdm_integration.stages.collect_data.operations import (
|
2
5
|
BaseCollectModelsData,
|
3
6
|
CollectModelsData,
|
4
7
|
)
|
5
|
-
from edu_rdm_integration.management.general import (
|
6
|
-
BaseCollectModelDataCommand,
|
7
|
-
)
|
8
8
|
|
9
9
|
|
10
10
|
class Command(BaseCollectModelDataCommand):
|
11
|
-
"""
|
12
|
-
Команда для сбора данных моделей РВД за указанных период по существующим логам.
|
13
|
-
"""
|
11
|
+
"""Команда для сбора данных моделей РВД за указанных период по существующим логам."""
|
14
12
|
|
15
13
|
# flake8: noqa: A003
|
16
14
|
help = 'Команда для сбора данных моделей РВД за указанных период по существующим логам.'
|