edu-rdm-integration 3.5.10__tar.gz → 3.7.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.5.10 → edu_rdm_integration-3.7.0}/CHANGELOG.md +29 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/PKG-INFO +88 -3
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/README.md +87 -2
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/app_settings.py +13 -0
- edu_rdm_integration-3.7.0/src/edu_rdm_integration/base.py +147 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/consts.py +2 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enums.py +31 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/helpers.py +1 -2
- edu_rdm_integration-3.7.0/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +22 -0
- edu_rdm_integration-3.7.0/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +16 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/models.py +6 -39
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/registry/actions.py +23 -4
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/registry/ui.py +44 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/tasks.py +105 -113
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/PKG-INFO +88 -3
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/SOURCES.txt +2 -0
- edu_rdm_integration-3.5.10/src/edu_rdm_integration/base.py +0 -41
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/CONDUCT.md +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/LICENSE +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/MANIFEST.in +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/pyproject.toml +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/setup.cfg +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/apps.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/caches.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/consts.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/enums.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/errors.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/functions.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/managers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/presenters.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/receivers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/results.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/runners.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/strategies.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/strings.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/tests.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/adapters/validators.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/app_meta.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/apps.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_and_export_data/utils.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/caches.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/functions.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/managers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/mixins.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/base/runners.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/caches.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/results.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/calculated/strategies.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/collect.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/generators.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/caches.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/results.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/non_calculated/strategies.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/collect_data/tests.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/entities.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enum_register/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enum_register/mixins.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/enum_register/register.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/caches.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/consts.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/enums.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/errors.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/functions.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/managers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/presenters.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/requests.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/results.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/runners.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/strings.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/tests.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/base/validators.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/consts.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/dataclasses.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/export.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/export_manager.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/generators.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/helpers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/queue.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/export_data/strategies.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_collect_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/function_templates/function_export_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/async_fix_attachment_size.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/check_upload_status.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/collect_latest_models_data.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/collect_models_data.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/datamart_status.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/datamart_upload.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/export_entities_data.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/commands/export_latest_entities_data.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/management/general.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/mapping.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/redis_cache.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/registry/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/signals.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/storages.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/templates/ui-js/transferred-entity-list.js +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/typing.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/__init__.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/actions.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/apps.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/enums.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/managers.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/uploader_log/ui.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/utils.py +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
- {edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
@@ -28,6 +28,35 @@
|
|
28
28
|
|
29
29
|
### Удалено
|
30
30
|
|
31
|
+
## [3.7.0] - 2025-05-12
|
32
|
+
|
33
|
+
### Удалено
|
34
|
+
|
35
|
+
- [EDUSCHL-23121](https://jira.bars.group/browse/EDUSCHL-23121)
|
36
|
+
MINOR Удалена неиспользуемая модель UploadDataCommand
|
37
|
+
|
38
|
+
|
39
|
+
## [3.6.0] - 2025-04-19
|
40
|
+
|
41
|
+
Вводится две новые очереди и соответсвущие этим очередям периодические задачи
|
42
|
+
сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных"
|
43
|
+
- по умолчанию все сущности относятся к основной очереди.
|
44
|
+
Итого - нужно настроить три очереди для работы.
|
45
|
+
|
46
|
+
- "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям
|
47
|
+
витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
|
48
|
+
- Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
|
49
|
+
Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
|
50
|
+
- "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей.
|
51
|
+
Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.
|
52
|
+
|
53
|
+
### Добавлено
|
54
|
+
|
55
|
+
- [EDUSCHL-23348](https://jira.bars.group/browse/EDUSCHL-23348)
|
56
|
+
MINOR Добавлено две дополнительные очереди для сбора и выгрузки данных РВД и соответствующие периодические
|
57
|
+
задачи TransferLatestEntitiesDataFastPeriodicTask и TransferLatestEntitiesDataLongPeriodicTask. Доработан реестр
|
58
|
+
Сущности для сбора и экспорта данных - добавлено окно редактирования для возможности выбора очереди.
|
59
|
+
|
31
60
|
|
32
61
|
## [3.5.10] - 2025-03-24
|
33
62
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: edu-rdm-integration
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.7.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
|
@@ -78,6 +78,19 @@ Dynamic: license-file
|
|
78
78
|
|
79
79
|
Стоит обратить внимание, что сущности РВД могут содержать в себе данные из нескольких моделей РВД.
|
80
80
|
|
81
|
+
Очереди для периодических задач сборки и выгрузки данных
|
82
|
+
: Важно учитывать, что с версии пакета 3.6 вводится две новые очереди и соответсвущие этим очередям периодические задачи
|
83
|
+
сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных" - по умолчанию все
|
84
|
+
сущности относятся к основной очереди.
|
85
|
+
Итого - нужно настроить три очереди для работы.
|
86
|
+
|
87
|
+
- "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям
|
88
|
+
витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
|
89
|
+
- Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
|
90
|
+
Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
|
91
|
+
- "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей.
|
92
|
+
Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.
|
93
|
+
|
81
94
|
## Требования к окружению
|
82
95
|
|
83
96
|
Для работы требуется Python >=3.9. Так же в зависимостях есть внутренние пакеты:
|
@@ -129,6 +142,39 @@ Dynamic: license-file
|
|
129
142
|
('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
|
130
143
|
})
|
131
144
|
```
|
145
|
+
С версии пакета 3.6 добавляются новые настройки для двух периодических задач разных очередей сбора и выгрузки данных
|
146
|
+
```
|
147
|
+
PROJECT_DEFAULT_CONFIG.update({
|
148
|
+
# Настройки РВД
|
149
|
+
('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # Дефолтное значение нужно изменить на специфическое системе
|
150
|
+
('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,
|
151
|
+
('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,
|
152
|
+
('rdm_transfer_task', 'MINUTE'): '0',
|
153
|
+
('rdm_transfer_task', 'HOUR'): '*/4',
|
154
|
+
('rdm_transfer_task', 'DAY_OF_WEEK'): '*',
|
155
|
+
('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS'): 21600,
|
156
|
+
('rdm_transfer_task', 'TIMEDELTA'): 3600,
|
157
|
+
('rdm_transfer_task', 'ENTITIES'): '',
|
158
|
+
('rdm_transfer_task_fast', 'MINUTE'): '*/5',
|
159
|
+
('rdm_transfer_task_fast', 'HOUR'): '*',
|
160
|
+
('rdm_transfer_task_fast', 'DAY_OF_WEEK'): '*',
|
161
|
+
('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS'): 1800,
|
162
|
+
('rdm_transfer_task_long', 'MINUTE'): '0',
|
163
|
+
('rdm_transfer_task_long', 'HOUR'): '*/6',
|
164
|
+
('rdm_transfer_task_long', 'DAY_OF_WEEK'): '*',
|
165
|
+
('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS'): 28800,
|
166
|
+
('rdm_upload_status_task', 'MINUTE'): '*/30',
|
167
|
+
('rdm_upload_status_task', 'HOUR'): '*',
|
168
|
+
('rdm_upload_status_task', 'DAY_OF_WEEK'): '*',
|
169
|
+
('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS'): 7200,
|
170
|
+
('uploader_client', 'URL'): 'http://localhost:8090',
|
171
|
+
('uploader_client', 'DATAMART_NAME'): '',
|
172
|
+
('uploader_client', 'REQUEST_RETRIES'): 10,
|
173
|
+
('uploader_client', 'REQUEST_TIMEOUT'): 10,
|
174
|
+
('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
|
175
|
+
})
|
176
|
+
|
177
|
+
```
|
132
178
|
- Получение значений настроек из конфигурационного файла в settings.py:
|
133
179
|
|
134
180
|
```
|
@@ -187,7 +233,21 @@ Dynamic: license-file
|
|
187
233
|
RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION = conf.get_bool('uploader_client', 'ENABLE_REQUEST_EMULATION')
|
188
234
|
|
189
235
|
```
|
190
|
-
|
236
|
+
С версии пакета 3.6 добавляются настройки для двух новых периодических задач
|
237
|
+
```
|
238
|
+
# Настройка запуска периодической задачи выгрузки данных - быстрая очередь:
|
239
|
+
RDM_FAST_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_fast', 'MINUTE')
|
240
|
+
RDM_FAST_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_fast', 'HOUR')
|
241
|
+
RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_fast', 'DAY_OF_WEEK')
|
242
|
+
RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS')
|
243
|
+
|
244
|
+
# Настройка запуска периодической задачи выгрузки данных - долгая очередь расчетных моделей:
|
245
|
+
RDM_LONG_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_long', 'MINUTE')
|
246
|
+
RDM_LONG_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_long', 'HOUR')
|
247
|
+
RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_long', 'DAY_OF_WEEK')
|
248
|
+
RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS')
|
249
|
+
|
250
|
+
```
|
191
251
|
Перечень настроек в settings.py указан в таблице ниже.
|
192
252
|
|
193
253
|
| Название настройки в settings | Описание | Значение по умолчанию |
|
@@ -211,7 +271,18 @@ Dynamic: license-file
|
|
211
271
|
| RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 3600 |
|
212
272
|
| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
|
213
273
|
|
214
|
-
|
274
|
+
С версии пакета 3.6 добавляются новые настройки
|
275
|
+
|
276
|
+
| Название настройки в settings | Описание | Значение по умолчанию |
|
277
|
+
|--------------------------------------------|----------------------------------------------------------------------------------------|-----------------------|
|
278
|
+
| RDM_FAST_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Минута | '*/5' |
|
279
|
+
| RDM_FAST_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Час | '*' |
|
280
|
+
| RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. День недели | '*' |
|
281
|
+
| RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 1800 |
|
282
|
+
| RDM_LONG_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Минута | 0 |
|
283
|
+
| RDM_LONG_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Час | '*/6' |
|
284
|
+
| RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. День недели | '*' |
|
285
|
+
| RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 28800 |
|
215
286
|
|
216
287
|
- В дефолтный конфиг проекта необходимо добавить:
|
217
288
|
|
@@ -267,7 +338,21 @@ Dynamic: license-file
|
|
267
338
|
# Включить эмуляцию отправки запросов
|
268
339
|
ENABLE_REQUEST_EMULATION = True
|
269
340
|
```
|
341
|
+
- С версии 3.6 в деволтный конфиг также нужно добавить два дополнительных раздела
|
342
|
+
```
|
343
|
+
|
344
|
+
[rdm_transfer_task_fast]
|
345
|
+
MINUTE=*/2
|
346
|
+
HOUR=*
|
347
|
+
DAY_OF_WEEK=*
|
348
|
+
LOCK_EXPIRE_SECONDS = 1800
|
270
349
|
|
350
|
+
[rdm_transfer_task_long]
|
351
|
+
MINUTE=*/15
|
352
|
+
HOUR=*
|
353
|
+
DAY_OF_WEEK=*
|
354
|
+
LOCK_EXPIRE_SECONDS = 21600
|
355
|
+
```
|
271
356
|
На основе дефолтного конфига произвести конфигурирование приложений.
|
272
357
|
|
273
358
|
## Сборка и распространение
|
@@ -34,6 +34,19 @@
|
|
34
34
|
|
35
35
|
Стоит обратить внимание, что сущности РВД могут содержать в себе данные из нескольких моделей РВД.
|
36
36
|
|
37
|
+
Очереди для периодических задач сборки и выгрузки данных
|
38
|
+
: Важно учитывать, что с версии пакета 3.6 вводится две новые очереди и соответсвущие этим очередям периодические задачи
|
39
|
+
сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных" - по умолчанию все
|
40
|
+
сущности относятся к основной очереди.
|
41
|
+
Итого - нужно настроить три очереди для работы.
|
42
|
+
|
43
|
+
- "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям
|
44
|
+
витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
|
45
|
+
- Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
|
46
|
+
Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
|
47
|
+
- "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей.
|
48
|
+
Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.
|
49
|
+
|
37
50
|
## Требования к окружению
|
38
51
|
|
39
52
|
Для работы требуется Python >=3.9. Так же в зависимостях есть внутренние пакеты:
|
@@ -85,6 +98,39 @@
|
|
85
98
|
('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
|
86
99
|
})
|
87
100
|
```
|
101
|
+
С версии пакета 3.6 добавляются новые настройки для двух периодических задач разных очередей сбора и выгрузки данных
|
102
|
+
```
|
103
|
+
PROJECT_DEFAULT_CONFIG.update({
|
104
|
+
# Настройки РВД
|
105
|
+
('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # Дефолтное значение нужно изменить на специфическое системе
|
106
|
+
('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,
|
107
|
+
('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,
|
108
|
+
('rdm_transfer_task', 'MINUTE'): '0',
|
109
|
+
('rdm_transfer_task', 'HOUR'): '*/4',
|
110
|
+
('rdm_transfer_task', 'DAY_OF_WEEK'): '*',
|
111
|
+
('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS'): 21600,
|
112
|
+
('rdm_transfer_task', 'TIMEDELTA'): 3600,
|
113
|
+
('rdm_transfer_task', 'ENTITIES'): '',
|
114
|
+
('rdm_transfer_task_fast', 'MINUTE'): '*/5',
|
115
|
+
('rdm_transfer_task_fast', 'HOUR'): '*',
|
116
|
+
('rdm_transfer_task_fast', 'DAY_OF_WEEK'): '*',
|
117
|
+
('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS'): 1800,
|
118
|
+
('rdm_transfer_task_long', 'MINUTE'): '0',
|
119
|
+
('rdm_transfer_task_long', 'HOUR'): '*/6',
|
120
|
+
('rdm_transfer_task_long', 'DAY_OF_WEEK'): '*',
|
121
|
+
('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS'): 28800,
|
122
|
+
('rdm_upload_status_task', 'MINUTE'): '*/30',
|
123
|
+
('rdm_upload_status_task', 'HOUR'): '*',
|
124
|
+
('rdm_upload_status_task', 'DAY_OF_WEEK'): '*',
|
125
|
+
('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS'): 7200,
|
126
|
+
('uploader_client', 'URL'): 'http://localhost:8090',
|
127
|
+
('uploader_client', 'DATAMART_NAME'): '',
|
128
|
+
('uploader_client', 'REQUEST_RETRIES'): 10,
|
129
|
+
('uploader_client', 'REQUEST_TIMEOUT'): 10,
|
130
|
+
('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
|
131
|
+
})
|
132
|
+
|
133
|
+
```
|
88
134
|
- Получение значений настроек из конфигурационного файла в settings.py:
|
89
135
|
|
90
136
|
```
|
@@ -143,7 +189,21 @@
|
|
143
189
|
RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION = conf.get_bool('uploader_client', 'ENABLE_REQUEST_EMULATION')
|
144
190
|
|
145
191
|
```
|
146
|
-
|
192
|
+
С версии пакета 3.6 добавляются настройки для двух новых периодических задач
|
193
|
+
```
|
194
|
+
# Настройка запуска периодической задачи выгрузки данных - быстрая очередь:
|
195
|
+
RDM_FAST_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_fast', 'MINUTE')
|
196
|
+
RDM_FAST_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_fast', 'HOUR')
|
197
|
+
RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_fast', 'DAY_OF_WEEK')
|
198
|
+
RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS')
|
199
|
+
|
200
|
+
# Настройка запуска периодической задачи выгрузки данных - долгая очередь расчетных моделей:
|
201
|
+
RDM_LONG_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_long', 'MINUTE')
|
202
|
+
RDM_LONG_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_long', 'HOUR')
|
203
|
+
RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_long', 'DAY_OF_WEEK')
|
204
|
+
RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS')
|
205
|
+
|
206
|
+
```
|
147
207
|
Перечень настроек в settings.py указан в таблице ниже.
|
148
208
|
|
149
209
|
| Название настройки в settings | Описание | Значение по умолчанию |
|
@@ -167,7 +227,18 @@
|
|
167
227
|
| RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 3600 |
|
168
228
|
| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
|
169
229
|
|
170
|
-
|
230
|
+
С версии пакета 3.6 добавляются новые настройки
|
231
|
+
|
232
|
+
| Название настройки в settings | Описание | Значение по умолчанию |
|
233
|
+
|--------------------------------------------|----------------------------------------------------------------------------------------|-----------------------|
|
234
|
+
| RDM_FAST_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Минута | '*/5' |
|
235
|
+
| RDM_FAST_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Час | '*' |
|
236
|
+
| RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. День недели | '*' |
|
237
|
+
| RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 1800 |
|
238
|
+
| RDM_LONG_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Минута | 0 |
|
239
|
+
| RDM_LONG_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Час | '*/6' |
|
240
|
+
| RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. День недели | '*' |
|
241
|
+
| RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 28800 |
|
171
242
|
|
172
243
|
- В дефолтный конфиг проекта необходимо добавить:
|
173
244
|
|
@@ -223,7 +294,21 @@
|
|
223
294
|
# Включить эмуляцию отправки запросов
|
224
295
|
ENABLE_REQUEST_EMULATION = True
|
225
296
|
```
|
297
|
+
- С версии 3.6 в деволтный конфиг также нужно добавить два дополнительных раздела
|
298
|
+
```
|
299
|
+
|
300
|
+
[rdm_transfer_task_fast]
|
301
|
+
MINUTE=*/2
|
302
|
+
HOUR=*
|
303
|
+
DAY_OF_WEEK=*
|
304
|
+
LOCK_EXPIRE_SECONDS = 1800
|
226
305
|
|
306
|
+
[rdm_transfer_task_long]
|
307
|
+
MINUTE=*/15
|
308
|
+
HOUR=*
|
309
|
+
DAY_OF_WEEK=*
|
310
|
+
LOCK_EXPIRE_SECONDS = 21600
|
311
|
+
```
|
227
312
|
На основе дефолтного конфига произвести конфигурирование приложений.
|
228
313
|
|
229
314
|
## Сборка и распространение
|
{edu_rdm_integration-3.5.10 → edu_rdm_integration-3.7.0}/src/edu_rdm_integration/app_settings.py
RENAMED
@@ -41,6 +41,19 @@ RDM_TRANSFER_TASK_HOUR = '*/4'
|
|
41
41
|
RDM_TRANSFER_TASK_DAY_OF_WEEK = '*'
|
42
42
|
RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = 60 * 60 * 6
|
43
43
|
|
44
|
+
# Настройка запуска периодической задачи выгрузки данных - очередь быстрого уровня
|
45
|
+
RDM_FAST_TRANSFER_TASK_MINUTE = '*/5'
|
46
|
+
RDM_FAST_TRANSFER_TASK_HOUR = '*'
|
47
|
+
RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = '*'
|
48
|
+
RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = 60 * 30
|
49
|
+
|
50
|
+
# Настройка запуска периодической задачи выгрузки данных - очередь медленного уровня
|
51
|
+
RDM_LONG_TRANSFER_TASK_MINUTE = '0'
|
52
|
+
RDM_LONG_TRANSFER_TASK_HOUR = '*/6'
|
53
|
+
RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = '*'
|
54
|
+
RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = 60 * 60 * 6
|
55
|
+
|
56
|
+
|
44
57
|
# Настройка запуска периодической задачи статуса загрузки данных в витрину:
|
45
58
|
RDM_UPLOAD_STATUS_TASK_MINUTE = '*/30'
|
46
59
|
RDM_UPLOAD_STATUS_TASK_HOUR = '*'
|
@@ -0,0 +1,147 @@
|
|
1
|
+
import logging
|
2
|
+
from abc import (
|
3
|
+
ABC,
|
4
|
+
abstractmethod,
|
5
|
+
)
|
6
|
+
from collections import (
|
7
|
+
defaultdict,
|
8
|
+
)
|
9
|
+
from typing import (
|
10
|
+
Optional,
|
11
|
+
)
|
12
|
+
|
13
|
+
from django.db.models import (
|
14
|
+
Q,
|
15
|
+
)
|
16
|
+
|
17
|
+
from m3_db_utils.consts import (
|
18
|
+
DEFAULT_ORDER_NUMBER,
|
19
|
+
)
|
20
|
+
|
21
|
+
from edu_rdm_integration.consts import (
|
22
|
+
REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA,
|
23
|
+
REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA,
|
24
|
+
)
|
25
|
+
from edu_rdm_integration.helpers import (
|
26
|
+
UploadStatusHelper,
|
27
|
+
get_collecting_managers_max_period_ended_dates,
|
28
|
+
get_exporting_managers_max_period_ended_dates,
|
29
|
+
save_command_log_link,
|
30
|
+
)
|
31
|
+
from edu_rdm_integration.models import (
|
32
|
+
ExportingDataSubStageUploaderClientLog,
|
33
|
+
RegionalDataMartEntityEnum,
|
34
|
+
TransferredEntity,
|
35
|
+
)
|
36
|
+
from edu_rdm_integration.storages import (
|
37
|
+
RegionalDataMartEntityStorage,
|
38
|
+
)
|
39
|
+
|
40
|
+
|
41
|
+
class BaseOperationData(ABC):
|
42
|
+
"""Базовый класс операций с данными."""
|
43
|
+
|
44
|
+
def __init__(self, **kwargs):
|
45
|
+
# Идентификатор команды для передачи сигналу manager_created
|
46
|
+
self.command_id: Optional[int] = kwargs.get('command_id')
|
47
|
+
|
48
|
+
self._file_handler: Optional[logging.FileHandler] = None
|
49
|
+
|
50
|
+
self._add_file_handler()
|
51
|
+
|
52
|
+
@property
|
53
|
+
@abstractmethod
|
54
|
+
def _log_file_path(self) -> str:
|
55
|
+
"""Путь до лог файла."""
|
56
|
+
|
57
|
+
def _add_file_handler(self) -> None:
|
58
|
+
"""Добавляет обработчик логов."""
|
59
|
+
if self.command_id:
|
60
|
+
self._file_handler = logging.FileHandler(self._log_file_path)
|
61
|
+
|
62
|
+
logging.getLogger('info_logger').addHandler(self._file_handler)
|
63
|
+
logging.getLogger('exception_logger').addHandler(self._file_handler)
|
64
|
+
|
65
|
+
def _remove_file_handler(self) -> None:
|
66
|
+
"""Удаляет обработчик логов."""
|
67
|
+
if self._file_handler:
|
68
|
+
logging.getLogger('info_logger').removeHandler(self._file_handler)
|
69
|
+
logging.getLogger('exception_logger').removeHandler(self._file_handler)
|
70
|
+
|
71
|
+
self._file_handler.close()
|
72
|
+
|
73
|
+
|
74
|
+
class BaseTransferLatestEntitiesDataMixin:
|
75
|
+
"""Миксин сбора и выгрузки данных."""
|
76
|
+
|
77
|
+
def __init__(self) -> None:
|
78
|
+
super().__init__()
|
79
|
+
|
80
|
+
self._collecting_data_managers: dict[str, type['RunnerManager']] = {}
|
81
|
+
self._collecting_data_manager_to_logs_period_end: dict[str, 'datetime'] = {}
|
82
|
+
|
83
|
+
self._exporting_data_managers: dict[str, type['RunnerManager']] = {}
|
84
|
+
self._exporting_data_manager_to_period_end: dict[str, 'datetime'] = {}
|
85
|
+
|
86
|
+
self._transferred_entities = []
|
87
|
+
self._entites_models_map = defaultdict(list)
|
88
|
+
|
89
|
+
def get_entity_qs(self) -> 'QuerySet[TransferredEntity]':
|
90
|
+
"""Возвращает сущностей сбора и выгрузки."""
|
91
|
+
raise NotImplementedError
|
92
|
+
|
93
|
+
def _collect_transferred_entities(self) -> None:
|
94
|
+
"""Собирает сущности РВД, по которым будет произведен сбор и экспорт данных."""
|
95
|
+
|
96
|
+
self._transferred_entities = [
|
97
|
+
(RegionalDataMartEntityEnum.get_model_enum_value(key=entity), export_enabled)
|
98
|
+
for entity, export_enabled in self.get_entity_qs().values_list('entity', 'export_enabled')
|
99
|
+
]
|
100
|
+
|
101
|
+
# Собираем словарь по сущностям с моделями для сборки
|
102
|
+
for entity, _ in self._transferred_entities:
|
103
|
+
self._entites_models_map[entity.key].extend(
|
104
|
+
(model_enum for model_enum in (*entity.additional_model_enums, entity.main_model_enum)
|
105
|
+
if model_enum.order_number != DEFAULT_ORDER_NUMBER)
|
106
|
+
)
|
107
|
+
|
108
|
+
def _collect_managers(self) -> None:
|
109
|
+
"""Собирает менеджеры Функций для сбора и выгрузки данных."""
|
110
|
+
entity_storage = RegionalDataMartEntityStorage()
|
111
|
+
entity_storage.prepare()
|
112
|
+
|
113
|
+
collecting_models_data_managers_map = entity_storage.prepare_entities_manager_map(
|
114
|
+
tags={REGIONAL_DATA_MART_INTEGRATION_COLLECTING_DATA},
|
115
|
+
)
|
116
|
+
exporting_entities_data_managers_map = entity_storage.prepare_entities_manager_map(
|
117
|
+
tags={REGIONAL_DATA_MART_INTEGRATION_EXPORTING_DATA},
|
118
|
+
)
|
119
|
+
|
120
|
+
for entity_key, entity_models in self._entites_models_map.items():
|
121
|
+
for entity_model in entity_models:
|
122
|
+
collect_manager_class = collecting_models_data_managers_map.get(entity_model.key)
|
123
|
+
if collect_manager_class:
|
124
|
+
self._collecting_data_managers[entity_model.key] = collect_manager_class
|
125
|
+
|
126
|
+
export_manager_class = exporting_entities_data_managers_map.get(entity_key)
|
127
|
+
if export_manager_class:
|
128
|
+
self._exporting_data_managers[entity_key] = export_manager_class
|
129
|
+
|
130
|
+
def _calculate_collecting_managers_logs_period_ended_at(self) -> None:
|
131
|
+
"""Определяет дату последнего успешного этапа сбора у менеджеров Функций сбора."""
|
132
|
+
self._collecting_data_manager_to_logs_period_end = get_collecting_managers_max_period_ended_dates(
|
133
|
+
self._collecting_data_managers.values()
|
134
|
+
)
|
135
|
+
|
136
|
+
def _calculate_exporting_managers_ended_at(self) -> None:
|
137
|
+
"""Определяет дату последнего успешного подэтапа экспорта у менеджеров Функций экспорта."""
|
138
|
+
self._exporting_data_manager_to_period_end = get_exporting_managers_max_period_ended_dates(
|
139
|
+
self._exporting_data_managers.values()
|
140
|
+
)
|
141
|
+
|
142
|
+
def prepare_collect_export_managers(self) -> None:
|
143
|
+
"""Подготовка менджеров сбора и экспорта."""
|
144
|
+
self._collect_transferred_entities()
|
145
|
+
self._collect_managers()
|
146
|
+
self._calculate_collecting_managers_logs_period_ended_at()
|
147
|
+
self._calculate_exporting_managers_ended_at()
|
@@ -6,6 +6,12 @@ from m3.db import (
|
|
6
6
|
BaseEnumerate,
|
7
7
|
)
|
8
8
|
|
9
|
+
from edu_rdm_integration.consts import (
|
10
|
+
FAST_TRANSFER_TASK_QUEUE_NAME,
|
11
|
+
LONG_TRANSFER_TASK_QUEUE_NAME,
|
12
|
+
TASK_QUEUE_NAME,
|
13
|
+
)
|
14
|
+
|
9
15
|
|
10
16
|
class ValueCodeEnumerate(BaseEnumerate):
|
11
17
|
"""
|
@@ -166,3 +172,28 @@ class CommandType(BaseEnumerate):
|
|
166
172
|
AUTO: 'Автоматический',
|
167
173
|
MANUAL: 'Ручной',
|
168
174
|
}
|
175
|
+
|
176
|
+
|
177
|
+
class EntityLevelQueueTypeEnum(BaseEnumerate):
|
178
|
+
"""Тип уровня очереди сущности."""
|
179
|
+
|
180
|
+
FAST = 1
|
181
|
+
BASE = 2
|
182
|
+
LONG = 3
|
183
|
+
|
184
|
+
values = {
|
185
|
+
FAST: 'Быстрая',
|
186
|
+
BASE: 'Основная',
|
187
|
+
LONG: 'Долгая'
|
188
|
+
}
|
189
|
+
|
190
|
+
celery_queue_maps = {
|
191
|
+
FAST: FAST_TRANSFER_TASK_QUEUE_NAME,
|
192
|
+
BASE: TASK_QUEUE_NAME,
|
193
|
+
LONG: LONG_TRANSFER_TASK_QUEUE_NAME
|
194
|
+
}
|
195
|
+
|
196
|
+
@classmethod
|
197
|
+
def get_queue_name(cls, level: int) -> Optional[str]:
|
198
|
+
"""Возвращает очередь."""
|
199
|
+
return cls.celery_queue_maps.get(level)
|
@@ -58,7 +58,6 @@ from edu_rdm_integration.models import (
|
|
58
58
|
ExportingDataStageStatus,
|
59
59
|
ExportingDataSubStageStatus,
|
60
60
|
ExportingDataSubStageUploaderClientLog,
|
61
|
-
UploadDataCommand,
|
62
61
|
UploadStatusRequestLog,
|
63
62
|
)
|
64
63
|
from edu_rdm_integration.redis_cache import (
|
@@ -321,7 +320,7 @@ class Graph:
|
|
321
320
|
|
322
321
|
|
323
322
|
def save_command_log_link(
|
324
|
-
command:
|
323
|
+
command: AbstractExportDataCommandProgress,
|
325
324
|
log_dir: str
|
326
325
|
) -> None:
|
327
326
|
"""Сохраняет ссылку на лог команды."""
|
edu_rdm_integration-3.7.0/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Generated by Django 3.2.24 on 2025-04-17 12:43
|
2
|
+
|
3
|
+
from django.db import (
|
4
|
+
migrations,
|
5
|
+
models,
|
6
|
+
)
|
7
|
+
|
8
|
+
|
9
|
+
class Migration(migrations.Migration):
|
10
|
+
|
11
|
+
dependencies = [
|
12
|
+
('edu_rdm_integration', '0015_set_exporting_sub_stage_status'),
|
13
|
+
]
|
14
|
+
|
15
|
+
operations = [
|
16
|
+
migrations.AddField(
|
17
|
+
model_name='transferredentity',
|
18
|
+
name='queue_level',
|
19
|
+
field=models.PositiveIntegerField(
|
20
|
+
choices=[(1, 'Быстрая'), (2, 'Основная'), (3, 'Долгая')], default=2, verbose_name='Уровень очереди'),
|
21
|
+
),
|
22
|
+
]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Generated by Django 3.2.24 on 2025-05-07 19:50
|
2
|
+
|
3
|
+
from django.db import migrations
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
('edu_rdm_integration', '0016_transferredentity_queue_level'),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.DeleteModel(
|
14
|
+
name='UploadDataCommand',
|
15
|
+
),
|
16
|
+
]
|
@@ -63,6 +63,7 @@ from m3_db_utils.models import (
|
|
63
63
|
|
64
64
|
from edu_rdm_integration.enums import (
|
65
65
|
CommandType,
|
66
|
+
EntityLevelQueueTypeEnum,
|
66
67
|
FileUploadStatusEnum,
|
67
68
|
)
|
68
69
|
from edu_rdm_integration.uploader_log.managers import (
|
@@ -932,6 +933,11 @@ class TransferredEntity(BaseObjectModel):
|
|
932
933
|
verbose_name='Включение экспорта для сущности',
|
933
934
|
default=True,
|
934
935
|
)
|
936
|
+
queue_level = PositiveIntegerField(
|
937
|
+
choices=EntityLevelQueueTypeEnum.get_choices(),
|
938
|
+
default=EntityLevelQueueTypeEnum.BASE,
|
939
|
+
verbose_name='Уровень очереди',
|
940
|
+
)
|
935
941
|
|
936
942
|
class Meta:
|
937
943
|
db_table = 'rdm_transferred_entity'
|
@@ -963,42 +969,3 @@ class ExportingDataSubStageEntity(BaseObjectModel):
|
|
963
969
|
db_table = 'rdm_exporting_data_sub_stage_entity'
|
964
970
|
verbose_name = 'Связь сущности и подэтапа выгрузки'
|
965
971
|
verbose_name_plural = 'Связи сущности и подэтапа выгрузки'
|
966
|
-
|
967
|
-
|
968
|
-
class UploadDataCommand(ReprStrPreModelMixin, BaseObjectModel):
|
969
|
-
"""Модель, хранящая данные для формирования и отслеживания асинхронной задачи по отправке данных в витрину."""
|
970
|
-
|
971
|
-
task = ForeignKey(
|
972
|
-
to='async_task.RunningTask',
|
973
|
-
verbose_name='Асинхронная задача',
|
974
|
-
blank=True,
|
975
|
-
null=True,
|
976
|
-
on_delete=SET_NULL,
|
977
|
-
)
|
978
|
-
logs_link = FileField(
|
979
|
-
upload_to=get_data_command_progress_attachment_path,
|
980
|
-
max_length=255,
|
981
|
-
verbose_name='Ссылка на файл логов',
|
982
|
-
)
|
983
|
-
type = PositiveSmallIntegerField( # noqa: A003
|
984
|
-
verbose_name='Тип команды',
|
985
|
-
choices=CommandType.get_choices(),
|
986
|
-
)
|
987
|
-
entity = ForeignKey(
|
988
|
-
to=RegionalDataMartEntityEnum,
|
989
|
-
verbose_name='Сущность РВД',
|
990
|
-
on_delete=PROTECT,
|
991
|
-
)
|
992
|
-
created = DateTimeField(
|
993
|
-
verbose_name='Дата создания',
|
994
|
-
default=timezone.now,
|
995
|
-
)
|
996
|
-
generation_id = UUIDField(
|
997
|
-
'Идентификатор генерации',
|
998
|
-
default=uuid.uuid4,
|
999
|
-
)
|
1000
|
-
|
1001
|
-
class Meta:
|
1002
|
-
db_table = 'rdm_upload_data_command'
|
1003
|
-
verbose_name = 'Команда отправки данных в витрину'
|
1004
|
-
verbose_name_plural = 'Команды отправки данных в витрину'
|