edu-rdm-integration 3.8.0__tar.gz → 3.9.0__tar.gz
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-3.8.0 → edu_rdm_integration-3.9.0}/CHANGELOG.md +29 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/PKG-INFO +1 -1
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/collect_and_export_data/actions.py +121 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/collect_and_export_data/ui.py +137 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/collect_and_export_data/utils.py +224 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/collect_data/actions.py +276 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/collect_data/const.py +2 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/generators.py +72 -8
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/collect_data/ui.py +246 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/export_data/actions.py +291 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/export_data/ui.py +199 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/helpers.py +68 -36
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/models.py +11 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/templates/ui-js/stage_for_export.js +25 -0
- edu_rdm_integration-3.9.0/src/edu_rdm_integration/templates/ui-js/start-task.js +42 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/actions.py +47 -12
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/ui.py +0 -11
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration.egg-info/PKG-INFO +1 -1
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +9 -0
- edu_rdm_integration-3.8.0/src/edu_rdm_integration/collect_and_export_data/utils.py +0 -94
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/CONDUCT.md +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/LICENSE +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/MANIFEST.in +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/README.md +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/pyproject.toml +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/setup.cfg +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/results.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/app_meta.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/app_settings.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/apps.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/base.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/mixins.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/collect_data/tests.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/entities.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/enum_register/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/enum_register/mixins.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/enum_register/register.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/enums.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/dataclasses.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/export.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/export_manager.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/helpers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/queue.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/function_templates/function_export_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/async_fix_attachment_size.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/check_upload_status.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/collect_latest_models_data.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/datamart_status.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/datamart_upload.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/commands/export_latest_entities_data.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/management/general.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/mapping.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/redis_cache.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/registry/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/registry/actions.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/registry/ui.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/signals.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/storages.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/tasks.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/templates/ui-js/transferred-entity-list.js +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/typing.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/__init__.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/apps.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/enums.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/managers.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration/utils.py +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
- {edu_rdm_integration-3.8.0 → edu_rdm_integration-3.9.0}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -29,6 +29,35 @@
|
|
29
29
|
### Удалено
|
30
30
|
|
31
31
|
|
32
|
+
## [3.9.0] - 2025-05-22
|
33
|
+
|
34
|
+
### Добавлено
|
35
|
+
|
36
|
+
- [EDUKNDG-15430](https://jira.bars.group/browse/EDUKNDG-15430)
|
37
|
+
MAJOR Из проектов вынесен UI в общий пакет (Сбор данных моделей РВД и Экспорт данных сущностей РВД).
|
38
|
+
|
39
|
+
|
40
|
+
## [3.8.1] - 2025-05-20
|
41
|
+
|
42
|
+
Доработка журнала логов РВД.
|
43
|
+
|
44
|
+
### Добавлено
|
45
|
+
|
46
|
+
- [EDUKNDG-14575](https://jira.bars.group/browse/EDUKNDG-14575)
|
47
|
+
PATCH Добавлена сортировка в "Журнал логов РВД" по полю "Код статуса загрузки".
|
48
|
+
PATCH Добавлена фильтрация в "Журнал логов РВД" по полям "Результат", "Код статуса загрузки".
|
49
|
+
|
50
|
+
### Изменено
|
51
|
+
|
52
|
+
- [EDUKNDG-14575](https://jira.bars.group/browse/EDUKNDG-14575)
|
53
|
+
PATCH Видимость "Журнал логов РВД" в пуске зависит от параметра RDM_MENU_ITEM.
|
54
|
+
|
55
|
+
### Удалено
|
56
|
+
|
57
|
+
- [EDUKNDG-14575](https://jira.bars.group/browse/EDUKNDG-14575)
|
58
|
+
PATCH Удалён UploaderLogListWindow, настройка пагинации перенесена в UploaderLogPack.configure_grid
|
59
|
+
|
60
|
+
|
32
61
|
## [3.8.0] - 2025-05-15
|
33
62
|
|
34
63
|
Реализован функционал фильтрации объектов перед сохранением, позволяющий исключать неизменённые данные из операции
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.9.0
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Author-email: BARS Group <education_dev@bars.group>
|
6
6
|
Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/edu_rdm_integration/browse
|
@@ -0,0 +1,121 @@
|
|
1
|
+
from django.conf import (
|
2
|
+
settings,
|
3
|
+
)
|
4
|
+
from m3 import (
|
5
|
+
OperationResult,
|
6
|
+
)
|
7
|
+
from m3_ext.ui.containers import (
|
8
|
+
ExtGridCheckBoxSelModel,
|
9
|
+
)
|
10
|
+
from objectpack.actions import (
|
11
|
+
BaseAction,
|
12
|
+
BaseWindowAction,
|
13
|
+
ObjectPack,
|
14
|
+
)
|
15
|
+
from objectpack.filters import (
|
16
|
+
ColumnFilterEngine,
|
17
|
+
)
|
18
|
+
|
19
|
+
from edu_rdm_integration.collect_and_export_data.ui import (
|
20
|
+
CommandQueueSelectWindow,
|
21
|
+
)
|
22
|
+
from edu_rdm_integration.collect_and_export_data.utils import (
|
23
|
+
BaseTaskStarter,
|
24
|
+
)
|
25
|
+
from edu_rdm_integration.export_data.ui import (
|
26
|
+
CommandProgressListWindow,
|
27
|
+
)
|
28
|
+
from edu_rdm_integration.helpers import (
|
29
|
+
make_download_link,
|
30
|
+
)
|
31
|
+
|
32
|
+
|
33
|
+
class BaseCommandProgressPack(ObjectPack):
|
34
|
+
"""Базовый пак прогресса выполнения команд сбора/экспорта данных."""
|
35
|
+
|
36
|
+
list_window = CommandProgressListWindow
|
37
|
+
can_delete = False
|
38
|
+
|
39
|
+
select_related = ['task', 'stage__status']
|
40
|
+
|
41
|
+
filter_engine_clz = ColumnFilterEngine
|
42
|
+
|
43
|
+
def __init__(self):
|
44
|
+
super().__init__()
|
45
|
+
|
46
|
+
self.queue_select_win_action = QueueLevelSelectWinAction()
|
47
|
+
|
48
|
+
self.actions.append(self.queue_select_win_action)
|
49
|
+
|
50
|
+
def get_list_window_params(self, params, request, context):
|
51
|
+
"""Получает параметры окна списка."""
|
52
|
+
params = super().get_list_window_params(params, request, context)
|
53
|
+
|
54
|
+
params['queue_select_win_url'] = self.queue_select_win_action.get_absolute_url()
|
55
|
+
|
56
|
+
return params
|
57
|
+
|
58
|
+
def get_edit_window_params(self, params, request, context):
|
59
|
+
"""Возвращает словарь параметров, которые будут переданы окну редактирования."""
|
60
|
+
params = super().get_edit_window_params(params, request, context)
|
61
|
+
|
62
|
+
if not params['create_new']:
|
63
|
+
params['read_only'] = True
|
64
|
+
obj = params['object']
|
65
|
+
params['log_url'] = make_download_link(obj.logs_link)
|
66
|
+
|
67
|
+
return params
|
68
|
+
|
69
|
+
def configure_grid(self, grid, *args, **kwargs):
|
70
|
+
"""Конфигурирует грид."""
|
71
|
+
super().configure_grid(grid, *args, **kwargs)
|
72
|
+
|
73
|
+
grid.sm = ExtGridCheckBoxSelModel()
|
74
|
+
grid.top_bar.button_new.text = 'Сгенерировать команды'
|
75
|
+
grid.top_bar.button_edit.text = 'Просмотр'
|
76
|
+
grid.top_bar.button_edit.icon_cls = 'icon-application-view-detail'
|
77
|
+
grid.context_menu_row.menuitem_edit.text = 'Просмотр'
|
78
|
+
grid.context_menu_row.menuitem_edit.icon_cls = 'icon-application-view-detail'
|
79
|
+
|
80
|
+
def extend_menu(self, menu):
|
81
|
+
"""Расширяет главное меню."""
|
82
|
+
if settings.RDM_MENU_ITEM:
|
83
|
+
return menu.SubMenu(
|
84
|
+
'Администрирование',
|
85
|
+
menu.SubMenu(
|
86
|
+
'Региональная витрина данных',
|
87
|
+
menu.Item(
|
88
|
+
self.title,
|
89
|
+
self.list_window_action,
|
90
|
+
),
|
91
|
+
icon='menu-dicts-16',
|
92
|
+
),
|
93
|
+
)
|
94
|
+
|
95
|
+
|
96
|
+
class BaseStartTaskAction(BaseAction):
|
97
|
+
"""
|
98
|
+
Базовый экшн создания асинхронных задач для выгрузки РВД.
|
99
|
+
"""
|
100
|
+
|
101
|
+
url: str = None
|
102
|
+
|
103
|
+
task_starter: BaseTaskStarter = None
|
104
|
+
|
105
|
+
def run(self, request, context):
|
106
|
+
"""Непосредственное исполнение запроса."""
|
107
|
+
queue_level = getattr(context, 'queue_level', None)
|
108
|
+
result = self.task_starter().run(command_ids=context.commands, queue_level=queue_level) # noqa pylint: disable=not-callable
|
109
|
+
|
110
|
+
return OperationResult(
|
111
|
+
success=True,
|
112
|
+
message=result,
|
113
|
+
)
|
114
|
+
|
115
|
+
|
116
|
+
class QueueLevelSelectWinAction(BaseWindowAction):
|
117
|
+
"""Экшен окна выбора очереди для запуска ручной команды собра/выгрузки."""
|
118
|
+
|
119
|
+
def create_window(self):
|
120
|
+
"""Создание окна."""
|
121
|
+
self.win = CommandQueueSelectWindow()
|
@@ -0,0 +1,137 @@
|
|
1
|
+
from typing import (
|
2
|
+
Iterable,
|
3
|
+
)
|
4
|
+
|
5
|
+
from m3_ext.ui import (
|
6
|
+
all_components as ext,
|
7
|
+
)
|
8
|
+
from m3_ext.ui.icons import (
|
9
|
+
Icons,
|
10
|
+
)
|
11
|
+
from objectpack.ui import (
|
12
|
+
BaseEditWindow,
|
13
|
+
BaseWindow,
|
14
|
+
ComboBoxWithStore,
|
15
|
+
)
|
16
|
+
|
17
|
+
from educommon.objectpack.ui import (
|
18
|
+
BaseListWindow,
|
19
|
+
)
|
20
|
+
from educommon.utils.ui import (
|
21
|
+
append_template_globals,
|
22
|
+
)
|
23
|
+
|
24
|
+
from edu_rdm_integration.enums import (
|
25
|
+
EntityLevelQueueTypeEnum,
|
26
|
+
)
|
27
|
+
|
28
|
+
|
29
|
+
class CommandProgressListWindow(BaseListWindow):
|
30
|
+
"""Окно списка команд на сбор/экспорт данных."""
|
31
|
+
|
32
|
+
def set_params(self, params):
|
33
|
+
"""Устанавливает параметры окна."""
|
34
|
+
super().set_params(params)
|
35
|
+
|
36
|
+
self.maximized = True
|
37
|
+
append_template_globals(self, 'ui-js/start-task.js')
|
38
|
+
append_template_globals(self, 'ui-js/async-task-revoke.js')
|
39
|
+
|
40
|
+
self.start_task_url = params['start_task_url']
|
41
|
+
self.revoke_url = params['revoke_url']
|
42
|
+
self.queue_select_win_url = params['queue_select_win_url']
|
43
|
+
|
44
|
+
def _init_components(self):
|
45
|
+
"""Инициализирует компоненты окна."""
|
46
|
+
super()._init_components()
|
47
|
+
|
48
|
+
self.start_task_button = ext.ExtButton(
|
49
|
+
text='Запустить команду',
|
50
|
+
icon_cls=Icons.APPLICATION_GO,
|
51
|
+
handler='startTask',
|
52
|
+
)
|
53
|
+
self.revoke_task_button = ext.ExtButton(
|
54
|
+
text='Отменить',
|
55
|
+
icon_cls=Icons.CANCEL,
|
56
|
+
handler='revokeTask',
|
57
|
+
)
|
58
|
+
|
59
|
+
def _do_layout(self):
|
60
|
+
"""Располагает компоненты окна."""
|
61
|
+
super()._do_layout()
|
62
|
+
|
63
|
+
self.grid.top_bar.items.insert(1, self.start_task_button)
|
64
|
+
self.grid.top_bar.items.append(self.revoke_task_button)
|
65
|
+
|
66
|
+
|
67
|
+
class BaseCreateCommandWindow(BaseEditWindow):
|
68
|
+
"""Базовое окно создания команды на сбор/экспорт данных."""
|
69
|
+
|
70
|
+
def _init_components(self):
|
71
|
+
"""Инициализация компонентов."""
|
72
|
+
super()._init_components()
|
73
|
+
|
74
|
+
# Поля, которые нужно добавить на форму:
|
75
|
+
self.items_: Iterable = ()
|
76
|
+
|
77
|
+
def _do_layout(self):
|
78
|
+
"""Расположение компонентов."""
|
79
|
+
super()._do_layout()
|
80
|
+
|
81
|
+
self.form.items.extend(self.items_)
|
82
|
+
|
83
|
+
def set_params(self, params):
|
84
|
+
"""Параметры окна."""
|
85
|
+
super().set_params(params)
|
86
|
+
|
87
|
+
self.form.label_width = 150
|
88
|
+
self.width = 400
|
89
|
+
self.height = 'auto'
|
90
|
+
|
91
|
+
|
92
|
+
class CommandQueueSelectWindow(BaseWindow):
|
93
|
+
"""Окно выбора очереди для запуска периодических задач команд."""
|
94
|
+
|
95
|
+
def _init_components(self):
|
96
|
+
"""Инициализация компонентов."""
|
97
|
+
super()._init_components()
|
98
|
+
|
99
|
+
self.queue_level_combobox = ComboBoxWithStore(
|
100
|
+
label='Очередь выполнения команд',
|
101
|
+
name='queue_level',
|
102
|
+
data=EntityLevelQueueTypeEnum.get_choices(),
|
103
|
+
value=EntityLevelQueueTypeEnum.BASE,
|
104
|
+
allow_blank=False,
|
105
|
+
editable=False,
|
106
|
+
anchor='100%',
|
107
|
+
)
|
108
|
+
self.close_btn = self.btn_close = ext.ExtButton(
|
109
|
+
name='close_btn',
|
110
|
+
text='Закрыть',
|
111
|
+
handler='function(){Ext.getCmp("%s").close();}' % self.client_id,
|
112
|
+
)
|
113
|
+
self.start_task_button = ext.ExtButton(
|
114
|
+
name='start_task',
|
115
|
+
text='Запустить команду',
|
116
|
+
handler='function(){ win.fireEvent("closed_ok");}',
|
117
|
+
)
|
118
|
+
|
119
|
+
def _do_layout(self):
|
120
|
+
"""Расположение компонентов."""
|
121
|
+
super()._do_layout()
|
122
|
+
|
123
|
+
self.items.append(self.queue_level_combobox)
|
124
|
+
self.buttons.extend(
|
125
|
+
(
|
126
|
+
self.start_task_button,
|
127
|
+
self.btn_close,
|
128
|
+
)
|
129
|
+
)
|
130
|
+
|
131
|
+
def set_params(self, params):
|
132
|
+
"""Параметры окна."""
|
133
|
+
super().set_params(params)
|
134
|
+
|
135
|
+
self.width = 400
|
136
|
+
self.height = 'auto'
|
137
|
+
self.title = 'Очередь для выполнения команды'
|
@@ -0,0 +1,224 @@
|
|
1
|
+
from abc import (
|
2
|
+
ABC,
|
3
|
+
abstractmethod,
|
4
|
+
)
|
5
|
+
from typing import (
|
6
|
+
Dict,
|
7
|
+
Iterable,
|
8
|
+
Optional,
|
9
|
+
)
|
10
|
+
|
11
|
+
from django.db.models import (
|
12
|
+
QuerySet,
|
13
|
+
)
|
14
|
+
|
15
|
+
from educommon.async_task.exceptions import (
|
16
|
+
TaskUniqueException,
|
17
|
+
)
|
18
|
+
from educommon.async_task.models import (
|
19
|
+
AsyncTaskType,
|
20
|
+
)
|
21
|
+
from educommon.async_task.tasks import (
|
22
|
+
AsyncTask,
|
23
|
+
)
|
24
|
+
|
25
|
+
from edu_rdm_integration.collect_and_export_data.models import (
|
26
|
+
EduRdmCollectDataCommandProgress,
|
27
|
+
EduRdmExportDataCommandProgress,
|
28
|
+
)
|
29
|
+
from edu_rdm_integration.collect_data.collect import (
|
30
|
+
BaseCollectModelsDataByGeneratingLogs,
|
31
|
+
)
|
32
|
+
from edu_rdm_integration.consts import (
|
33
|
+
TASK_QUEUE_NAME,
|
34
|
+
)
|
35
|
+
from edu_rdm_integration.enums import (
|
36
|
+
EntityLevelQueueTypeEnum,
|
37
|
+
)
|
38
|
+
from edu_rdm_integration.export_data.export import (
|
39
|
+
ExportEntitiesData,
|
40
|
+
)
|
41
|
+
from edu_rdm_integration.helpers import (
|
42
|
+
save_command_log_link,
|
43
|
+
)
|
44
|
+
|
45
|
+
|
46
|
+
class CollectCommandMixin:
|
47
|
+
"""Класс-примесь для запуска команды сборки моделей."""
|
48
|
+
|
49
|
+
queue = TASK_QUEUE_NAME
|
50
|
+
routing_key = TASK_QUEUE_NAME
|
51
|
+
description = 'Сбор данных моделей РВД'
|
52
|
+
task_type = AsyncTaskType.SYSTEM
|
53
|
+
|
54
|
+
def get_collect_command(self, command_id: int) -> EduRdmCollectDataCommandProgress:
|
55
|
+
"""Возвращает экземпляр модели команды запуска."""
|
56
|
+
command = EduRdmCollectDataCommandProgress.objects.get(id=command_id)
|
57
|
+
|
58
|
+
return command
|
59
|
+
|
60
|
+
def get_collect_models_class(self):
|
61
|
+
"""Возвращает класс для сбора данных."""
|
62
|
+
return BaseCollectModelsDataByGeneratingLogs
|
63
|
+
|
64
|
+
def run_collect_command(self, command) -> None:
|
65
|
+
"""Запуск команды сбора."""
|
66
|
+
collect_models_data_class = self.get_collect_models_class()
|
67
|
+
collect_models_data_class(
|
68
|
+
models=(command.model_id,),
|
69
|
+
logs_period_started_at=command.logs_period_started_at,
|
70
|
+
logs_period_ended_at=command.logs_period_ended_at,
|
71
|
+
command_id=command.id,
|
72
|
+
institute_ids=tuple(command.institute_ids or ()),
|
73
|
+
).collect()
|
74
|
+
|
75
|
+
def save_collect_command_logs(self, command_id: int, log_dir: str):
|
76
|
+
"""Сохранение ссылки на файл логов в команде."""
|
77
|
+
try:
|
78
|
+
command = self.get_collect_command(command_id)
|
79
|
+
except EduRdmCollectDataCommandProgress.DoesNotExist:
|
80
|
+
command = None
|
81
|
+
|
82
|
+
if command:
|
83
|
+
save_command_log_link(command, log_dir)
|
84
|
+
|
85
|
+
|
86
|
+
class ExportCommandMixin:
|
87
|
+
"""Класс-примесь для запуска команды выгрузки сущностей."""
|
88
|
+
|
89
|
+
queue = TASK_QUEUE_NAME
|
90
|
+
routing_key = TASK_QUEUE_NAME
|
91
|
+
description = 'Экспорт данных сущностей РВД'
|
92
|
+
task_type = AsyncTaskType.SYSTEM
|
93
|
+
|
94
|
+
def get_export_command(self, command_id: int) -> EduRdmExportDataCommandProgress:
|
95
|
+
"""Возвращает экземпляр модели команды запуска."""
|
96
|
+
command = EduRdmExportDataCommandProgress.objects.get(id=command_id)
|
97
|
+
|
98
|
+
return command
|
99
|
+
|
100
|
+
def run_export_command(self, command: EduRdmExportDataCommandProgress) -> None:
|
101
|
+
"""Запуск команды выгрузки."""
|
102
|
+
ExportEntitiesData(
|
103
|
+
entities=(command.entity_id,),
|
104
|
+
period_started_at=command.period_started_at,
|
105
|
+
period_ended_at=command.period_ended_at,
|
106
|
+
command_id=command.id,
|
107
|
+
).export()
|
108
|
+
|
109
|
+
def save_export_command_logs(self, command_id: int, log_dir: str):
|
110
|
+
"""Сохранение ссылки на файл логов в команде."""
|
111
|
+
try:
|
112
|
+
command = self.get_export_command(command_id)
|
113
|
+
except EduRdmExportDataCommandProgress.DoesNotExist:
|
114
|
+
command = None
|
115
|
+
|
116
|
+
if command:
|
117
|
+
save_command_log_link(command, log_dir)
|
118
|
+
|
119
|
+
|
120
|
+
class BaseTaskProgressUpdater(ABC):
|
121
|
+
"""Базовый класс, который обновляет данные в таблицах, хранящих команды сбора/экспорта."""
|
122
|
+
|
123
|
+
@property
|
124
|
+
@abstractmethod
|
125
|
+
def update_model(self):
|
126
|
+
"""
|
127
|
+
Основная модель для обновления.
|
128
|
+
|
129
|
+
Необходимо задать в дочернем классе.
|
130
|
+
"""
|
131
|
+
|
132
|
+
@property
|
133
|
+
@abstractmethod
|
134
|
+
def async_model(self):
|
135
|
+
"""
|
136
|
+
Модель асинхронных задач.
|
137
|
+
|
138
|
+
Необходимо задать в дочернем классе.
|
139
|
+
"""
|
140
|
+
|
141
|
+
def set_async_task(self, commands_to_update: Dict[EduRdmCollectDataCommandProgress, str]) -> None:
|
142
|
+
"""Устанавливает ссылку на асинхронную задачу."""
|
143
|
+
for command, task_uuid in commands_to_update.items():
|
144
|
+
command.task_id = task_uuid
|
145
|
+
|
146
|
+
self.update_model.objects.bulk_update(
|
147
|
+
commands_to_update,
|
148
|
+
['task_id'],
|
149
|
+
)
|
150
|
+
|
151
|
+
def set_stage(self, command_id: int, stage_id: int) -> None:
|
152
|
+
"""Устанавливает ссылку на stage."""
|
153
|
+
self.update_model.objects.filter(
|
154
|
+
id=command_id,
|
155
|
+
).update(
|
156
|
+
stage_id=stage_id,
|
157
|
+
)
|
158
|
+
|
159
|
+
|
160
|
+
class BaseTaskStarter(ABC):
|
161
|
+
"""Запускает асинхронные задачи."""
|
162
|
+
|
163
|
+
updater: BaseTaskProgressUpdater = None
|
164
|
+
async_task: AsyncTask = None
|
165
|
+
model_only_fields: Iterable[str] = ()
|
166
|
+
|
167
|
+
def run(self, command_ids: Iterable[int], queue_level: Optional[int] = None) -> str:
|
168
|
+
"""Создает задачи и ставит их в очередь."""
|
169
|
+
commands_to_update = {}
|
170
|
+
skipped_commands_count = 0
|
171
|
+
commands = self._get_commands(command_ids)
|
172
|
+
queue_name = None
|
173
|
+
|
174
|
+
if queue_level:
|
175
|
+
queue_name = EntityLevelQueueTypeEnum.get_queue_name(level=queue_level)
|
176
|
+
|
177
|
+
if not queue_name:
|
178
|
+
queue_name = TASK_QUEUE_NAME
|
179
|
+
|
180
|
+
for command in commands:
|
181
|
+
if command.task_id:
|
182
|
+
# Повторный запуск команды не допускается
|
183
|
+
skipped_commands_count += 1
|
184
|
+
continue
|
185
|
+
|
186
|
+
try:
|
187
|
+
async_result = self.async_task().apply_async( # noqa pylint: disable=not-callable
|
188
|
+
args=None,
|
189
|
+
queue=queue_name,
|
190
|
+
routing_key=queue_name,
|
191
|
+
kwargs={
|
192
|
+
'command_id': command.id,
|
193
|
+
},
|
194
|
+
lock_data={
|
195
|
+
'lock_params': {
|
196
|
+
'command_id': f'{self.updater.update_model.__name__}_{command.id}',
|
197
|
+
},
|
198
|
+
},
|
199
|
+
)
|
200
|
+
except TaskUniqueException:
|
201
|
+
skipped_commands_count += 1
|
202
|
+
continue
|
203
|
+
else:
|
204
|
+
commands_to_update[command] = async_result.task_id
|
205
|
+
|
206
|
+
if commands_to_update:
|
207
|
+
self.updater().set_async_task(commands_to_update) # noqa pylint: disable=not-callable
|
208
|
+
|
209
|
+
message = f'Поставлено задач в очередь: {len(commands_to_update)} из {len(commands)}.'
|
210
|
+
if skipped_commands_count:
|
211
|
+
message += (
|
212
|
+
f' Кол-во задач, которые были запущены ранее: {skipped_commands_count}. '
|
213
|
+
'Однажды запущенные задачи не могут быть запущены снова!'
|
214
|
+
)
|
215
|
+
|
216
|
+
return message
|
217
|
+
|
218
|
+
def _get_commands(self, command_ids: Iterable[int]) -> 'QuerySet':
|
219
|
+
"""Возвращает Queryset команд для создания задач."""
|
220
|
+
return self.updater.update_model.objects.filter(
|
221
|
+
id__in=command_ids,
|
222
|
+
).only(
|
223
|
+
*self.model_only_fields,
|
224
|
+
)
|