edu-rdm-integration 3.3.6__tar.gz → 3.4.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.3.6 → edu-rdm-integration-3.4.0}/CHANGELOG.md +23 -1
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/PKG-INFO +25 -3
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/internal_packages.txt +1 -1
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/internal_sources.txt +1 -1
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/setup.py +1 -1
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/tests.py +5 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/enum_register/mixins.py +19 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/export.py +113 -53
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/export_manger.py +36 -9
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/helpers.py +16 -13
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/mapping.py +3 -0
- edu-rdm-integration-3.4.0/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +43 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/models.py +50 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/tasks.py +27 -15
- edu-rdm-integration-3.4.0/src/edu_rdm_integration/typing.py +28 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/utils.py +75 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/PKG-INFO +25 -3
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +2 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/requires.txt +1 -1
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/CONDUCT.md +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/LICENSE +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/MANIFEST.in +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/README.md +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/pyproject.toml +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/development_packages.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/external_packages.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/production_packages.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/system_packages.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/dependencies/testing_packages.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/development.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/production.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/requirements/stage.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/setup.cfg +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/results.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/app_meta.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/app_settings.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/apps.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/base.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_and_export_data/utils.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/mixins.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/generators.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/consts.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/entities.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/enum_register/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/enum_register/register.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/enums.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/dataclasses.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/helpers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/queue.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/apps.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/caches.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/consts.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/enums.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/errors.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/functions.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/managers.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/results.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/runners.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/strings.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/tests.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/validators.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/__init__.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/apps.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/caches.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/consts.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/enums.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/errors.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/presenters.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/results.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/strings.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/tests.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/function_templates/function_export_data_template/validators.py-tpl +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/check_upload_status.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/collect_latest_models_data.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/datamart_status.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/datamart_upload.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/commands/export_latest_entities_data.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/management/general.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/redis_cache.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/registry/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/registry/actions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/registry/ui.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/signals.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/storages.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/templates/ui-js/transferred-entity-list.js +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/__init__.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/actions.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/apps.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/enums.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/managers.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration/uploader_log/ui.py +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/namespace_packages.txt +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/not-zip-safe +0 -0
- {edu-rdm-integration-3.3.6 → edu-rdm-integration-3.4.0}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -28,6 +28,29 @@
|
|
28
28
|
|
29
29
|
### Удалено
|
30
30
|
|
31
|
+
|
32
|
+
## 3.4.0 - 2024-09-25
|
33
|
+
В базовый класс тестирования функций сбора добавлена поддержка формата PhoneNumber для формирования
|
34
|
+
экземпляра модели AuditLog.
|
35
|
+
Повышена версия зависимости educommon >= 3.11.0.
|
36
|
+
Вынесены утилиты и базовый класс для логирования и сбора по модели в рамках сущности
|
37
|
+
|
38
|
+
## Добавлено
|
39
|
+
- [EDUSCHL-22378](https://jira.bars.group/browse/EDUSCHL-22378)
|
40
|
+
Реализация поля моделей Django содержащего номер телефона
|
41
|
+
|
42
|
+
### Изменено
|
43
|
+
- [EDUKNDG-14516](https://jira.bars.group/browse/EDUKNDG-14516)
|
44
|
+
PATCH Вынесены утилиты и базовый класс для логирования и сбора по модели в рамках сущности
|
45
|
+
|
46
|
+
|
47
|
+
## 3.3.7 - 2024-09-06
|
48
|
+
Добавлены команда (UploadEntitiesData) и модель (UploadDataCommand) для логирования и запуска выгрузки данных в витрину
|
49
|
+
- [EDUSCHL-22042](https://jira.bars.group/browse/EDUSCHL-22042)
|
50
|
+
PATCH Добавлены команда (UploadEntitiesData) и модель (UploadDataCommand) для логирования и запуска выгрузки данных
|
51
|
+
в витрину
|
52
|
+
|
53
|
+
|
31
54
|
## 3.3.6 - 2024-09-02
|
32
55
|
Добавлена фильтрация по дате выгрузки при обновлении данных на экспорт в BaseExportLatestEntitiesData
|
33
56
|
|
@@ -36,7 +59,6 @@
|
|
36
59
|
PATCH Добавлена фильтрация по дате выгрузки при обновлении данных на экспорт в BaseExportLatestEntitiesData
|
37
60
|
|
38
61
|
|
39
|
-
|
40
62
|
## 3.3.5 - 2024-08-26
|
41
63
|
Классы UniquePeriodicAsyncTask, PeriodicTaskLocker перенесены в educommon.
|
42
64
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.4.0
|
4
4
|
Summary: Интеграция с Региональной витриной данных
|
5
5
|
Home-page:
|
6
6
|
Download-URL:
|
@@ -28,7 +28,7 @@ Requires-Dist: wheel<0.42,>=0.37.1
|
|
28
28
|
Requires-Dist: transliterate<2
|
29
29
|
Requires-Dist: Django<3.3,>=2.2
|
30
30
|
Requires-Dist: celery<5.3,>=4.4.7
|
31
|
-
Requires-Dist: educommon<4,>=3.
|
31
|
+
Requires-Dist: educommon<4,>=3.11.0
|
32
32
|
Requires-Dist: function-tools<1,>=0.9.0
|
33
33
|
Requires-Dist: m3-db-utils<1,>=0.3.10
|
34
34
|
Requires-Dist: m3-django-compat<2,>=1.10.2
|
@@ -301,6 +301,29 @@ Requires-Dist: uploader-client<1,>=0.2.1
|
|
301
301
|
|
302
302
|
### Удалено
|
303
303
|
|
304
|
+
|
305
|
+
## 3.4.0 - 2024-09-25
|
306
|
+
В базовый класс тестирования функций сбора добавлена поддержка формата PhoneNumber для формирования
|
307
|
+
экземпляра модели AuditLog.
|
308
|
+
Повышена версия зависимости educommon >= 3.11.0.
|
309
|
+
Вынесены утилиты и базовый класс для логирования и сбора по модели в рамках сущности
|
310
|
+
|
311
|
+
## Добавлено
|
312
|
+
- [EDUSCHL-22378](https://jira.bars.group/browse/EDUSCHL-22378)
|
313
|
+
Реализация поля моделей Django содержащего номер телефона
|
314
|
+
|
315
|
+
### Изменено
|
316
|
+
- [EDUKNDG-14516](https://jira.bars.group/browse/EDUKNDG-14516)
|
317
|
+
PATCH Вынесены утилиты и базовый класс для логирования и сбора по модели в рамках сущности
|
318
|
+
|
319
|
+
|
320
|
+
## 3.3.7 - 2024-09-06
|
321
|
+
Добавлены команда (UploadEntitiesData) и модель (UploadDataCommand) для логирования и запуска выгрузки данных в витрину
|
322
|
+
- [EDUSCHL-22042](https://jira.bars.group/browse/EDUSCHL-22042)
|
323
|
+
PATCH Добавлены команда (UploadEntitiesData) и модель (UploadDataCommand) для логирования и запуска выгрузки данных
|
324
|
+
в витрину
|
325
|
+
|
326
|
+
|
304
327
|
## 3.3.6 - 2024-09-02
|
305
328
|
Добавлена фильтрация по дате выгрузки при обновлении данных на экспорт в BaseExportLatestEntitiesData
|
306
329
|
|
@@ -309,7 +332,6 @@ Requires-Dist: uploader-client<1,>=0.2.1
|
|
309
332
|
PATCH Добавлена фильтрация по дате выгрузки при обновлении данных на экспорт в BaseExportLatestEntitiesData
|
310
333
|
|
311
334
|
|
312
|
-
|
313
335
|
## 3.3.5 - 2024-08-26
|
314
336
|
Классы UniquePeriodicAsyncTask, PeriodicTaskLocker перенесены в educommon.
|
315
337
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
-e git+ssh://git@stash.bars-open.ru:7999/edubase/educommon.git@release/3.
|
1
|
+
-e git+ssh://git@stash.bars-open.ru:7999/edubase/educommon.git@release/3.11#egg=educommon
|
2
2
|
-e git+ssh://git@stash.bars-open.ru:7999/m3/function-tools.git@release/0.9#egg=function_tools
|
3
3
|
-e git+ssh://git@stash.bars-open.ru:7999/m3/m3_db_utils.git@release/0.3#egg=m3_db_utils
|
4
4
|
-e git+ssh://git@stash.bars-open.ru:7999/eduschl/uploader-client.git@release/0.2#egg=uploader-client
|
@@ -32,6 +32,9 @@ from educommon.audit_log.models import (
|
|
32
32
|
from educommon.integration_entities.enums import (
|
33
33
|
EntityLogOperation,
|
34
34
|
)
|
35
|
+
from educommon.utils.phone_number.phone_number import (
|
36
|
+
PhoneNumber,
|
37
|
+
)
|
35
38
|
from function_tools.models import (
|
36
39
|
Entity,
|
37
40
|
EntityType,
|
@@ -166,6 +169,8 @@ class BaseCollectingFunctionTestCase(TestCase):
|
|
166
169
|
fields[key] = value.name
|
167
170
|
elif isinstance(value, list):
|
168
171
|
fields[key] = f'{{{",".join(map(str, value))}}}'
|
172
|
+
elif isinstance(value, PhoneNumber):
|
173
|
+
fields[key] = value.cleaned
|
169
174
|
else:
|
170
175
|
fields[key] = value
|
171
176
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
from typing import (
|
2
2
|
Any,
|
3
3
|
Dict,
|
4
|
+
NamedTuple,
|
4
5
|
Optional,
|
6
|
+
Type,
|
5
7
|
Tuple,
|
6
8
|
)
|
7
9
|
|
@@ -23,6 +25,9 @@ from edu_rdm_integration.models import (
|
|
23
25
|
RegionalDataMartEntityEnum,
|
24
26
|
RegionalDataMartModelEnum,
|
25
27
|
)
|
28
|
+
from edu_rdm_integration.typing import (
|
29
|
+
MODEL_TYPE_VAR,
|
30
|
+
)
|
26
31
|
from edu_rdm_integration.utils import (
|
27
32
|
camel_to_underscore,
|
28
33
|
)
|
@@ -108,3 +113,17 @@ class ModelEnumRegisterMixin(BaseEnumRegisterMixin):
|
|
108
113
|
register_params['loggable_models'] = cls.loggable_models
|
109
114
|
|
110
115
|
return register_params
|
116
|
+
|
117
|
+
|
118
|
+
class FromNamedTupleMixin:
|
119
|
+
"""Миксин получения экземпляра модели из получаемого кэша значений."""
|
120
|
+
|
121
|
+
@classmethod
|
122
|
+
def from_namedtuple(cls: Type[MODEL_TYPE_VAR], namedtuple: NamedTuple) -> MODEL_TYPE_VAR:
|
123
|
+
"""Создает экземпляр класса из NamedTuple."""
|
124
|
+
return cls(
|
125
|
+
**{
|
126
|
+
field: getattr(namedtuple, field)
|
127
|
+
for field in [f.column for f in cls._meta.get_fields()]
|
128
|
+
}
|
129
|
+
)
|
@@ -15,6 +15,7 @@ from typing import (
|
|
15
15
|
List,
|
16
16
|
Set,
|
17
17
|
Type,
|
18
|
+
Union,
|
18
19
|
)
|
19
20
|
|
20
21
|
from django.conf import (
|
@@ -69,6 +70,13 @@ from edu_rdm_integration.consts import (
|
|
69
70
|
from edu_rdm_integration.enums import (
|
70
71
|
FileUploadStatusEnum,
|
71
72
|
)
|
73
|
+
from edu_rdm_integration.export_data.export_manger import (
|
74
|
+
ExportEntityQueueSender,
|
75
|
+
WorkerSender,
|
76
|
+
)
|
77
|
+
from edu_rdm_integration.export_data.queue import (
|
78
|
+
Queue,
|
79
|
+
)
|
72
80
|
from edu_rdm_integration.helpers import (
|
73
81
|
get_exporting_managers_max_period_ended_dates,
|
74
82
|
)
|
@@ -77,6 +85,9 @@ from edu_rdm_integration.models import (
|
|
77
85
|
ExportingDataSubStageStatus,
|
78
86
|
RegionalDataMartEntityEnum,
|
79
87
|
)
|
88
|
+
from edu_rdm_integration.redis_cache import (
|
89
|
+
AbstractCache,
|
90
|
+
)
|
80
91
|
from edu_rdm_integration.signals import (
|
81
92
|
manager_created,
|
82
93
|
)
|
@@ -121,8 +132,6 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
121
132
|
# Карта соответствия manager_id сущности и его основной модели
|
122
133
|
self.manager_main_model_map: Dict[str, ModelBase] = {}
|
123
134
|
|
124
|
-
self._configure_agent_client()
|
125
|
-
|
126
135
|
@property
|
127
136
|
def _log_file_path(self) -> str:
|
128
137
|
"""
|
@@ -130,57 +139,6 @@ class BaseExportEntitiesData(BaseOperationData):
|
|
130
139
|
"""
|
131
140
|
return os.path.join(settings.MEDIA_ROOT, settings.RDM_EXPORT_LOG_DIR, f'{self.command_id}.log')
|
132
141
|
|
133
|
-
def _configure_agent_client(self):
|
134
|
-
"""
|
135
|
-
Конфигурирование клиента загрузчика данных в Витрину.
|
136
|
-
|
137
|
-
#TODO Вынужденная мера, т.к. при запуске команды не производится проверка готовности конфигов приложений.
|
138
|
-
# Нужно переработать механизм конфигурирования клиента загрузчика.
|
139
|
-
"""
|
140
|
-
import uploader_client
|
141
|
-
from django.core.cache import (
|
142
|
-
DEFAULT_CACHE_ALIAS,
|
143
|
-
caches,
|
144
|
-
)
|
145
|
-
from uploader_client.contrib.rdm.interfaces.configurations import (
|
146
|
-
RegionalDataMartUploaderConfig,
|
147
|
-
)
|
148
|
-
if settings.RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION:
|
149
|
-
uploader_client.set_config(
|
150
|
-
RegionalDataMartUploaderConfig(
|
151
|
-
interface='uploader_client.contrib.rdm.interfaces.rest.OpenAPIInterfaceEmulation',
|
152
|
-
url=settings.RDM_UPLOADER_CLIENT_URL,
|
153
|
-
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
154
|
-
timeout=1,
|
155
|
-
request_retries=1,
|
156
|
-
)
|
157
|
-
)
|
158
|
-
elif settings.RDM_UPLOADER_CLIENT_USE_PROXY_API:
|
159
|
-
uploader_client.set_config(
|
160
|
-
RegionalDataMartUploaderConfig(
|
161
|
-
interface='uploader_client.contrib.rdm.interfaces.rest.ProxyAPIInterface',
|
162
|
-
cache=caches[DEFAULT_CACHE_ALIAS],
|
163
|
-
url=settings.RDM_UPLOADER_CLIENT_URL,
|
164
|
-
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
165
|
-
timeout=settings.RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT,
|
166
|
-
request_retries=settings.RDM_UPLOADER_CLIENT_REQUEST_RETRIES,
|
167
|
-
organization_ogrn=settings.RDM_UPLOADER_CLIENT_ORGANIZATION_OGRN,
|
168
|
-
installation_name=settings.RDM_UPLOADER_CLIENT_INSTALLATION_NAME,
|
169
|
-
installation_id=settings.RDM_UPLOADER_CLIENT_INSTALLATION_ID,
|
170
|
-
username=settings.RDM_UPLOADER_CLIENT_USERNAME,
|
171
|
-
password=settings.RDM_UPLOADER_CLIENT_PASSWORD,
|
172
|
-
)
|
173
|
-
)
|
174
|
-
else:
|
175
|
-
uploader_client.set_config(
|
176
|
-
RegionalDataMartUploaderConfig(
|
177
|
-
url=settings.RDM_UPLOADER_CLIENT_URL,
|
178
|
-
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
179
|
-
timeout=settings.RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT,
|
180
|
-
request_retries=settings.RDM_UPLOADER_CLIENT_REQUEST_RETRIES,
|
181
|
-
)
|
182
|
-
)
|
183
|
-
|
184
142
|
def _has_stage_created_or_in_progress(self, manager_id: str, entity: str) -> bool:
|
185
143
|
"""Проверяет есть ли готовый к работе stage или в работе для данной сущности."""
|
186
144
|
stage_created_or_in_progress = ExportingDataStage.objects.filter(
|
@@ -414,3 +372,105 @@ class ExportLatestEntitiesData(BaseExportLatestEntitiesData):
|
|
414
372
|
def _get_async_task(self) -> Model:
|
415
373
|
"""Возвращает модель асинхронной задачи."""
|
416
374
|
return RunningTask
|
375
|
+
|
376
|
+
|
377
|
+
class UploadEntitiesData(BaseOperationData):
|
378
|
+
"""Класс отправки файлов с сущностями в витрину."""
|
379
|
+
|
380
|
+
def __init__(
|
381
|
+
self,
|
382
|
+
entities: Iterable[str],
|
383
|
+
data_cache: AbstractCache,
|
384
|
+
queue: Queue,
|
385
|
+
**kwargs,
|
386
|
+
):
|
387
|
+
super().__init__(**kwargs)
|
388
|
+
|
389
|
+
# Если сущности не указаны, берется значение по умолчанию - все сущности:
|
390
|
+
self.entities = entities if entities else RegionalDataMartEntityEnum.get_enum_data().keys()
|
391
|
+
|
392
|
+
self.data_cache = data_cache
|
393
|
+
self.queue = queue
|
394
|
+
|
395
|
+
self.task_id = kwargs.get('task_id')
|
396
|
+
|
397
|
+
self._configure_agent_client()
|
398
|
+
|
399
|
+
@property
|
400
|
+
def _log_file_path(self) -> Union[str, bytes]:
|
401
|
+
"""
|
402
|
+
Путь до лог файла.
|
403
|
+
"""
|
404
|
+
if self.command_id:
|
405
|
+
log_file_path = os.path.join(settings.MEDIA_ROOT, settings.RDM_UPLOAD_LOG_DIR, f'{self.command_id}.log')
|
406
|
+
else:
|
407
|
+
log_file_path = os.path.join(settings.MEDIA_ROOT, settings.RDM_UPLOAD_LOG_DIR, 'upload_entity.log')
|
408
|
+
|
409
|
+
return log_file_path
|
410
|
+
|
411
|
+
# TODO https://jira.bars.group/browse/EDUSCHL-22492. Вынужденная мера, т.к. при запуске команды не производится
|
412
|
+
# проверка готовности конфигов приложений. Нужно переработать механизм конфигурирования клиента загрузчика.
|
413
|
+
def _configure_agent_client(self):
|
414
|
+
"""
|
415
|
+
Конфигурирование клиента загрузчика данных в Витрину.
|
416
|
+
"""
|
417
|
+
import uploader_client
|
418
|
+
from django.core.cache import (
|
419
|
+
DEFAULT_CACHE_ALIAS,
|
420
|
+
caches,
|
421
|
+
)
|
422
|
+
from uploader_client.contrib.rdm.interfaces.configurations import (
|
423
|
+
RegionalDataMartUploaderConfig,
|
424
|
+
)
|
425
|
+
if settings.RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION:
|
426
|
+
uploader_client.set_config(
|
427
|
+
RegionalDataMartUploaderConfig(
|
428
|
+
interface='uploader_client.contrib.rdm.interfaces.rest.OpenAPIInterfaceEmulation',
|
429
|
+
url=settings.RDM_UPLOADER_CLIENT_URL,
|
430
|
+
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
431
|
+
timeout=1,
|
432
|
+
request_retries=1,
|
433
|
+
)
|
434
|
+
)
|
435
|
+
elif settings.RDM_UPLOADER_CLIENT_USE_PROXY_API:
|
436
|
+
uploader_client.set_config(
|
437
|
+
RegionalDataMartUploaderConfig(
|
438
|
+
interface='uploader_client.contrib.rdm.interfaces.rest.ProxyAPIInterface',
|
439
|
+
cache=caches[DEFAULT_CACHE_ALIAS],
|
440
|
+
url=settings.RDM_UPLOADER_CLIENT_URL,
|
441
|
+
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
442
|
+
timeout=settings.RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT,
|
443
|
+
request_retries=settings.RDM_UPLOADER_CLIENT_REQUEST_RETRIES,
|
444
|
+
organization_ogrn=settings.RDM_UPLOADER_CLIENT_ORGANIZATION_OGRN,
|
445
|
+
installation_name=settings.RDM_UPLOADER_CLIENT_INSTALLATION_NAME,
|
446
|
+
installation_id=settings.RDM_UPLOADER_CLIENT_INSTALLATION_ID,
|
447
|
+
username=settings.RDM_UPLOADER_CLIENT_USERNAME,
|
448
|
+
password=settings.RDM_UPLOADER_CLIENT_PASSWORD,
|
449
|
+
)
|
450
|
+
)
|
451
|
+
else:
|
452
|
+
uploader_client.set_config(
|
453
|
+
RegionalDataMartUploaderConfig(
|
454
|
+
url=settings.RDM_UPLOADER_CLIENT_URL,
|
455
|
+
datamart_name=settings.RDM_UPLOADER_CLIENT_DATAMART_NAME,
|
456
|
+
timeout=settings.RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT,
|
457
|
+
request_retries=settings.RDM_UPLOADER_CLIENT_REQUEST_RETRIES,
|
458
|
+
)
|
459
|
+
)
|
460
|
+
|
461
|
+
def upload_data(self, *args, **kwargs):
|
462
|
+
"""
|
463
|
+
Запускает отправку данных в витрину.
|
464
|
+
"""
|
465
|
+
try:
|
466
|
+
exporter = ExportEntityQueueSender(self.data_cache, self.queue, self.entities)
|
467
|
+
exporter.run()
|
468
|
+
|
469
|
+
sender = WorkerSender(self.queue)
|
470
|
+
sender.run()
|
471
|
+
|
472
|
+
except Exception as err:
|
473
|
+
logger.exception(err)
|
474
|
+
raise err
|
475
|
+
finally:
|
476
|
+
self._remove_file_handler()
|
@@ -1,10 +1,8 @@
|
|
1
|
-
from datetime import (
|
2
|
-
datetime,
|
3
|
-
)
|
4
1
|
from pathlib import (
|
5
2
|
Path,
|
6
3
|
)
|
7
4
|
from typing import (
|
5
|
+
Iterable,
|
8
6
|
List,
|
9
7
|
)
|
10
8
|
|
@@ -13,6 +11,7 @@ from django.conf import (
|
|
13
11
|
)
|
14
12
|
from django.db.models import (
|
15
13
|
F,
|
14
|
+
Q,
|
16
15
|
Sum,
|
17
16
|
)
|
18
17
|
from django.db.transaction import (
|
@@ -83,10 +82,14 @@ class ExportQueueSender:
|
|
83
82
|
return file_size or 0
|
84
83
|
|
85
84
|
@staticmethod
|
86
|
-
def
|
85
|
+
def _make_stage_filter(self) -> Q:
|
86
|
+
"""Формирование фильтра для выборки подэтапов."""
|
87
|
+
return Q(status_id=ExportingDataSubStageStatus.READY_FOR_EXPORT.key)
|
88
|
+
|
89
|
+
def get_sub_stages_attachments_to_export(self):
|
87
90
|
"""Выборка готовых к экспорту подэтапов."""
|
88
91
|
return ExportingDataSubStage.objects.filter(
|
89
|
-
|
92
|
+
self._make_stage_filter()
|
90
93
|
).annotate(
|
91
94
|
attachment_id=F('exportingdatasubstageattachment__id'),
|
92
95
|
attachment_name=F('exportingdatasubstageattachment__attachment'),
|
@@ -117,10 +120,14 @@ class ExportQueueSender:
|
|
117
120
|
timeout=settings.RDM_REDIS_CACHE_TIMEOUT_SECONDS
|
118
121
|
)
|
119
122
|
|
123
|
+
logger.info(
|
124
|
+
f'ExportedDataSubStage {sub_stage_id} {entity_name} added to the queue'
|
125
|
+
)
|
126
|
+
|
120
127
|
return True
|
121
128
|
|
122
129
|
def run(self):
|
123
|
-
"""Запуск работы
|
130
|
+
"""Запуск работы очереди."""
|
124
131
|
if not self.queue_total_file_size:
|
125
132
|
self.queue_total_file_size = self.get_exported_file_size()
|
126
133
|
|
@@ -133,9 +140,7 @@ class ExportQueueSender:
|
|
133
140
|
if prev_sub_stage != stage_attachment['id']:
|
134
141
|
if stage_files:
|
135
142
|
to_cache = self.set_sub_stage_to_cache(prev_sub_stage, entity, stage_files)
|
136
|
-
|
137
|
-
f'ExportedDataSubStage {prev_sub_stage} {entity} added to the queue'
|
138
|
-
)
|
143
|
+
|
139
144
|
stage_files = []
|
140
145
|
|
141
146
|
if not to_cache:
|
@@ -162,6 +167,25 @@ class ExportQueueSender:
|
|
162
167
|
self.queue_total_file_size,
|
163
168
|
timeout=settings.RDM_REDIS_CACHE_TIMEOUT_SECONDS
|
164
169
|
)
|
170
|
+
logger.warning(
|
171
|
+
f'Total exported file size: {self.queue_total_file_size} - queue is full!!!'
|
172
|
+
)
|
173
|
+
|
174
|
+
|
175
|
+
class ExportEntityQueueSender(ExportQueueSender):
|
176
|
+
"""Класс отправки данных по конкретной сущности в очередь РВД."""
|
177
|
+
|
178
|
+
def __init__(self, data_cache: AbstractCache, queue: Queue, entity: Iterable[str]):
|
179
|
+
super().__init__(data_cache, queue)
|
180
|
+
|
181
|
+
self.entity = entity
|
182
|
+
|
183
|
+
def _make_stage_filter(self) -> Q:
|
184
|
+
"""Формирование фильтра для выборки подэтапов."""
|
185
|
+
return Q(
|
186
|
+
status_id=ExportingDataSubStageStatus.READY_FOR_EXPORT.key,
|
187
|
+
exportingdatasubstageentity__entity_id__in=self.entity
|
188
|
+
)
|
165
189
|
|
166
190
|
|
167
191
|
class WorkerSender:
|
@@ -240,6 +264,9 @@ class WorkerSender:
|
|
240
264
|
sub_stage.save()
|
241
265
|
|
242
266
|
self.queue.delete_from_queue(sub_stage_id=sub_stage_id, entity_name=entity_key)
|
267
|
+
logger.info(
|
268
|
+
f'ExportedDataSubStage {sub_stage_id} {entity_key} sended from the queue'
|
269
|
+
)
|
243
270
|
|
244
271
|
def run(self):
|
245
272
|
"""Запуск воркера отправки."""
|
@@ -10,8 +10,8 @@ from typing import (
|
|
10
10
|
TYPE_CHECKING,
|
11
11
|
Any,
|
12
12
|
Dict,
|
13
|
-
List,
|
14
13
|
Iterable,
|
14
|
+
List,
|
15
15
|
Optional,
|
16
16
|
Tuple,
|
17
17
|
Union,
|
@@ -33,16 +33,16 @@ from django.db.models.functions import (
|
|
33
33
|
Cast,
|
34
34
|
Least,
|
35
35
|
)
|
36
|
+
from uploader_client.adapters import (
|
37
|
+
adapter,
|
38
|
+
)
|
36
39
|
|
37
40
|
from educommon import (
|
38
41
|
logger,
|
39
42
|
)
|
40
|
-
|
41
|
-
adapter,
|
42
|
-
)
|
43
|
+
|
43
44
|
from edu_rdm_integration.collect_and_export_data.models import (
|
44
|
-
|
45
|
-
EduRdmExportDataCommandProgress,
|
45
|
+
AbstractExportDataCommandProgress,
|
46
46
|
)
|
47
47
|
from edu_rdm_integration.enums import (
|
48
48
|
FileUploadStatusEnum,
|
@@ -54,32 +54,35 @@ from edu_rdm_integration.export_data.consts import (
|
|
54
54
|
TOTAL_ATTACHMENTS_SIZE_KEY,
|
55
55
|
)
|
56
56
|
from edu_rdm_integration.models import (
|
57
|
-
DataMartRequestStatus,
|
58
|
-
ExportingDataStage,
|
59
57
|
CollectingDataStageStatus,
|
60
58
|
CollectingExportedDataStage,
|
59
|
+
DataMartRequestStatus,
|
60
|
+
ExportingDataStage,
|
61
|
+
ExportingDataStageStatus,
|
61
62
|
ExportingDataSubStageUploaderClientLog,
|
63
|
+
UploadDataCommand,
|
62
64
|
UploadStatusRequestLog,
|
63
|
-
ExportingDataStageStatus,
|
64
65
|
)
|
65
66
|
from edu_rdm_integration.redis_cache import (
|
66
67
|
AbstractCache,
|
67
68
|
)
|
68
69
|
|
70
|
+
|
69
71
|
if TYPE_CHECKING:
|
70
72
|
from datetime import (
|
71
73
|
datetime,
|
72
74
|
)
|
73
75
|
|
76
|
+
from uploader_client.models import (
|
77
|
+
Entry,
|
78
|
+
)
|
79
|
+
|
74
80
|
from edu_rdm_integration.collect_data.non_calculated.base.managers import (
|
75
81
|
BaseCollectingExportedDataRunnerManager,
|
76
82
|
)
|
77
83
|
from edu_rdm_integration.export_data.base.managers import (
|
78
84
|
BaseExportDataRunnerManager,
|
79
85
|
)
|
80
|
-
from uploader_client.models import (
|
81
|
-
Entry,
|
82
|
-
)
|
83
86
|
|
84
87
|
|
85
88
|
class UploadStatusHelper:
|
@@ -311,7 +314,7 @@ class Graph:
|
|
311
314
|
|
312
315
|
|
313
316
|
def save_command_log_link(
|
314
|
-
command: Union[
|
317
|
+
command: Union[AbstractExportDataCommandProgress, UploadDataCommand],
|
315
318
|
log_dir: str
|
316
319
|
) -> None:
|
317
320
|
"""Сохраняет ссылку на лог команды."""
|
@@ -14,3 +14,6 @@ MODEL_FIELDS_LOG_FILTER: Dict[EntityLogOperation, Dict[str, Tuple]] = {
|
|
14
14
|
EntityLogOperation.UPDATE: {},
|
15
15
|
EntityLogOperation.DELETE: {}
|
16
16
|
}
|
17
|
+
|
18
|
+
# Маппинг операций логов моделей и сущностей по умолчанию
|
19
|
+
DEFAULT_ENTITY_LOG_OPERATION_MAP = {op: op for op in EntityLogOperation.values}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Generated by Django 3.1.14 on 2024-09-05 20:35
|
2
|
+
|
3
|
+
import uuid
|
4
|
+
|
5
|
+
import django.db.models.deletion
|
6
|
+
import django.utils.timezone
|
7
|
+
from django.db import (
|
8
|
+
migrations,
|
9
|
+
models,
|
10
|
+
)
|
11
|
+
|
12
|
+
import educommon.django.db.mixins
|
13
|
+
|
14
|
+
import edu_rdm_integration.utils
|
15
|
+
|
16
|
+
|
17
|
+
class Migration(migrations.Migration):
|
18
|
+
|
19
|
+
dependencies = [
|
20
|
+
('async_task', '0002_task_type_and_status_data'),
|
21
|
+
('edu_rdm_integration', '0013_set_attachment_size'),
|
22
|
+
]
|
23
|
+
|
24
|
+
operations = [
|
25
|
+
migrations.CreateModel(
|
26
|
+
name='UploadDataCommand',
|
27
|
+
fields=[
|
28
|
+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
29
|
+
('logs_link', models.FileField(max_length=255, upload_to=edu_rdm_integration.utils.get_data_command_progress_attachment_path, verbose_name='Ссылка на файл логов')),
|
30
|
+
('type', models.PositiveSmallIntegerField(choices=[(1, 'Автоматический'), (2, 'Ручной')], verbose_name='Тип команды')),
|
31
|
+
('created', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата создания')),
|
32
|
+
('generation_id', models.UUIDField(default=uuid.uuid4, verbose_name='Идентификатор генерации')),
|
33
|
+
('entity', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='edu_rdm_integration.regionaldatamartentityenum', verbose_name='Сущность РВД')),
|
34
|
+
('task', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='async_task.runningtask', verbose_name='Асинхронная задача')),
|
35
|
+
],
|
36
|
+
options={
|
37
|
+
'verbose_name': 'Команда отправки данных в витрину',
|
38
|
+
'verbose_name_plural': 'Команды отправки данных в витрину',
|
39
|
+
'db_table': 'rdm_upload_data_command',
|
40
|
+
},
|
41
|
+
bases=(educommon.django.db.mixins.ReprStrPreModelMixin, models.Model),
|
42
|
+
),
|
43
|
+
]
|