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,164 @@
|
|
1
|
+
from concurrent.futures import (
|
2
|
+
ThreadPoolExecutor,
|
3
|
+
)
|
4
|
+
from json import (
|
5
|
+
JSONDecodeError,
|
6
|
+
)
|
7
|
+
from typing import (
|
8
|
+
TYPE_CHECKING,
|
9
|
+
Any,
|
10
|
+
Optional,
|
11
|
+
)
|
12
|
+
|
13
|
+
from django.conf import (
|
14
|
+
settings,
|
15
|
+
)
|
16
|
+
from django.db import (
|
17
|
+
transaction,
|
18
|
+
)
|
19
|
+
from django.db.models import (
|
20
|
+
QuerySet,
|
21
|
+
)
|
22
|
+
from uploader_client.adapters import (
|
23
|
+
adapter,
|
24
|
+
)
|
25
|
+
|
26
|
+
from educommon import (
|
27
|
+
logger,
|
28
|
+
)
|
29
|
+
|
30
|
+
from edu_rdm_integration.core.redis_cache import (
|
31
|
+
AbstractCache,
|
32
|
+
)
|
33
|
+
from edu_rdm_integration.stages.export_data.consts import (
|
34
|
+
TOTAL_ATTACHMENTS_SIZE_KEY,
|
35
|
+
)
|
36
|
+
from edu_rdm_integration.stages.export_data.functions.base.requests import (
|
37
|
+
RegionalDataMartStatusRequest,
|
38
|
+
)
|
39
|
+
from edu_rdm_integration.stages.export_data.models import (
|
40
|
+
ExportingDataSubStageStatus,
|
41
|
+
)
|
42
|
+
from edu_rdm_integration.stages.upload_data.consts import (
|
43
|
+
FAILED_STATUSES,
|
44
|
+
)
|
45
|
+
from edu_rdm_integration.stages.upload_data.enums import (
|
46
|
+
FileUploadStatusEnum,
|
47
|
+
)
|
48
|
+
from edu_rdm_integration.stages.upload_data.models import (
|
49
|
+
DataMartRequestStatus,
|
50
|
+
ExportingDataSubStageUploaderClientLog,
|
51
|
+
UploadStatusRequestLog,
|
52
|
+
)
|
53
|
+
|
54
|
+
|
55
|
+
if TYPE_CHECKING:
|
56
|
+
from uploader_client.logging.base import (
|
57
|
+
Entry,
|
58
|
+
)
|
59
|
+
|
60
|
+
|
61
|
+
class UploadStatusHelper:
|
62
|
+
"""Хелпер проверки статуса загрузки данных в витрину."""
|
63
|
+
|
64
|
+
def __init__(self, in_progress_uploads: QuerySet, cache: AbstractCache) -> None:
|
65
|
+
self._in_progress_uploads = in_progress_uploads
|
66
|
+
self.cache = cache
|
67
|
+
|
68
|
+
def run(self, thread_count: int = 1) -> None:
|
69
|
+
"""Запускает проверки статусов."""
|
70
|
+
if thread_count > 1:
|
71
|
+
with ThreadPoolExecutor(max_workers=thread_count) as pool:
|
72
|
+
pool.map(self._process_upload, self._in_progress_uploads)
|
73
|
+
else:
|
74
|
+
for upload in self._in_progress_uploads:
|
75
|
+
self._process_upload(upload)
|
76
|
+
|
77
|
+
@classmethod
|
78
|
+
def send_upload_status_request(cls, request_id: str) -> tuple[Optional[dict[str, Any]], 'Entry']:
|
79
|
+
"""Формирует и отправляет запрос для получения статуса загрузки данных в витрину."""
|
80
|
+
request = RegionalDataMartStatusRequest(
|
81
|
+
request_id=request_id,
|
82
|
+
method='GET',
|
83
|
+
parameters={},
|
84
|
+
headers={
|
85
|
+
'Content-Type': 'application/json',
|
86
|
+
},
|
87
|
+
)
|
88
|
+
|
89
|
+
result = adapter.send(request)
|
90
|
+
|
91
|
+
response = None
|
92
|
+
|
93
|
+
if result.error:
|
94
|
+
logger.warning(
|
95
|
+
f'Ошибка при получении статуса загрузки данных в витрину. Идентификатор загрузки: {request_id}. '
|
96
|
+
f'Ошибка: {result.error}, запрос: {result.log.request}, ответ: {result.log.response}',
|
97
|
+
)
|
98
|
+
else:
|
99
|
+
logger.info(
|
100
|
+
f'Получен ответ со статусом {result.response.status_code} и содержимым {result.response.text}. '
|
101
|
+
f'Идентификатор загрузки: {request_id}',
|
102
|
+
)
|
103
|
+
try:
|
104
|
+
response = result.response.json()
|
105
|
+
except JSONDecodeError:
|
106
|
+
logger.error(
|
107
|
+
f'Не удалось получить данные из ответа запроса статуса загрузки данных в витрину. '
|
108
|
+
f'Идентификатор загрузки: {request_id}, ответ: {result.response.text}',
|
109
|
+
)
|
110
|
+
|
111
|
+
return response, result.log
|
112
|
+
|
113
|
+
@classmethod
|
114
|
+
def update_upload_status(
|
115
|
+
cls,
|
116
|
+
upload: ExportingDataSubStageUploaderClientLog,
|
117
|
+
response: Optional[dict[str, Any]],
|
118
|
+
log_entry: 'Entry',
|
119
|
+
) -> None:
|
120
|
+
"""Обновляет статус загрузки данных в витрину."""
|
121
|
+
request_status = None
|
122
|
+
|
123
|
+
if isinstance(response, dict):
|
124
|
+
request_status = DataMartRequestStatus.get_values_to_enum_data().get(response.get('code'))
|
125
|
+
|
126
|
+
if not request_status:
|
127
|
+
logger.error(
|
128
|
+
'Не удалось определить статус загрузки данных в витрину. Идентификатор загрузки: '
|
129
|
+
f'{upload.request_id}, данные ответа: {response}',
|
130
|
+
)
|
131
|
+
|
132
|
+
with transaction.atomic():
|
133
|
+
UploadStatusRequestLog.objects.create(
|
134
|
+
upload=upload,
|
135
|
+
entry=log_entry,
|
136
|
+
request_status_id=getattr(request_status, 'key', None),
|
137
|
+
)
|
138
|
+
|
139
|
+
if request_status in FAILED_STATUSES:
|
140
|
+
upload.file_upload_status = FileUploadStatusEnum.ERROR
|
141
|
+
upload.sub_stage.status_id = ExportingDataSubStageStatus.PROCESS_ERROR.key
|
142
|
+
upload.sub_stage.save()
|
143
|
+
|
144
|
+
elif request_status == DataMartRequestStatus.SUCCESSFULLY_PROCESSED:
|
145
|
+
upload.file_upload_status = FileUploadStatusEnum.FINISHED
|
146
|
+
|
147
|
+
if upload.file_upload_status != FileUploadStatusEnum.IN_PROGRESS:
|
148
|
+
upload.save()
|
149
|
+
|
150
|
+
def _process_upload(self, upload: ExportingDataSubStageUploaderClientLog) -> None:
|
151
|
+
"""Обрабатывает запись загрузки данных в витрину."""
|
152
|
+
response, log_entry = self.send_upload_status_request(upload.request_id)
|
153
|
+
self.update_upload_status(upload, response, log_entry)
|
154
|
+
# Обновим размер файлов в кеш (с блокировкой на время обновления)
|
155
|
+
with self.cache.lock(f'{TOTAL_ATTACHMENTS_SIZE_KEY}:lock', timeout=300):
|
156
|
+
queue_total_file_size = self.cache.get(TOTAL_ATTACHMENTS_SIZE_KEY) or 0
|
157
|
+
if queue_total_file_size:
|
158
|
+
queue_total_file_size -= upload.attachment.attachment_size
|
159
|
+
if queue_total_file_size > 0:
|
160
|
+
self.cache.set(
|
161
|
+
TOTAL_ATTACHMENTS_SIZE_KEY,
|
162
|
+
queue_total_file_size,
|
163
|
+
timeout=settings.RDM_REDIS_CACHE_TIMEOUT_SECONDS,
|
164
|
+
)
|
File without changes
|
@@ -0,0 +1,134 @@
|
|
1
|
+
from typing import (
|
2
|
+
TYPE_CHECKING,
|
3
|
+
)
|
4
|
+
|
5
|
+
import uploader_client
|
6
|
+
from django.core.cache import (
|
7
|
+
DEFAULT_CACHE_ALIAS,
|
8
|
+
caches,
|
9
|
+
)
|
10
|
+
from django.core.management import (
|
11
|
+
BaseCommand,
|
12
|
+
)
|
13
|
+
from uploader_client.adapters import (
|
14
|
+
UploaderAdapter,
|
15
|
+
)
|
16
|
+
from uploader_client.contrib.rdm.interfaces.configurations import (
|
17
|
+
RegionalDataMartUploaderConfig,
|
18
|
+
)
|
19
|
+
|
20
|
+
|
21
|
+
if TYPE_CHECKING:
|
22
|
+
from uploader_client.interfaces import (
|
23
|
+
OpenAPIRequest,
|
24
|
+
)
|
25
|
+
|
26
|
+
|
27
|
+
class BaseDatamartClientCommand(BaseCommand):
|
28
|
+
"""Базовая команда для загрузки данных/получение статуса в РВД с использованием uploader_client."""
|
29
|
+
|
30
|
+
TIMEOUT = 300
|
31
|
+
REQUEST_RETRIES = 1
|
32
|
+
|
33
|
+
def add_arguments(self, parser):
|
34
|
+
"""Добавление параметров."""
|
35
|
+
parser.add_argument(
|
36
|
+
'--url',
|
37
|
+
type=str,
|
38
|
+
required=True,
|
39
|
+
help='url хоста Datamart Studio',
|
40
|
+
)
|
41
|
+
parser.add_argument(
|
42
|
+
'--datamart_mnemonic',
|
43
|
+
type=str,
|
44
|
+
required=True,
|
45
|
+
help='мнемоника Витрины',
|
46
|
+
)
|
47
|
+
parser.add_argument(
|
48
|
+
'--organization_ogrn',
|
49
|
+
type=str,
|
50
|
+
required=True,
|
51
|
+
help='ОГРН организации, в рамках которой развёрнута Витрина',
|
52
|
+
)
|
53
|
+
parser.add_argument(
|
54
|
+
'--installation_name',
|
55
|
+
type=str,
|
56
|
+
required=True,
|
57
|
+
help='имя инсталляции в целевой Витрине',
|
58
|
+
)
|
59
|
+
parser.add_argument(
|
60
|
+
'--installation_id',
|
61
|
+
type=int,
|
62
|
+
required=True,
|
63
|
+
help='идентификатор инсталляции (присутствует в её названии)',
|
64
|
+
)
|
65
|
+
parser.add_argument(
|
66
|
+
'--username',
|
67
|
+
type=str,
|
68
|
+
required=True,
|
69
|
+
help='имя пользователя IAM',
|
70
|
+
)
|
71
|
+
parser.add_argument(
|
72
|
+
'--password',
|
73
|
+
type=str,
|
74
|
+
required=True,
|
75
|
+
help='пароль пользователя IAM',
|
76
|
+
)
|
77
|
+
|
78
|
+
def _configure_agent_client(
|
79
|
+
self,
|
80
|
+
url,
|
81
|
+
datamart_mnemonic,
|
82
|
+
organization_ogrn,
|
83
|
+
installation_name,
|
84
|
+
installation_id,
|
85
|
+
username,
|
86
|
+
password,
|
87
|
+
):
|
88
|
+
"""Конфигурирование клиента загрузчика данных в Витрину."""
|
89
|
+
uploader_client.set_config(
|
90
|
+
RegionalDataMartUploaderConfig(
|
91
|
+
interface='uploader_client.contrib.rdm.interfaces.rest.ProxyAPIInterface',
|
92
|
+
cache=caches[DEFAULT_CACHE_ALIAS],
|
93
|
+
url=url,
|
94
|
+
datamart_name=datamart_mnemonic,
|
95
|
+
organization_ogrn=organization_ogrn,
|
96
|
+
installation_name=installation_name,
|
97
|
+
installation_id=installation_id,
|
98
|
+
username=username,
|
99
|
+
password=password,
|
100
|
+
timeout=self.TIMEOUT,
|
101
|
+
request_retries=self.REQUEST_RETRIES,
|
102
|
+
)
|
103
|
+
)
|
104
|
+
|
105
|
+
def _get_request(self, **options) -> 'OpenAPIRequest':
|
106
|
+
"""Возвращает запрос для отправки в РВД."""
|
107
|
+
raise NotImplementedError
|
108
|
+
|
109
|
+
def handle(self, *args, **options):
|
110
|
+
"""Выполнение действий команды."""
|
111
|
+
self._configure_agent_client(
|
112
|
+
url=options['url'],
|
113
|
+
datamart_mnemonic=options['datamart_mnemonic'],
|
114
|
+
organization_ogrn=options['organization_ogrn'],
|
115
|
+
installation_name=options['installation_name'],
|
116
|
+
installation_id=options['installation_id'],
|
117
|
+
username=options['username'],
|
118
|
+
password=options['password'],
|
119
|
+
)
|
120
|
+
|
121
|
+
request = self._get_request(**options)
|
122
|
+
|
123
|
+
result = UploaderAdapter().send(request)
|
124
|
+
|
125
|
+
if result.error:
|
126
|
+
self.stdout.write(self.style.ERROR('ERROR:\n'))
|
127
|
+
self.stdout.write(
|
128
|
+
f'{result.error}\nREQUEST:\n"{result.log.request}"\n\nRESPONSE:\n"{result.log.response}"\n'
|
129
|
+
)
|
130
|
+
else:
|
131
|
+
self.stdout.write(self.style.SUCCESS('SUCCESS:\n'))
|
132
|
+
self.stdout.write(
|
133
|
+
f'Response with {result.response.status_code} code and content:\n{result.response.text}\n'
|
134
|
+
)
|
File without changes
|
@@ -1,5 +1,4 @@
|
|
1
|
-
"""
|
2
|
-
Команда для проставления расчетов файла . По умолчанию собирается за месяц. Обновление работает асинхронно.
|
1
|
+
"""Команда для проставления расчетов файла . По умолчанию собирается за месяц. Обновление работает асинхронно.
|
3
2
|
|
4
3
|
Выполнение:
|
5
4
|
django-admin async_fix_attachment_size --chunk_size=50 --count_store_size --connection_pool_size=5
|
@@ -15,7 +14,6 @@ django-admin async_fix_attachment_size --chunk_size=50 --count_store_size --conn
|
|
15
14
|
--async_workers_count количество одновременных асинхронных воркеров-исполнителей по умолчанию 20
|
16
15
|
"""
|
17
16
|
|
18
|
-
|
19
17
|
import asyncio
|
20
18
|
from datetime import (
|
21
19
|
date,
|
@@ -39,12 +37,12 @@ from educommon.utils.seqtools import (
|
|
39
37
|
make_chunks,
|
40
38
|
)
|
41
39
|
|
42
|
-
from edu_rdm_integration.
|
43
|
-
FileUploadStatusEnum,
|
44
|
-
)
|
45
|
-
from edu_rdm_integration.models import (
|
40
|
+
from edu_rdm_integration.stages.export_data.models import (
|
46
41
|
ExportingDataSubStageAttachment,
|
47
42
|
)
|
43
|
+
from edu_rdm_integration.stages.upload_data.enums import (
|
44
|
+
FileUploadStatusEnum,
|
45
|
+
)
|
48
46
|
|
49
47
|
|
50
48
|
DEFAULT_QUERYSET_CHUNK_SIZE = 500
|
@@ -61,7 +59,7 @@ class Command(BaseCommand):
|
|
61
59
|
'Команда для проставления размера по умолчанию (в байтах) для отправленных файлов.'
|
62
60
|
)
|
63
61
|
|
64
|
-
def __init__(self,
|
62
|
+
def __init__(self, *args, **kwargs):
|
65
63
|
super().__init__(*args, **kwargs)
|
66
64
|
|
67
65
|
self.result = {
|
@@ -76,25 +74,21 @@ class Command(BaseCommand):
|
|
76
74
|
'--chunk_size',
|
77
75
|
type=int,
|
78
76
|
default=DEFAULT_QUERYSET_CHUNK_SIZE,
|
79
|
-
help='Кол-во единовременно изменяемых элементов в запросе'
|
77
|
+
help='Кол-во единовременно изменяемых элементов в запросе',
|
78
|
+
)
|
79
|
+
(
|
80
|
+
parser.add_argument(
|
81
|
+
'--count_store_size', action='store_true', default=False, help='Рассчитать размер файлов'
|
82
|
+
),
|
80
83
|
)
|
81
84
|
parser.add_argument(
|
82
|
-
'--
|
83
|
-
action='store_true',
|
84
|
-
default=False,
|
85
|
-
help='Рассчитать размер файлов'
|
86
|
-
),
|
87
|
-
parser.add_argument(
|
88
|
-
'--connection_pool_size',
|
89
|
-
type=int,
|
90
|
-
default=DEFAULT_POOL_SIZE,
|
91
|
-
help='Кол-во одновременных коннектов к базе'
|
85
|
+
'--connection_pool_size', type=int, default=DEFAULT_POOL_SIZE, help='Кол-во одновременных коннектов к базе'
|
92
86
|
)
|
93
87
|
parser.add_argument(
|
94
88
|
'--async_workers_count',
|
95
89
|
type=int,
|
96
90
|
default=DEFAULT_ASYNC_WORKERS_COUNT,
|
97
|
-
help='Кол-во одновременных асинхронных воркеров-исполнителей'
|
91
|
+
help='Кол-во одновременных асинхронных воркеров-исполнителей',
|
98
92
|
)
|
99
93
|
parser.add_argument(
|
100
94
|
'--date_begin',
|
@@ -108,11 +102,7 @@ class Command(BaseCommand):
|
|
108
102
|
)
|
109
103
|
|
110
104
|
def get_attachments_fix_query(
|
111
|
-
self,
|
112
|
-
chunk_size: int,
|
113
|
-
date_begin: date,
|
114
|
-
date_end: date,
|
115
|
-
count_store_size: bool
|
105
|
+
self, chunk_size: int, date_begin: date, date_end: date, count_store_size: bool
|
116
106
|
) -> list[tuple[int, int]]:
|
117
107
|
"""Формирование id файлов, которым надо обновить размер."""
|
118
108
|
logger.info('Определение файлов, которым надо обновить размер.')
|
@@ -128,25 +118,22 @@ class Command(BaseCommand):
|
|
128
118
|
for chunk in make_chunks(attachment_query.iterator(), chunk_size):
|
129
119
|
if count_store_size:
|
130
120
|
update_attachments.append(
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
121
|
+
[
|
122
|
+
(
|
123
|
+
attachment.id,
|
124
|
+
attachment.attachment.size
|
125
|
+
if attachment.attachment.field.storage.exists(attachment.attachment.name)
|
126
|
+
else DEFAULT_FILE_SIZE,
|
127
|
+
)
|
128
|
+
for attachment in chunk
|
129
|
+
]
|
139
130
|
)
|
140
131
|
else:
|
141
132
|
update_attachments.append([(attachment.id, DEFAULT_FILE_SIZE) for attachment in chunk])
|
142
133
|
|
143
134
|
return update_attachments
|
144
135
|
|
145
|
-
async def execute_update_sql(
|
146
|
-
self,
|
147
|
-
pool: asyncpg.Pool,
|
148
|
-
data: list[tuple[int, int]]
|
149
|
-
) -> None:
|
136
|
+
async def execute_update_sql(self, pool: asyncpg.Pool, data: list[tuple[int, int]]) -> None:
|
150
137
|
"""Метод для исполнения сгенерированного UPDATE sql запроса."""
|
151
138
|
self.result['initial_count_rows_to_fix'] += len(data)
|
152
139
|
logger.info('Обновление размера файлов')
|
@@ -157,18 +144,14 @@ class Command(BaseCommand):
|
|
157
144
|
UPDATE rdm_exporting_data_sub_stage_attachment
|
158
145
|
set attachment_size = $2
|
159
146
|
where id = $1;
|
160
|
-
""",
|
147
|
+
""",
|
148
|
+
data,
|
161
149
|
)
|
162
150
|
self.result['fixed_rows_count'] += len(data)
|
163
151
|
except Exception as ex:
|
164
152
|
self.result['errors'].append(str(ex))
|
165
153
|
|
166
|
-
async def fix_attachment_size(
|
167
|
-
self,
|
168
|
-
fix_queries: list,
|
169
|
-
pool_size: int = None,
|
170
|
-
workers_count: int = None
|
171
|
-
) -> None:
|
154
|
+
async def fix_attachment_size(self, fix_queries: list, pool_size: int = None, workers_count: int = None) -> None:
|
172
155
|
"""Асинхронное обновление размера файлов."""
|
173
156
|
pool = await asyncpg.create_pool(
|
174
157
|
max_size=pool_size,
|
@@ -177,7 +160,7 @@ class Command(BaseCommand):
|
|
177
160
|
port=DB_SETTINGS['PORT'],
|
178
161
|
user=DB_SETTINGS['USER'],
|
179
162
|
password=DB_SETTINGS['PASSWORD'],
|
180
|
-
database=DB_SETTINGS['NAME']
|
163
|
+
database=DB_SETTINGS['NAME'],
|
181
164
|
)
|
182
165
|
if len(fix_queries) > workers_count:
|
183
166
|
for chunk in make_chunks(fix_queries, workers_count):
|
@@ -192,9 +175,9 @@ class Command(BaseCommand):
|
|
192
175
|
connection_pool_size: int,
|
193
176
|
chunk_size: int,
|
194
177
|
date_begin: date,
|
195
|
-
date_end:date,
|
178
|
+
date_end: date,
|
196
179
|
async_workers_count: int,
|
197
|
-
count_store_size: bool
|
180
|
+
count_store_size: bool,
|
198
181
|
):
|
199
182
|
"""Обновление размеров файла."""
|
200
183
|
fix_queries = self.get_attachments_fix_query(chunk_size, date_begin, date_end, count_store_size)
|
@@ -228,12 +211,7 @@ class Command(BaseCommand):
|
|
228
211
|
logger.info('Обновление размеров файла\n')
|
229
212
|
|
230
213
|
self.update_attachment_size(
|
231
|
-
connection_pool_size,
|
232
|
-
chunk_size,
|
233
|
-
date_begin,
|
234
|
-
date_end,
|
235
|
-
async_workers_count,
|
236
|
-
count_store_size
|
214
|
+
connection_pool_size, chunk_size, date_begin, date_end, async_workers_count, count_store_size
|
237
215
|
)
|
238
216
|
|
239
217
|
delta = datetime.now() - time_start
|
edu_rdm_integration/{management → stages/upload_data/management}/commands/check_upload_status.py
RENAMED
@@ -1,5 +1,4 @@
|
|
1
|
-
"""
|
2
|
-
Команда для проверки состояния отправленных в витрину данных.
|
1
|
+
"""Команда для проверки состояния отправленных в витрину данных.
|
3
2
|
|
4
3
|
Необязательные параметры:
|
5
4
|
--period_started_at - дата и время начала периода загрузки данных в витрину
|
@@ -9,6 +8,7 @@
|
|
9
8
|
Пример использования:
|
10
9
|
python manage.py check_upload_status --period_started_at="01.11.2023 10:00:00" --thread_count=4
|
11
10
|
"""
|
11
|
+
|
12
12
|
from datetime import (
|
13
13
|
date,
|
14
14
|
datetime,
|
@@ -18,6 +18,7 @@ from typing import (
|
|
18
18
|
TYPE_CHECKING,
|
19
19
|
Any,
|
20
20
|
)
|
21
|
+
|
21
22
|
from django.core.cache import (
|
22
23
|
cache,
|
23
24
|
)
|
@@ -25,16 +26,16 @@ from django.core.management.base import (
|
|
25
26
|
BaseCommand,
|
26
27
|
)
|
27
28
|
|
28
|
-
from edu_rdm_integration.consts import (
|
29
|
+
from edu_rdm_integration.core.consts import (
|
29
30
|
DATETIME_FORMAT,
|
30
31
|
)
|
31
|
-
from edu_rdm_integration.enums import (
|
32
|
+
from edu_rdm_integration.stages.upload_data.enums import (
|
32
33
|
FileUploadStatusEnum,
|
33
34
|
)
|
34
|
-
from edu_rdm_integration.helpers import (
|
35
|
+
from edu_rdm_integration.stages.upload_data.helpers import (
|
35
36
|
UploadStatusHelper,
|
36
37
|
)
|
37
|
-
from edu_rdm_integration.models import (
|
38
|
+
from edu_rdm_integration.stages.upload_data.models import (
|
38
39
|
ExportingDataSubStageUploaderClientLog,
|
39
40
|
)
|
40
41
|
|
edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_status.py
RENAMED
@@ -1,13 +1,13 @@
|
|
1
|
-
from edu_rdm_integration.export_data.base.requests import (
|
1
|
+
from edu_rdm_integration.stages.export_data.functions.base.requests import (
|
2
2
|
RegionalDataMartStatusRequest,
|
3
3
|
)
|
4
|
-
from edu_rdm_integration.management.
|
4
|
+
from edu_rdm_integration.stages.upload_data.management.base import (
|
5
5
|
BaseDatamartClientCommand,
|
6
6
|
)
|
7
7
|
|
8
8
|
|
9
|
+
# ruff: noqa: D101
|
9
10
|
class Command(BaseDatamartClientCommand):
|
10
|
-
|
11
11
|
help = 'Команда для получения статуса загрузки файла в РВД с использованием uploader-client.' # noqa A003
|
12
12
|
|
13
13
|
def add_arguments(self, parser):
|
edu_rdm_integration/{management → stages/upload_data/management}/commands/datamart_upload.py
RENAMED
@@ -2,17 +2,17 @@ from pathlib import (
|
|
2
2
|
Path,
|
3
3
|
)
|
4
4
|
|
5
|
-
from edu_rdm_integration.export_data.base.requests import (
|
5
|
+
from edu_rdm_integration.stages.export_data.functions.base.requests import (
|
6
6
|
RegionalDataMartEntityRequest,
|
7
7
|
)
|
8
|
-
from edu_rdm_integration.management.
|
8
|
+
from edu_rdm_integration.stages.upload_data.management.base import (
|
9
9
|
BaseDatamartClientCommand,
|
10
10
|
)
|
11
11
|
|
12
12
|
|
13
|
+
# ruff: noqa: D101
|
13
14
|
class Command(BaseDatamartClientCommand):
|
14
|
-
|
15
|
-
help = 'Команда для загрузки csv-файла в РВД с использованием uploader-client.' # noqa A003
|
15
|
+
help = 'Команда для загрузки csv-файла в РВД с использованием uploader-client.'
|
16
16
|
|
17
17
|
def add_arguments(self, parser):
|
18
18
|
"""Добавление параметров."""
|