edu-rdm-integration 3.17.0__tar.gz → 3.18.1__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.
Potentially problematic release.
This version of edu-rdm-integration might be problematic. Click here for more details.
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/CHANGELOG.md +64 -2
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/PKG-INFO +5 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/README.md +1 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/pyproject.toml +3 -3
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/models.py +1 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/cleanup_outdated_data/apps.py +11 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py +20 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/models.py +52 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/rdm_models/models.py +310 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/helpers.py +1 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/mixins.py +1 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/runners.py +3 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/strategies.py +1 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/strategies.py +1 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/models.py +2 -5
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/operations.py +6 -5
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/caches.py +9 -3
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/functions.py +3 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/runners.py +1 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/tests.py +3 -6
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/models.py +8 -3
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/strategies.py +1 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/service/model_outdated_data/cleaners.py +26 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/service/model_outdated_data/managers.py +45 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
- edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration.egg-info/PKG-INFO +5 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration.egg-info/SOURCES.txt +9 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration.egg-info/requires.txt +3 -3
- edu_rdm_integration-3.17.0/src/edu_rdm_integration/models.py +0 -1
- edu_rdm_integration-3.17.0/src/edu_rdm_integration/rdm_models/models.py +0 -73
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/CONDUCT.md +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/LICENSE +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/MANIFEST.in +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/setup.cfg +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/migrations/0003_auto_20250704_0725.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/consts.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/helpers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/mapping.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/operations.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/redis_cache.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/registry/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/registry/actions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/registry/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/registry/templates/ui-js/start-task.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/registry/ui.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/signals.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/storages.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/typing.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/core/utils.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/0018_auto_20250704_0725.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/pipelines/transfer → edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/cleanup_outdated_data}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/pipelines/transfer/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/rdm_entities → edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/rdm_entities/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/transfer}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/actions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/app_meta.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/rdm_models → edu_rdm_integration-3.18.1/src/edu_rdm_integration/pipelines/transfer/migrations}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/mixins.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/models.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/tasks.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/templates/ui-js/transferred-entity-list.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/pipelines/transfer/ui.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/rdm_models/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/rdm_entities}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/entities.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/migrations/0002_rename_regionaldatamartentityenum_rdmentityenum.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages → edu_rdm_integration-3.18.1/src/edu_rdm_integration/rdm_entities/migrations}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/mixins.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_entities/utils.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data → edu_rdm_integration-3.18.1/src/edu_rdm_integration/rdm_models}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_models/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_models/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_models/migrations/0002_rename_regionaldatamartmodelenum_rdmmodelenum.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/function_templates → edu_rdm_integration-3.18.1/src/edu_rdm_integration/rdm_models/migrations}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_models/mixins.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/rdm_models/utils.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/functions → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/functions/base → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/consts.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/functions/calculated → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/function_templates}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/functions/calculated/base → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/functions}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/functions/non_calculated → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/functions/base}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/caches.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/consts.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/functions.py +3 -3
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/base/managers.py +6 -6
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/functions/calculated}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/management → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/functions/calculated/base}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/caches.py +4 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/management/commands → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/functions/non_calculated}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/caches.py +4 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/generators.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/helpers.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/collect_data/registry → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/management}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/management/base.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/management/commands}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_latest_models_data.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_models_data.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/migrations/0003_auto_20250704_0810.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/migrations/0004_auto_20250704_0825.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/function_templates → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/migrations}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/mixins.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/functions → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/collect_data/registry}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/registry/actions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/registry/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/collect-command-window.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/validators.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/registry/ui.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/collect_data/tests.py +4 -4
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/functions/base → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/consts.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/management → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/function_templates}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/management/commands → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/functions}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/functions/base}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/consts.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/errors.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/helpers.py +4 -4
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/managers.py +3 -3
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/presenters.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/requests.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/results.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/strings.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/functions/base/validators.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/generators.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/helpers.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/export_data/registry → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/management}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/management/base.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/service → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/management/commands}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/management/commands/export_entities_data.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/management/commands/export_latest_entities_data.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/upload_data → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/migrations}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/mixins.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/operations.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/upload_data/management → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/export_data/registry}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/registry/actions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/registry/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/create-export-command-win.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/stage_for_export.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/export_data/registry/ui.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/upload_data/management/commands → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/service}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/service/apps.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/upload_data/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/service/model_outdated_data}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/upload_data/uploader_log → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/service/outdated_service_data}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/service/tasks.py +0 -0
- {edu_rdm_integration-3.17.0/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations → edu_rdm_integration-3.18.1/src/edu_rdm_integration/stages/upload_data}/__init__.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/consts.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/dataclasses.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/export_managers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/helpers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/management/base.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/management/commands/async_fix_attachment_size.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/management/commands/check_upload_status.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_status.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_upload.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/migrations/0002_auto_20250704_0810.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/models.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/operations.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/queues.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/tasks.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/actions.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/apps.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/enums.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/managers.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/models.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration/stages/upload_data/uploader_log/ui.py +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
- {edu_rdm_integration-3.17.0 → edu_rdm_integration-3.18.1}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
|
@@ -29,17 +29,79 @@
|
|
|
29
29
|
### Удалено
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
## [3.18.1] - 2025-09-02
|
|
33
|
+
|
|
34
|
+
Доработки модели перечисления RDMModelEnum для расширения функционала механизма зачистки устаревших данных моделей РВД.
|
|
35
|
+
|
|
36
|
+
### Добавлено
|
|
37
|
+
|
|
38
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
39
|
+
PATCH Добавлена базовая модель для определения модели являющейся основной для сущности.
|
|
40
|
+
-
|
|
41
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
42
|
+
PATCH Добавлен механизм расчета обратных связей для моделей в модели-перечислении RDMModelEnum.
|
|
43
|
+
|
|
44
|
+
### Изменено
|
|
45
|
+
|
|
46
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
47
|
+
PATCH Изменен алгоритм сортировки моделей с использованием ключей модели-перечисления RDMModelEnum.
|
|
48
|
+
|
|
49
|
+
### Исправлено
|
|
50
|
+
|
|
51
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
52
|
+
PATCH Исправлена ошибка регистрации сущностей.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## [3.18.0] - 2025-08-29
|
|
56
|
+
|
|
57
|
+
Добавлено новое приложение `edu_rdm_integration.pipelines.cleanup_outdated_data`, которое необходимо подключить в
|
|
58
|
+
settings.py в установленные приложения.
|
|
59
|
+
|
|
60
|
+
Реализован механизм создания уборщиков устаревших данных моделей РВД. Их регистрация производится в модели-перечислении
|
|
61
|
+
`RDMModelEnum` при вызове метода `extend` в параметре `outdated_data_cleaners`. Запуск уборщиков производится при помощи
|
|
62
|
+
менеджера, который запускается в команде `rdm_cleanup_outdated_data`. Сама команда используется в качестве ночного
|
|
63
|
+
скрипта. В менеджере производится обход всех зарегистрированных моделей РВД в модели-перечислении `RDMModelEnum`, при
|
|
64
|
+
наличии уборщиков они запускаются.
|
|
65
|
+
|
|
66
|
+
Изменен алгоритм расчета порядкового номера элемента в модели-перечислении `RDMModelEnum`. Теперь, при расширении
|
|
67
|
+
модели-перечислении производится перерасчет всех порядковых номеров уже зарегистрированных значений, кроме установленных
|
|
68
|
+
вручную. Порядковые номера определяются согласно нахождению в последовательности из моделей, отсортированных по
|
|
69
|
+
зависимости между собой - от меньшей зависимости к большей. Такое поведение было достигнуто путем указания моделей в
|
|
70
|
+
фиктивных внешних ключах.
|
|
71
|
+
|
|
72
|
+
Во всех регистрациях моделей РВД были убраны порядковые номера order_number для автоматического расчета значений. При
|
|
73
|
+
миграции на данную версию, аналогичную работу будет необходимо проделать на продукте.
|
|
74
|
+
|
|
75
|
+
Повышены минимальные версии пакетов:
|
|
76
|
+
- educommon>=3.25.0;
|
|
77
|
+
- m3-db-utils>=0.7.0.
|
|
78
|
+
|
|
79
|
+
### Добавлено
|
|
80
|
+
|
|
81
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
82
|
+
MINOR Топологическая сортировка моделей РВД согласно зависимости между собой.
|
|
83
|
+
|
|
84
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
85
|
+
MINOR Добавлена команда/ночной скрипт rdm_cleanup_outdated_data`.
|
|
86
|
+
|
|
87
|
+
### Изменено
|
|
88
|
+
|
|
89
|
+
- [EDUDEVOPS-94](https://jira.bars.group/browse/EDUDEVOPS-94)
|
|
90
|
+
MINOR Установка значения order_number в элементах RDMModelEnum производится при добавлении в модель перечислении и
|
|
91
|
+
пересчитывается при добавлении новых значений.
|
|
92
|
+
|
|
93
|
+
|
|
32
94
|
## [3.17.0] - 2025-01-27
|
|
33
95
|
|
|
34
96
|
Добавлено предупреждение пользователя о недостаточности данных и новая зависимость m3-ui.
|
|
35
97
|
|
|
36
98
|
### Добавлено
|
|
37
99
|
[EDUCLLG-7932](https://jira.bars.group/browse/EDUCLLG-7932)
|
|
38
|
-
|
|
100
|
+
MINOR Добавлена зависимость `m3-ui>=2.2.122,<2.3` в `pyproject.toml`
|
|
39
101
|
|
|
40
102
|
### Изменено
|
|
41
103
|
[EDUCLLG-7932](https://jira.bars.group/browse/EDUCLLG-7932)
|
|
42
|
-
|
|
104
|
+
MINOR `generate` в `generators.py`: изменена логика - вместо создания пустых команд при отсутствии данных теперь возвращается предупреждение
|
|
43
105
|
|
|
44
106
|
|
|
45
107
|
## [3.16.2] - 2025-08-19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edu-rdm-integration
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.18.1
|
|
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
|
|
@@ -27,15 +27,15 @@ Requires-Dist: transliterate<2
|
|
|
27
27
|
Requires-Dist: Django<5.0,>=3.1
|
|
28
28
|
Requires-Dist: celery<5.3,>=4.4.7
|
|
29
29
|
Requires-Dist: asyncpg==0.23.0
|
|
30
|
-
Requires-Dist: educommon<4,>=3.
|
|
30
|
+
Requires-Dist: educommon<4,>=3.25.0
|
|
31
31
|
Requires-Dist: edu-function-tools<1,>=0.2.0
|
|
32
|
-
Requires-Dist: m3-db-utils<1,>=0.
|
|
32
|
+
Requires-Dist: m3-db-utils<1,>=0.7.0
|
|
33
33
|
Requires-Dist: m3-django-compat<2,>=1.10.2
|
|
34
34
|
Requires-Dist: m3-ui<2.3,>=2.2.122
|
|
35
35
|
Requires-Dist: uploader-client<1,>=0.3.0
|
|
36
36
|
Provides-Extra: dev
|
|
37
37
|
Requires-Dist: isort==5.12.0; extra == "dev"
|
|
38
|
-
Requires-Dist: ruff==0.12.
|
|
38
|
+
Requires-Dist: ruff==0.12.1; extra == "dev"
|
|
39
39
|
Requires-Dist: flake8<7,>=4.0.1; extra == "dev"
|
|
40
40
|
Requires-Dist: pytest<8,>=3.2.5; extra == "dev"
|
|
41
41
|
Requires-Dist: pytest-cov<5; extra == "dev"
|
|
@@ -125,6 +125,7 @@ INSTALLED_APPS = (
|
|
|
125
125
|
'edu_rdm_integration.core.registry',
|
|
126
126
|
'edu_rdm_integration.rdm_entities',
|
|
127
127
|
'edu_rdm_integration.rdm_models',
|
|
128
|
+
'edu_rdm_integration.pipelines.cleanup_outdated_data',
|
|
128
129
|
'edu_rdm_integration.pipelines.transfer',
|
|
129
130
|
'edu_rdm_integration.stages.collect_data',
|
|
130
131
|
'edu_rdm_integration.stages.export_data',
|
|
@@ -77,6 +77,7 @@ INSTALLED_APPS = (
|
|
|
77
77
|
'edu_rdm_integration.core.registry',
|
|
78
78
|
'edu_rdm_integration.rdm_entities',
|
|
79
79
|
'edu_rdm_integration.rdm_models',
|
|
80
|
+
'edu_rdm_integration.pipelines.cleanup_outdated_data',
|
|
80
81
|
'edu_rdm_integration.pipelines.transfer',
|
|
81
82
|
'edu_rdm_integration.stages.collect_data',
|
|
82
83
|
'edu_rdm_integration.stages.export_data',
|
|
@@ -22,9 +22,9 @@ dependencies = [
|
|
|
22
22
|
'Django>=3.1,<5.0',
|
|
23
23
|
'celery>=4.4.7,<5.3',
|
|
24
24
|
'asyncpg==0.23.0',
|
|
25
|
-
'educommon>=3.
|
|
25
|
+
'educommon>=3.25.0,<4',
|
|
26
26
|
'edu-function-tools>=0.2.0,<1',
|
|
27
|
-
'm3-db-utils>=0.
|
|
27
|
+
'm3-db-utils>=0.7.0,<1',
|
|
28
28
|
'm3-django-compat>=1.10.2,<2',
|
|
29
29
|
'm3-ui>=2.2.122,<2.3',
|
|
30
30
|
'uploader-client>=0.3.0,<1',
|
|
@@ -55,7 +55,7 @@ Repository = 'https://stash.bars-open.ru/scm/edubase/edu-rdm-integration.git'
|
|
|
55
55
|
[project.optional-dependencies]
|
|
56
56
|
dev = [
|
|
57
57
|
'isort==5.12.0',
|
|
58
|
-
'ruff==0.12.
|
|
58
|
+
'ruff==0.12.1',
|
|
59
59
|
'flake8>=4.0.1,<7',
|
|
60
60
|
'pytest>=3.2.5,<8',
|
|
61
61
|
'pytest-cov<5',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Модели
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from django.apps import (
|
|
2
|
+
AppConfig,
|
|
3
|
+
)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RDMCleanupOutdatedDataAppConfig(AppConfig):
|
|
7
|
+
"""Приложение для организации процесса очистки устаревших данных РВД."""
|
|
8
|
+
|
|
9
|
+
name = 'edu_rdm_integration.pipelines.cleanup_outdated_data'
|
|
10
|
+
label = 'edu_rdm_integration_cleanup_outdated_data_pipeline'
|
|
11
|
+
verbose_name = 'Приложение для организации процесса очистки устаревших данных РВД.'
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from django.core.management import (
|
|
2
|
+
BaseCommand,
|
|
3
|
+
)
|
|
4
|
+
|
|
5
|
+
from edu_rdm_integration.stages.service.model_outdated_data.managers import (
|
|
6
|
+
ModelOutdatedDataCleanerManager,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Command(BaseCommand):
|
|
11
|
+
"""Ночная команда для очистки устаревших данных РВД."""
|
|
12
|
+
|
|
13
|
+
nightly_script = True
|
|
14
|
+
|
|
15
|
+
help = 'Ночная команда для очистки устаревших данных РВД.'
|
|
16
|
+
|
|
17
|
+
def handle(self, *args, **options):
|
|
18
|
+
"""Запуск очистки устаревших данных РВД."""
|
|
19
|
+
model_data_cleaner_manager = ModelOutdatedDataCleanerManager()
|
|
20
|
+
model_data_cleaner_manager.run()
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Optional,
|
|
3
|
+
Type,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
from educommon.integration_entities.entities import (
|
|
7
|
+
BaseEntity,
|
|
8
|
+
)
|
|
1
9
|
from m3_db_utils.models import (
|
|
2
10
|
ModelEnumValue,
|
|
3
11
|
TitledModelEnum,
|
|
@@ -61,3 +69,47 @@ class RDMEntityEnum(TitledModelEnum):
|
|
|
61
69
|
model_enums = sorted(model_enums, key=lambda value: value.order_number)
|
|
62
70
|
|
|
63
71
|
return model_enums
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def extend(
|
|
75
|
+
cls,
|
|
76
|
+
key,
|
|
77
|
+
title: str = '',
|
|
78
|
+
entity: Type[BaseEntity] = None,
|
|
79
|
+
main_model_enum: tuple = (),
|
|
80
|
+
additional_model_enums: tuple = (),
|
|
81
|
+
order_number: Optional[int] = None,
|
|
82
|
+
*args,
|
|
83
|
+
**kwargs,
|
|
84
|
+
):
|
|
85
|
+
"""Метод расширения модели-перечисления, например из плагина.
|
|
86
|
+
|
|
87
|
+
Необходимо, чтобы сама модель-перечисление была расширяемой. Для этого необходимо, чтобы был установлен
|
|
88
|
+
extensible = True в Meta.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
key: ключ элемента перечисления, указывается заглавными буквами с разделителем нижнее подчеркивание
|
|
92
|
+
title: название элемента перечисления
|
|
93
|
+
entity: сущность, регистрируемая в модели-перечислении
|
|
94
|
+
main_model_enum: основная модель РВД из модели-перечисления
|
|
95
|
+
additional_model_enums: дополнительные модели РВД из модели-перечисления
|
|
96
|
+
order_number: порядковый номер значения модели перечисления используемый при сортировке
|
|
97
|
+
args: порядковые аргументы для создания значения модели перечисления
|
|
98
|
+
kwargs: именованные аргументы для создания значения модели перечисления
|
|
99
|
+
"""
|
|
100
|
+
try:
|
|
101
|
+
order_number = cls._calculate_order_number(order_number=order_number)
|
|
102
|
+
except ValueError as e:
|
|
103
|
+
raise ValueError(f'Trying register entity "{entity.__name__}". {e.args[0]}')
|
|
104
|
+
|
|
105
|
+
model_enum_value = ModelEnumValue(
|
|
106
|
+
key=key,
|
|
107
|
+
title=title,
|
|
108
|
+
entity=entity,
|
|
109
|
+
main_model_enum=main_model_enum,
|
|
110
|
+
additional_model_enums=additional_model_enums,
|
|
111
|
+
order_number=order_number,
|
|
112
|
+
**kwargs,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
setattr(cls, key, model_enum_value)
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
from collections import (
|
|
2
|
+
defaultdict,
|
|
3
|
+
)
|
|
4
|
+
from typing import (
|
|
5
|
+
Optional,
|
|
6
|
+
Type,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
from django.db.models import (
|
|
10
|
+
CASCADE,
|
|
11
|
+
DateTimeField,
|
|
12
|
+
ForeignKey,
|
|
13
|
+
SmallIntegerField,
|
|
14
|
+
)
|
|
15
|
+
from m3.db import (
|
|
16
|
+
BaseObjectModel,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from educommon.django.db.mixins import (
|
|
20
|
+
ReprStrPreModelMixin,
|
|
21
|
+
)
|
|
22
|
+
from educommon.integration_entities.enums import (
|
|
23
|
+
EntityLogOperation,
|
|
24
|
+
)
|
|
25
|
+
from educommon.utils.seqtools import (
|
|
26
|
+
topological_sort,
|
|
27
|
+
)
|
|
28
|
+
from m3_db_utils.models import (
|
|
29
|
+
FictiveForeignKeyField,
|
|
30
|
+
ModelEnumValue,
|
|
31
|
+
TitledModelEnum,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class BaseRDMModel(ReprStrPreModelMixin, BaseObjectModel):
|
|
36
|
+
"""Базовая модель РВД."""
|
|
37
|
+
|
|
38
|
+
created = DateTimeField(
|
|
39
|
+
verbose_name='Дата создания',
|
|
40
|
+
auto_now_add=True,
|
|
41
|
+
null=True,
|
|
42
|
+
blank=True,
|
|
43
|
+
db_index=True,
|
|
44
|
+
)
|
|
45
|
+
modified = DateTimeField(
|
|
46
|
+
verbose_name='Дата изменения',
|
|
47
|
+
auto_now=True,
|
|
48
|
+
null=True,
|
|
49
|
+
blank=True,
|
|
50
|
+
db_index=True,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def attrs_for_repr_str(self):
|
|
55
|
+
"""Список атрибутов для отображения экземпляра модели."""
|
|
56
|
+
return ['created', 'modified']
|
|
57
|
+
|
|
58
|
+
class Meta:
|
|
59
|
+
abstract = True
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class BaseMainRDMModel(BaseRDMModel):
|
|
63
|
+
"""Абстрактная основная модель РВД.
|
|
64
|
+
|
|
65
|
+
Является базовым классом для моделей РВД, которые являются основными для сущностей РВД.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
collecting_sub_stage = ForeignKey(
|
|
69
|
+
verbose_name='Подэтап сбора данных',
|
|
70
|
+
to='edu_rdm_integration_collect_data_stage.RDMCollectingDataSubStage',
|
|
71
|
+
on_delete=CASCADE,
|
|
72
|
+
)
|
|
73
|
+
exporting_sub_stage = ForeignKey(
|
|
74
|
+
verbose_name='Подэтап выгрузки данных',
|
|
75
|
+
to='edu_rdm_integration_export_data_stage.RDMExportingDataSubStage',
|
|
76
|
+
blank=True,
|
|
77
|
+
null=True,
|
|
78
|
+
on_delete=CASCADE,
|
|
79
|
+
)
|
|
80
|
+
operation = SmallIntegerField(
|
|
81
|
+
verbose_name='Действие',
|
|
82
|
+
choices=EntityLogOperation.get_choices(),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def attrs_for_repr_str(self):
|
|
87
|
+
"""Список атрибутов для отображения экземпляра модели."""
|
|
88
|
+
return ['collecting_sub_stage', 'exporting_sub_stage', 'operation', 'created', 'modified']
|
|
89
|
+
|
|
90
|
+
class Meta:
|
|
91
|
+
abstract = True
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class RDMModelEnum(TitledModelEnum):
|
|
95
|
+
"""Модель-перечисление моделей "Региональная витрина данных"."""
|
|
96
|
+
|
|
97
|
+
is_strict_order_number = True
|
|
98
|
+
"""Флаг, указывающий на уникальность порядкового номера элементов модели-перечисления."""
|
|
99
|
+
|
|
100
|
+
class Meta:
|
|
101
|
+
db_table = 'rdm_model'
|
|
102
|
+
extensible = True
|
|
103
|
+
verbose_name = 'Модель-перечисление моделей "Региональной витрины данных"'
|
|
104
|
+
verbose_name_plural = 'Модели-перечисления моделей "Региональной витрины данных"'
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def _get_model_relations(cls, model: Type['BaseRDMModel']) -> dict[str, str]:
|
|
108
|
+
"""Получение списка связей модели РВД."""
|
|
109
|
+
model_label_enum_data = cls.get_model_label_enum_data()
|
|
110
|
+
model_relations = {}
|
|
111
|
+
|
|
112
|
+
for field in model._meta.concrete_fields:
|
|
113
|
+
if isinstance(field, FictiveForeignKeyField):
|
|
114
|
+
model_label = field.to
|
|
115
|
+
elif isinstance(field, ForeignKey):
|
|
116
|
+
model_label = field.related_model._meta.label
|
|
117
|
+
else:
|
|
118
|
+
continue
|
|
119
|
+
|
|
120
|
+
if model_label in model_label_enum_data:
|
|
121
|
+
model_key = model_label_enum_data[model_label].key
|
|
122
|
+
model_relations[field.attname] = model_key
|
|
123
|
+
|
|
124
|
+
return model_relations
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def _get_models_relations(cls) -> dict[str, dict[str, str]]:
|
|
128
|
+
"""Получение списка связей всех зарегистрированных моделей РВД."""
|
|
129
|
+
model_label_enum_data = cls.get_model_label_enum_data()
|
|
130
|
+
all_models = [model_enum_value.model for model_enum_value in model_label_enum_data.values()]
|
|
131
|
+
|
|
132
|
+
models_relations = {}
|
|
133
|
+
for model in all_models:
|
|
134
|
+
model_key = model_label_enum_data[model._meta.label].key
|
|
135
|
+
model_relations = cls._get_model_relations(model=model)
|
|
136
|
+
|
|
137
|
+
if model_relations:
|
|
138
|
+
models_relations[model_key] = model_relations
|
|
139
|
+
|
|
140
|
+
return models_relations
|
|
141
|
+
|
|
142
|
+
@classmethod
|
|
143
|
+
def _sort_models_dependencies(cls, models_dependencies: list[tuple[str, str]]) -> list[str]:
|
|
144
|
+
"""Сортировка моделей РВД по зависимости друг от друга."""
|
|
145
|
+
sorted_dependencies_models = topological_sort(models_dependencies)
|
|
146
|
+
|
|
147
|
+
ordered_models = [*sorted_dependencies_models.cyclic, *reversed(sorted_dependencies_models.sorted)]
|
|
148
|
+
|
|
149
|
+
return ordered_models
|
|
150
|
+
|
|
151
|
+
@classmethod
|
|
152
|
+
def _get_ordered_models(cls) -> list[str]:
|
|
153
|
+
"""Получение списка моделей РВД в порядке их зависимости.
|
|
154
|
+
|
|
155
|
+
Есть возможность указать дополнительные модели, для которых совместно с зарегистрированными моделями РВД будет
|
|
156
|
+
рассчитываться порядок.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
list[str]: список моделей РВД в порядке их зависимости
|
|
160
|
+
"""
|
|
161
|
+
enum_keys = cls.get_model_enum_keys()
|
|
162
|
+
models_relations = cls._get_models_relations()
|
|
163
|
+
|
|
164
|
+
models_dependencies = []
|
|
165
|
+
for model_key, model_relations in models_relations.items():
|
|
166
|
+
for _, related_model_key in model_relations.items():
|
|
167
|
+
models_dependencies.append((model_key, related_model_key))
|
|
168
|
+
|
|
169
|
+
ordered_models = cls._sort_models_dependencies(models_dependencies=models_dependencies)
|
|
170
|
+
|
|
171
|
+
without_dependencies = set(enum_keys).difference(set(ordered_models))
|
|
172
|
+
|
|
173
|
+
ordered_models = [*without_dependencies, *ordered_models]
|
|
174
|
+
|
|
175
|
+
return ordered_models
|
|
176
|
+
|
|
177
|
+
@classmethod
|
|
178
|
+
def _recalculate_order_numbers(cls, *args, **kwargs):
|
|
179
|
+
"""Перерасчет порядковых номеров элементов модели-перечисления.
|
|
180
|
+
|
|
181
|
+
При добавлении новой модели РВД в модель-перечисление производится перерасчет порядковых номеров уже
|
|
182
|
+
добавленных элементов. Порядок моделей РВД выстраивается по зависимости друг от друга. Зависимость определяется
|
|
183
|
+
внешними ключами (ForeignKey) и фиктивными внешними ключами (FictiveForeignKey). Сначала идут модели не имеющие
|
|
184
|
+
зависимостей, затем модели, которые зависят от других моделей. Сортировка моделей РВД происходит по алгоритму
|
|
185
|
+
топологической сортировки.
|
|
186
|
+
"""
|
|
187
|
+
ordered_model_keys = cls._get_ordered_models()
|
|
188
|
+
|
|
189
|
+
for model_enum_value in cls._get_enum_data().values():
|
|
190
|
+
if model_enum_value.is_manual_order_number:
|
|
191
|
+
try:
|
|
192
|
+
manual_index_model_key = ordered_model_keys[model_enum_value.order_number - 1]
|
|
193
|
+
except IndexError:
|
|
194
|
+
continue
|
|
195
|
+
|
|
196
|
+
if manual_index_model_key != model_enum_value.key and cls.is_strict_order_number:
|
|
197
|
+
raise ValueError(
|
|
198
|
+
f'Order number "{model_enum_value.order_number}" is already in use in the "{cls.__name__}". '
|
|
199
|
+
f'Please choose a different one.'
|
|
200
|
+
)
|
|
201
|
+
else:
|
|
202
|
+
model_enum_value.order_number = ordered_model_keys.index(model_enum_value.key) + 1
|
|
203
|
+
|
|
204
|
+
@classmethod
|
|
205
|
+
def _calculate_tmp_order_number(cls) -> int:
|
|
206
|
+
"""Вычисление временного порядкового номера элемента модели-перечисления."""
|
|
207
|
+
order_number_enum_data = cls._get_order_number_enum_data()
|
|
208
|
+
|
|
209
|
+
order_numbers = order_number_enum_data.keys()
|
|
210
|
+
tmp_order_number = max(order_numbers) + 1 if order_number_enum_data else 1
|
|
211
|
+
|
|
212
|
+
return tmp_order_number
|
|
213
|
+
|
|
214
|
+
@classmethod
|
|
215
|
+
def _validate_manual_order_number(cls, order_number: int, model: Type['BaseRDMModel']):
|
|
216
|
+
"""Валидация пользовательского порядкового номера."""
|
|
217
|
+
ordered_models = cls._get_ordered_models()
|
|
218
|
+
|
|
219
|
+
try:
|
|
220
|
+
manual_index_model = ordered_models[order_number - 1]
|
|
221
|
+
except IndexError:
|
|
222
|
+
return
|
|
223
|
+
|
|
224
|
+
if manual_index_model != model._meta.label and cls.is_strict_order_number:
|
|
225
|
+
raise ValueError(
|
|
226
|
+
f'Order number "{order_number}" is already in use in the "{cls.__name__}". '
|
|
227
|
+
f'Please choose a different one.'
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
@classmethod
|
|
231
|
+
def _update_reverse_relations(cls):
|
|
232
|
+
"""Обновление обратных связей моделей РВД.
|
|
233
|
+
|
|
234
|
+
У значения модели-перечисления
|
|
235
|
+
"""
|
|
236
|
+
enum_data = cls._get_enum_data()
|
|
237
|
+
# Обнуление обратных связей всех моделей
|
|
238
|
+
for model_enum_value in enum_data.values():
|
|
239
|
+
model_enum_value.reverse_relations = defaultdict(list)
|
|
240
|
+
|
|
241
|
+
models_relations = cls._get_models_relations()
|
|
242
|
+
|
|
243
|
+
for model_key, model_relations in models_relations.items():
|
|
244
|
+
for field_name, related_model_key in model_relations.items():
|
|
245
|
+
enum_data[related_model_key].reverse_relations[model_key].append(field_name)
|
|
246
|
+
|
|
247
|
+
@classmethod
|
|
248
|
+
def get_model_label_enum_data(cls) -> dict[str, Type['ModelEnumValue']]:
|
|
249
|
+
"""Получение словаря значений модели-перечисления с лейблом модели в качестве значения."""
|
|
250
|
+
enum_data = cls._get_enum_data()
|
|
251
|
+
|
|
252
|
+
model_label_enum_data = {model_value.model._meta.label: model_value for model_value in enum_data.values()}
|
|
253
|
+
|
|
254
|
+
return model_label_enum_data
|
|
255
|
+
|
|
256
|
+
@classmethod
|
|
257
|
+
def extend(
|
|
258
|
+
cls,
|
|
259
|
+
key,
|
|
260
|
+
model: Type['BaseRDMModel'] = None,
|
|
261
|
+
title: str = '',
|
|
262
|
+
creating_trigger_models: tuple = (),
|
|
263
|
+
loggable_models: tuple = (),
|
|
264
|
+
order_number: Optional[int] = None,
|
|
265
|
+
*args,
|
|
266
|
+
**kwargs,
|
|
267
|
+
):
|
|
268
|
+
"""Метод расширения модели-перечисления, например из плагина.
|
|
269
|
+
|
|
270
|
+
Необходимо, чтобы сама модель-перечисление была расширяемой. Для этого необходимо, чтобы был установлен
|
|
271
|
+
extensible = True в Meta.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
key: ключ элемента перечисления, указывается заглавными буквами с разделителем нижнее подчеркивание
|
|
275
|
+
title: название элемента перечисления
|
|
276
|
+
model: модель, регистрируемая в модели-перечислении
|
|
277
|
+
creating_trigger_models: модели продукта, которые инициируют создание записей модели РВД
|
|
278
|
+
loggable_models: модели продукта, отслеживаемые в логах
|
|
279
|
+
order_number: порядковый номер значения модели перечисления используемый при сортировке
|
|
280
|
+
args: порядковые аргументы для модели-перечисления
|
|
281
|
+
kwargs: именованные аргументы для модели-перечисления
|
|
282
|
+
"""
|
|
283
|
+
if key.upper() in cls.get_model_enum_keys():
|
|
284
|
+
raise ValueError('Model enum value with key "{key}" already exists.')
|
|
285
|
+
|
|
286
|
+
if model is None:
|
|
287
|
+
raise ValueError(f'Trying extend model "{cls.__name__}". Argument "model" is required.')
|
|
288
|
+
|
|
289
|
+
is_manual_order_number = order_number is not None
|
|
290
|
+
|
|
291
|
+
if order_number is None:
|
|
292
|
+
order_number = cls._calculate_tmp_order_number()
|
|
293
|
+
else:
|
|
294
|
+
cls._validate_manual_order_number(order_number=order_number, model=model)
|
|
295
|
+
|
|
296
|
+
model_enum_value = ModelEnumValue(
|
|
297
|
+
key=key,
|
|
298
|
+
model=model,
|
|
299
|
+
title=title,
|
|
300
|
+
creating_trigger_models=creating_trigger_models,
|
|
301
|
+
loggable_models=loggable_models,
|
|
302
|
+
order_number=order_number,
|
|
303
|
+
is_manual_order_number=is_manual_order_number,
|
|
304
|
+
reverse_relations=defaultdict(list),
|
|
305
|
+
**kwargs,
|
|
306
|
+
)
|
|
307
|
+
setattr(cls, key, model_enum_value)
|
|
308
|
+
|
|
309
|
+
cls._recalculate_order_numbers()
|
|
310
|
+
cls._update_reverse_relations()
|
|
@@ -2,13 +2,12 @@ from django.conf import (
|
|
|
2
2
|
settings,
|
|
3
3
|
)
|
|
4
4
|
|
|
5
|
-
from educommon.utils.seqtools import (
|
|
6
|
-
make_chunks,
|
|
7
|
-
)
|
|
8
|
-
|
|
9
5
|
from edu_function_tools.runners import (
|
|
10
6
|
EduRunner,
|
|
11
7
|
)
|
|
8
|
+
from educommon.utils.seqtools import (
|
|
9
|
+
make_chunks,
|
|
10
|
+
)
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
class BaseCollectingDataRunner(EduRunner):
|
|
@@ -17,9 +17,6 @@ from django.db.models import (
|
|
|
17
17
|
from django.utils import (
|
|
18
18
|
timezone,
|
|
19
19
|
)
|
|
20
|
-
from edu_function_tools.models import (
|
|
21
|
-
EduEntity,
|
|
22
|
-
)
|
|
23
20
|
from m3.db import (
|
|
24
21
|
BaseObjectModel,
|
|
25
22
|
)
|
|
@@ -175,13 +172,13 @@ class RDMCollectingDataSubStage(ReprStrPreModelMixin, BaseObjectModel):
|
|
|
175
172
|
"""Подэтап сбора данных для сущностей в рамках функции."""
|
|
176
173
|
|
|
177
174
|
stage = ForeignKey(
|
|
178
|
-
to=RDMCollectingDataStage,
|
|
175
|
+
to='edu_rdm_integration_collect_data_stage.RDMCollectingDataStage',
|
|
179
176
|
verbose_name='Этап сбора данных',
|
|
180
177
|
on_delete=PROTECT,
|
|
181
178
|
)
|
|
182
179
|
|
|
183
180
|
function = ForeignKey(
|
|
184
|
-
to=
|
|
181
|
+
to='function_tools.Entity',
|
|
185
182
|
verbose_name='Функция',
|
|
186
183
|
on_delete=PROTECT,
|
|
187
184
|
)
|
|
@@ -17,15 +17,15 @@ from django.utils import (
|
|
|
17
17
|
timezone,
|
|
18
18
|
)
|
|
19
19
|
|
|
20
|
+
from edu_function_tools.managers import (
|
|
21
|
+
EduRunnerManager,
|
|
22
|
+
)
|
|
20
23
|
from educommon import (
|
|
21
24
|
logger,
|
|
22
25
|
)
|
|
23
26
|
from educommon.utils.date import (
|
|
24
27
|
get_today_min_datetime,
|
|
25
28
|
)
|
|
26
|
-
from edu_function_tools.managers import (
|
|
27
|
-
EduRunnerManager,
|
|
28
|
-
)
|
|
29
29
|
from m3_db_utils.consts import (
|
|
30
30
|
DEFAULT_ORDER_NUMBER,
|
|
31
31
|
)
|
|
@@ -80,8 +80,9 @@ class BaseCollectModelsData(BaseOperationData):
|
|
|
80
80
|
super().__init__(**kwargs)
|
|
81
81
|
|
|
82
82
|
# Если модели не указаны, берется значение по умолчанию - все модели:
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
model_enum_data = RDMModelEnum.get_enum_data()
|
|
84
|
+
models = models if models else model_enum_data.keys()
|
|
85
|
+
self.models: list[ModelEnumValue] = [v for k, v in model_enum_data.items() if k in models]
|
|
85
86
|
|
|
86
87
|
self.logs_period_started_at = logs_period_started_at
|
|
87
88
|
self.logs_period_ended_at = logs_period_ended_at
|