edu-rdm-integration 3.22.2__tar.gz → 3.22.3__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.22.2 → edu_rdm_integration-3.22.3}/CHANGELOG.md +36 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/PKG-INFO +1 -1
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/models.py +5 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/models.py +5 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/models.py +5 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/registry/actions.py +3 -3
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/migrations/0003_fix_fk_constraints.py +1 -1
- edu_rdm_integration-3.22.3/src/edu_rdm_integration/stages/export_data/migrations/0004_alter_rdmexportingdatasubstageattachment_exporting_data_sub_stage.py +22 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/models.py +8 -1
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/registry/actions.py +3 -3
- edu_rdm_integration-3.22.3/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/base.py +305 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/export_data.py +22 -1
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration.egg-info/PKG-INFO +1 -1
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration.egg-info/SOURCES.txt +1 -0
- edu_rdm_integration-3.22.2/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/base.py +0 -214
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/CONDUCT.md +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/LICENSE +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/MANIFEST.in +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/README.md +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/pyproject.toml +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/setup.cfg +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/migrations/0002_auto_20250204_1413.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/migrations/0003_auto_20250704_0725.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/collect_and_export_data/models.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/mapping.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/operations.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/redis_cache.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/registry/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/registry/actions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/registry/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/registry/templates/ui-js/start-task.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/registry/ui.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/signals.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/storages.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/typing.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/core/utils.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0002_init_data_uploadstatus.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0003_create_index_file_upload_status.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0004_uploaderclientlog.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0005_auto_20231204_1224.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0006_request_status_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0007_delete_upload_status.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0008_transferredentity.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0009_auto_20240522_1619.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0010_transferredentity_export_enabled.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0011_exportingdatasubstageentity.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0012_exportingdatasubstageattachment_attachment_size.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0013_set_attachment_size.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0014_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0015_set_exporting_sub_stage_status.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0016_transferredentity_queue_level.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0017_delete_uploaddatacommand.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/0018_auto_20250704_0725.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/models.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/actions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/app_meta.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/mixins.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/models.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/tasks.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/templates/ui-js/transferred-entity-list.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/pipelines/transfer/ui.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/entities.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/migrations/0002_rename_regionaldatamartentityenum_rdmentityenum.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/mixins.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_entities/utils.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/migrations/0002_rename_regionaldatamartmodelenum_rdmmodelenum.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/mixins.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/rdm_models/utils.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/function_templates/function_collect_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/caches.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/functions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/mixins.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/base/runners.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/caches.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/results.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/calculated/strategies.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/caches.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/errors.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/functions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/presenters.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/results.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/runners.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/strings.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/tests.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/base/validators.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/functions/non_calculated/strategies.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/generators.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/management/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/management/base.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/management/commands/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_latest_models_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/management/commands/collect_models_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/0002_edurdmcollectdatacommandprogress.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/0003_auto_20250704_0810.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/0004_auto_20250704_0825.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/0005_alter_rdmcollectingdatasubstage_previous.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/0006_fix_fk_constraints.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/mixins.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/operations.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/registry/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/registry/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/collect-command-window.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/registry/templates/ui-js/validators.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/registry/ui.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/collect_data/tests.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/__init__.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/apps.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/caches.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/consts.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/enums.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/errors.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/functions.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/helpers.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/managers.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/presenters.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/results.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/runners.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/strings.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/tests.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/function_templates/function_export_data_template/validators.py-tpl +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/caches.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/errors.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/functions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/presenters.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/requests.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/results.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/runners.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/strings.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/tests.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/functions/base/validators.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/generators.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/management/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/management/base.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/management/commands/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/management/commands/export_entities_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/management/commands/export_latest_entities_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/mixins.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/operations.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/registry/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/registry/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/create-export-command-win.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/registry/templates/ui-js/stage_for_export.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/registry/ui.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/export_data/strategies.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/model_outdated_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/model_outdated_data/cleaners.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/model_outdated_data/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/collect_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/cleaners/upload_data.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/service_outdated_data/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/service/tasks.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/consts.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/dataclasses.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/export_managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/helpers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/base.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/commands/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/commands/async_fix_attachment_size.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/commands/check_upload_status.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_status.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/management/commands/datamart_upload.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/migrations/0002_auto_20250704_0810.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/migrations/0003_auto_20251006_1417.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/migrations/0004_fix_fk_constraints.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/models.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/operations.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/queues.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/tasks.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/actions.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/apps.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/enums.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/managers.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/models.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/templates/ui-js/object-grid-buttons.js +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/upload_data/uploader_log/ui.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration/stages/utils.py +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration.egg-info/dependency_links.txt +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration.egg-info/requires.txt +0 -0
- {edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration.egg-info/top_level.txt +0 -0
|
@@ -28,6 +28,22 @@
|
|
|
28
28
|
|
|
29
29
|
### Удалено
|
|
30
30
|
|
|
31
|
+
## [3.22.3] - 2025-10-14
|
|
32
|
+
|
|
33
|
+
Добавлена зачистка файлов устаревших данных сервисной модели РВД `RDMExportingDataSubStageAttachment`.
|
|
34
|
+
Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
|
|
35
|
+
|
|
36
|
+
### Добавлено
|
|
37
|
+
|
|
38
|
+
- [EDUDEVOPS-98](https://jira.bars.group/browse/EDUDEVOPS-98)
|
|
39
|
+
PATCH Добавлена зачистка файлов устаревших данных сервисной модели РВД `RDMExportingDataSubStageAttachment`
|
|
40
|
+
в команду/ночной скрипт `rdm_cleanup_outdated_data`.
|
|
41
|
+
|
|
42
|
+
### Исправлено
|
|
43
|
+
|
|
44
|
+
- [EDUSCHL-24360](https://jira.bars.group/browse/EDUSCHL-24360)
|
|
45
|
+
PATCH Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
|
|
46
|
+
|
|
31
47
|
|
|
32
48
|
## [3.22.2] - 2025-10-12
|
|
33
49
|
|
|
@@ -106,6 +122,16 @@ BaseRDMModel -> BaseAdditionalRDMModel.
|
|
|
106
122
|
```
|
|
107
123
|
|
|
108
124
|
|
|
125
|
+
## [3.21.2] - 2025-10-14
|
|
126
|
+
|
|
127
|
+
Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
|
|
128
|
+
|
|
129
|
+
### Исправлено
|
|
130
|
+
|
|
131
|
+
- [EDUSCHL-24360](https://jira.bars.group/browse/EDUSCHL-24360)
|
|
132
|
+
PATCH Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
|
|
133
|
+
|
|
134
|
+
|
|
109
135
|
## [3.21.1] - 2025-10-12
|
|
110
136
|
|
|
111
137
|
Для обеспечения корректной работы была выстроена иная структура базовых моделей РВД:
|
|
@@ -132,6 +158,16 @@ BaseRDMModel -> BaseAdditionalRDMModel.
|
|
|
132
158
|
MINOR Переименование m3-django-compat в m3-django-compatibility.
|
|
133
159
|
|
|
134
160
|
|
|
161
|
+
## [3.20.2] - 2025-10-14
|
|
162
|
+
|
|
163
|
+
Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
|
|
164
|
+
|
|
165
|
+
### Исправлено
|
|
166
|
+
|
|
167
|
+
- [EDUSCHL-24360](https://jira.bars.group/browse/EDUSCHL-24360)
|
|
168
|
+
PATCH Исправление вывода списков моделей и сущностей в реестрах сбора и выгрузки данных.
|
|
169
|
+
|
|
170
|
+
|
|
135
171
|
## [3.20.1] - 2025-10-12
|
|
136
172
|
|
|
137
173
|
Для обеспечения корректной работы была выстроена иная структура базовых моделей РВД:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edu-rdm-integration
|
|
3
|
-
Version: 3.22.
|
|
3
|
+
Version: 3.22.3
|
|
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
|
|
@@ -70,6 +70,11 @@ class RDMEntityEnum(TitledModelEnum):
|
|
|
70
70
|
|
|
71
71
|
return model_enums
|
|
72
72
|
|
|
73
|
+
@classmethod
|
|
74
|
+
def get_choices(cls) -> list[tuple[str, str]]:
|
|
75
|
+
"""Возвращает список кортежей из ключей и ключей перечисления сущностей."""
|
|
76
|
+
return [(key, key) for key in sorted(cls.get_model_enum_keys())]
|
|
77
|
+
|
|
73
78
|
@classmethod
|
|
74
79
|
def extend(
|
|
75
80
|
cls,
|
|
@@ -116,6 +116,11 @@ class RDMModelEnum(TitledModelEnum):
|
|
|
116
116
|
verbose_name = 'Модель-перечисление моделей "Региональной витрины данных"'
|
|
117
117
|
verbose_name_plural = 'Модели-перечисления моделей "Региональной витрины данных"'
|
|
118
118
|
|
|
119
|
+
@classmethod
|
|
120
|
+
def get_choices(cls) -> list[tuple[str, str]]:
|
|
121
|
+
"""Возвращает список кортежей из ключей и ключей перечисления моделей."""
|
|
122
|
+
return [(key, key) for key in sorted(cls.get_model_enum_keys())]
|
|
123
|
+
|
|
119
124
|
@classmethod
|
|
120
125
|
def _get_model_relations(cls, model: Type['BaseRDMModel']) -> dict[str, str]:
|
|
121
126
|
"""Получение списка связей модели РВД."""
|
|
@@ -65,6 +65,11 @@ class RDMCollectingDataStageStatus(TitledModelEnum):
|
|
|
65
65
|
verbose_name = 'Модель-перечисление статусов этапа сбора данных'
|
|
66
66
|
verbose_name_plural = 'Модели-перечисления статусов этапов сбора данных'
|
|
67
67
|
|
|
68
|
+
@classmethod
|
|
69
|
+
def get_choices(cls) -> list[tuple[str, str]]:
|
|
70
|
+
"""Возвращает список кортежей из ключей и ключей перечисления статусов."""
|
|
71
|
+
return [(key, key) for key in cls.get_model_enum_keys()]
|
|
72
|
+
|
|
68
73
|
|
|
69
74
|
class RDMCollectingDataStage(ReprStrPreModelMixin, BaseObjectModel):
|
|
70
75
|
"""Этап подготовки данных в рамках Функций. За работу Функции отвечает ранер менеджер."""
|
|
@@ -83,7 +83,7 @@ class BaseCollectingDataProgressPack(BaseCommandProgressPack):
|
|
|
83
83
|
'header': 'Модель',
|
|
84
84
|
'sortable': True,
|
|
85
85
|
'filter': ChoicesFilter(
|
|
86
|
-
choices=
|
|
86
|
+
choices=partial(RDMModelEnum.get_choices),
|
|
87
87
|
parser=str,
|
|
88
88
|
lookup=lambda key: Q(model=key) if key else Q(),
|
|
89
89
|
),
|
|
@@ -93,7 +93,7 @@ class BaseCollectingDataProgressPack(BaseCommandProgressPack):
|
|
|
93
93
|
'header': 'Статус асинхронной задачи',
|
|
94
94
|
'sortable': True,
|
|
95
95
|
'filter': ChoicesFilter(
|
|
96
|
-
choices=
|
|
96
|
+
choices=partial(AsyncTaskStatus.get_choices),
|
|
97
97
|
parser=str,
|
|
98
98
|
lookup='task__status_id',
|
|
99
99
|
),
|
|
@@ -118,7 +118,7 @@ class BaseCollectingDataProgressPack(BaseCommandProgressPack):
|
|
|
118
118
|
'header': 'Статус сбора',
|
|
119
119
|
'sortable': True,
|
|
120
120
|
'filter': ChoicesFilter(
|
|
121
|
-
choices=
|
|
121
|
+
choices=partial(RDMCollectingDataStageStatus.get_choices),
|
|
122
122
|
parser=str,
|
|
123
123
|
lookup=lambda key: Q(stage__status=key) if key else Q(),
|
|
124
124
|
),
|
|
@@ -28,7 +28,7 @@ def apply_fk_updates(apps, schema_editor):
|
|
|
28
28
|
table_name=RDMExportingDataSubStageAttachment._meta.db_table,
|
|
29
29
|
field_name='exporting_data_sub_stage_id',
|
|
30
30
|
target_table=RDMExportingDataSubStage._meta.db_table,
|
|
31
|
-
on_delete='
|
|
31
|
+
on_delete='SET NULL',
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
RDMExportingDataSubStageEntity = apps.get_model(
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated by Django 3.2.24 on 2025-10-14 10:33
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.db import (
|
|
5
|
+
migrations,
|
|
6
|
+
models,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Migration(migrations.Migration):
|
|
11
|
+
|
|
12
|
+
dependencies = [
|
|
13
|
+
('edu_rdm_integration_export_data_stage', '0003_fix_fk_constraints'),
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
operations = [
|
|
17
|
+
migrations.AlterField(
|
|
18
|
+
model_name='rdmexportingdatasubstageattachment',
|
|
19
|
+
name='exporting_data_sub_stage',
|
|
20
|
+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='edu_rdm_integration_export_data_stage.rdmexportingdatasubstage', verbose_name='Подэтап выгрузки данных'),
|
|
21
|
+
),
|
|
22
|
+
]
|
|
@@ -69,6 +69,11 @@ class RDMExportingDataStageStatus(TitledModelEnum):
|
|
|
69
69
|
title='Завершено',
|
|
70
70
|
)
|
|
71
71
|
|
|
72
|
+
@classmethod
|
|
73
|
+
def get_choices(cls) -> list[tuple[str, str]]:
|
|
74
|
+
"""Возвращает список кортежей из ключей и ключей перечисления статусов."""
|
|
75
|
+
return [(key, key) for key in cls.get_model_enum_keys()]
|
|
76
|
+
|
|
72
77
|
class Meta:
|
|
73
78
|
db_table = 'rdm_exporting_data_stage_status'
|
|
74
79
|
verbose_name = 'Модель-перечисление статусов этапа выгрузки данных'
|
|
@@ -248,7 +253,9 @@ class RDMExportingDataSubStageAttachment(ReprStrPreModelMixin, BaseObjectModel):
|
|
|
248
253
|
exporting_data_sub_stage = ForeignKey(
|
|
249
254
|
to=RDMExportingDataSubStage,
|
|
250
255
|
verbose_name='Подэтап выгрузки данных',
|
|
251
|
-
|
|
256
|
+
null=True,
|
|
257
|
+
blank=True,
|
|
258
|
+
on_delete=SET_NULL,
|
|
252
259
|
)
|
|
253
260
|
|
|
254
261
|
# TODO PYTD-22 В зависимости от принятого решения по инструменту ограничения доступа к media-файлам, нужно будет
|
|
@@ -86,7 +86,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
|
|
|
86
86
|
'header': 'Сущность',
|
|
87
87
|
'sortable': True,
|
|
88
88
|
'filter': ChoicesFilter(
|
|
89
|
-
choices=
|
|
89
|
+
choices=partial(RDMEntityEnum.get_choices),
|
|
90
90
|
parser=str,
|
|
91
91
|
lookup=lambda key: Q(entity=key) if key else Q(),
|
|
92
92
|
),
|
|
@@ -96,7 +96,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
|
|
|
96
96
|
'header': 'Статус асинхронной задачи',
|
|
97
97
|
'sortable': True,
|
|
98
98
|
'filter': ChoicesFilter(
|
|
99
|
-
choices=
|
|
99
|
+
choices=partial(AsyncTaskStatus.get_choices),
|
|
100
100
|
parser=str,
|
|
101
101
|
lookup='task__status_id',
|
|
102
102
|
),
|
|
@@ -131,7 +131,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
|
|
|
131
131
|
'header': 'Статус экспорта',
|
|
132
132
|
'sortable': True,
|
|
133
133
|
'filter': ChoicesFilter(
|
|
134
|
-
choices=
|
|
134
|
+
choices=partial(RDMExportingDataStageStatus.get_choices),
|
|
135
135
|
parser=str,
|
|
136
136
|
lookup=lambda key: Q(stage__status=key) if key else Q(),
|
|
137
137
|
),
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from abc import (
|
|
3
|
+
ABCMeta,
|
|
4
|
+
abstractmethod,
|
|
5
|
+
)
|
|
6
|
+
from pathlib import (
|
|
7
|
+
Path,
|
|
8
|
+
)
|
|
9
|
+
from typing import (
|
|
10
|
+
TYPE_CHECKING,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
import asyncpg
|
|
14
|
+
from django.conf import (
|
|
15
|
+
settings,
|
|
16
|
+
)
|
|
17
|
+
from django.db import (
|
|
18
|
+
connection,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
from educommon import (
|
|
22
|
+
logger,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from asyncpg import (
|
|
28
|
+
Pool,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class BaseServiceOutdatedDataCleaner(metaclass=ABCMeta):
|
|
33
|
+
"""Базовый класс уборщика устаревших сервисных данных."""
|
|
34
|
+
|
|
35
|
+
model = None
|
|
36
|
+
|
|
37
|
+
SELECT_RDM_CHUNK_BOUNDED_SQL = """
|
|
38
|
+
DO $$
|
|
39
|
+
DECLARE
|
|
40
|
+
chunk_size INT := {chunk_size};
|
|
41
|
+
last_id INT := 0;
|
|
42
|
+
first_id INT;
|
|
43
|
+
last_chunk_id INT;
|
|
44
|
+
BEGIN
|
|
45
|
+
DROP TABLE IF EXISTS rdm_chunk_bounds;
|
|
46
|
+
CREATE TEMP TABLE rdm_chunk_bounds (
|
|
47
|
+
chunk_number INT,
|
|
48
|
+
first_id INT,
|
|
49
|
+
last_id INT
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
DROP TABLE IF EXISTS tmp_chunk;
|
|
53
|
+
CREATE TEMP TABLE tmp_chunk (id INT) ON COMMIT DROP;
|
|
54
|
+
|
|
55
|
+
WHILE TRUE LOOP
|
|
56
|
+
TRUNCATE tmp_chunk;
|
|
57
|
+
|
|
58
|
+
INSERT INTO tmp_chunk (id)
|
|
59
|
+
SELECT id
|
|
60
|
+
FROM {table_name}
|
|
61
|
+
WHERE id > last_id
|
|
62
|
+
ORDER BY id
|
|
63
|
+
LIMIT chunk_size;
|
|
64
|
+
|
|
65
|
+
IF NOT FOUND THEN
|
|
66
|
+
EXIT;
|
|
67
|
+
END IF;
|
|
68
|
+
|
|
69
|
+
SELECT MIN(id), MAX(id)
|
|
70
|
+
INTO first_id, last_chunk_id
|
|
71
|
+
FROM tmp_chunk;
|
|
72
|
+
|
|
73
|
+
INSERT INTO rdm_chunk_bounds (chunk_number, first_id, last_id)
|
|
74
|
+
VALUES (
|
|
75
|
+
(SELECT COUNT(*) FROM rdm_chunk_bounds) + 1,
|
|
76
|
+
first_id,
|
|
77
|
+
last_chunk_id
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
last_id := last_chunk_id;
|
|
81
|
+
END LOOP;
|
|
82
|
+
END $$;
|
|
83
|
+
|
|
84
|
+
SELECT * FROM rdm_chunk_bounds ORDER BY chunk_number;
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
REMOVE_OUTDATED_DATA_SQL = """
|
|
88
|
+
WITH deleted_rows AS (
|
|
89
|
+
DELETE FROM {table_name}
|
|
90
|
+
WHERE id IN (
|
|
91
|
+
WITH tbl AS (
|
|
92
|
+
SELECT *
|
|
93
|
+
FROM {table_name}
|
|
94
|
+
WHERE id >= {first_id}
|
|
95
|
+
AND id <= {last_id}
|
|
96
|
+
)
|
|
97
|
+
SELECT tbl.id
|
|
98
|
+
FROM tbl
|
|
99
|
+
WHERE {conditions}
|
|
100
|
+
)
|
|
101
|
+
RETURNING id
|
|
102
|
+
)
|
|
103
|
+
SELECT COUNT(*) AS deleted_count FROM deleted_rows;
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
def __init__(
|
|
107
|
+
self,
|
|
108
|
+
*args,
|
|
109
|
+
safe: bool = False,
|
|
110
|
+
log_sql: bool = False,
|
|
111
|
+
**kwargs
|
|
112
|
+
):
|
|
113
|
+
"""Инициализация уборщика."""
|
|
114
|
+
self._safe = safe
|
|
115
|
+
self._log_sql = log_sql
|
|
116
|
+
self._deleted_count = 0
|
|
117
|
+
|
|
118
|
+
super().__init__(*args, **kwargs)
|
|
119
|
+
|
|
120
|
+
@abstractmethod
|
|
121
|
+
def get_merged_conditions(self) -> str:
|
|
122
|
+
"""Возвращает условия для удаления устаревших данных."""
|
|
123
|
+
|
|
124
|
+
@classmethod
|
|
125
|
+
def get_table_name(cls) -> str:
|
|
126
|
+
"""Возвращает имя таблицы в базе данных."""
|
|
127
|
+
if cls.model is None:
|
|
128
|
+
raise NotImplementedError('Необходимо задать атрибут "model"')
|
|
129
|
+
|
|
130
|
+
return cls.model._meta.db_table
|
|
131
|
+
|
|
132
|
+
async def file_deletion_process(self, file_paths: list[str]):
|
|
133
|
+
"""Функция для удаления файлов, связанных с удалёнными устаревшими записями.
|
|
134
|
+
|
|
135
|
+
Очистка данных производится в таблицах системных моделей РВД.
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
def get_orphan_reference_condition(
|
|
139
|
+
self,
|
|
140
|
+
reference_table: str,
|
|
141
|
+
reference_field: str,
|
|
142
|
+
local_field: str = 'id'
|
|
143
|
+
) -> str:
|
|
144
|
+
"""Условие проверки отсутствия записей в связанной таблице."""
|
|
145
|
+
return f"""
|
|
146
|
+
NOT EXISTS (
|
|
147
|
+
SELECT 1
|
|
148
|
+
FROM {reference_table} ref
|
|
149
|
+
WHERE ref.{reference_field} = tbl.{local_field}
|
|
150
|
+
)
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
def get_status_condition(
|
|
154
|
+
self,
|
|
155
|
+
related_table: str,
|
|
156
|
+
related_field: str,
|
|
157
|
+
status_value: str,
|
|
158
|
+
days: int,
|
|
159
|
+
local_field: str = 'id'
|
|
160
|
+
) -> str:
|
|
161
|
+
"""Условие проверки записи с заданным статусом и возрастом."""
|
|
162
|
+
return f"""
|
|
163
|
+
EXISTS (
|
|
164
|
+
SELECT 1
|
|
165
|
+
FROM {related_table} sub
|
|
166
|
+
WHERE sub.{related_field} = tbl.{local_field}
|
|
167
|
+
AND sub.status_id = '{status_value}'
|
|
168
|
+
AND sub.ended_at <= NOW() - INTERVAL '{days} days'
|
|
169
|
+
)
|
|
170
|
+
"""
|
|
171
|
+
|
|
172
|
+
def get_chunk_bounded(self):
|
|
173
|
+
"""Возвращает границы чанков для текущей таблицы."""
|
|
174
|
+
get_chunk_bounded_sql = self.SELECT_RDM_CHUNK_BOUNDED_SQL.format(
|
|
175
|
+
table_name=self.get_table_name(),
|
|
176
|
+
chunk_size=settings.RDM_CLEANUP_MODELS_OUTDATED_DATA_CHUNK_SIZE,
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
if self._log_sql:
|
|
180
|
+
# Проверка на доступность sqlparse для форматирования
|
|
181
|
+
try:
|
|
182
|
+
import sqlparse
|
|
183
|
+
except ImportError:
|
|
184
|
+
sqlparse = None
|
|
185
|
+
|
|
186
|
+
if sqlparse:
|
|
187
|
+
# Форматирование кода
|
|
188
|
+
get_chunk_bounded_sql = sqlparse.format(
|
|
189
|
+
sql=get_chunk_bounded_sql,
|
|
190
|
+
reindent=True,
|
|
191
|
+
strip_comments=True,
|
|
192
|
+
)
|
|
193
|
+
logger.info(
|
|
194
|
+
f'Запрос для получения границ чанков модели {self.get_table_name()}: \n{get_chunk_bounded_sql}\n'
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
with connection.cursor() as cursor:
|
|
198
|
+
cursor.execute(get_chunk_bounded_sql)
|
|
199
|
+
result = cursor.fetchall()
|
|
200
|
+
|
|
201
|
+
return result
|
|
202
|
+
|
|
203
|
+
async def execute_query(self, pool: 'Pool', query: str):
|
|
204
|
+
"""Асинхронное выполнение запроса."""
|
|
205
|
+
async with pool.acquire() as conn:
|
|
206
|
+
try:
|
|
207
|
+
if self._safe:
|
|
208
|
+
logger.info(f'Запрос не будет выполнен, включен безопасный режим!\n')
|
|
209
|
+
|
|
210
|
+
if self._log_sql:
|
|
211
|
+
logger.info(f'{query}\n')
|
|
212
|
+
else:
|
|
213
|
+
result = await conn.fetch(query)
|
|
214
|
+
if not result:
|
|
215
|
+
return
|
|
216
|
+
|
|
217
|
+
if self._log_sql:
|
|
218
|
+
logger.info(f'При помощи запроса:\n{query}\n')
|
|
219
|
+
|
|
220
|
+
# Проверяем, что вернул запрос
|
|
221
|
+
if 'deleted_count' in result[0]:
|
|
222
|
+
deleted_count = result[0]['deleted_count']
|
|
223
|
+
self._deleted_count += deleted_count
|
|
224
|
+
logger.info(f'Было удалено записей: {deleted_count}')
|
|
225
|
+
else:
|
|
226
|
+
file_paths = [record['file_path'] for record in result if record.get('file_path')]
|
|
227
|
+
if file_paths:
|
|
228
|
+
await self.file_deletion_process(file_paths)
|
|
229
|
+
deleted_count = len(result)
|
|
230
|
+
self._deleted_count += deleted_count
|
|
231
|
+
logger.info(f'Было удалено записей с файлами: {deleted_count}')
|
|
232
|
+
|
|
233
|
+
except Exception as e:
|
|
234
|
+
logger.error(f'Ошибка при выполнении {query}\n{e}')
|
|
235
|
+
|
|
236
|
+
def prepare_queries(self, chunk_bounded: list[tuple[int, int, int]]) -> list[str]:
|
|
237
|
+
"""Формирование списка запросов для удаления устаревших данных."""
|
|
238
|
+
queries = []
|
|
239
|
+
conditions = self.get_merged_conditions()
|
|
240
|
+
|
|
241
|
+
for chunk_number, first_id, last_id in chunk_bounded:
|
|
242
|
+
remove_outdated_data_sql = self.REMOVE_OUTDATED_DATA_SQL.format(
|
|
243
|
+
table_name=self.get_table_name(),
|
|
244
|
+
first_id=first_id,
|
|
245
|
+
last_id=last_id,
|
|
246
|
+
conditions=conditions,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
queries.append(remove_outdated_data_sql)
|
|
250
|
+
|
|
251
|
+
return queries
|
|
252
|
+
|
|
253
|
+
async def execute_queries(self, queries: list[str]) -> None:
|
|
254
|
+
"""Асинхронное выполнение запросов."""
|
|
255
|
+
DB_SETTINGS = settings.DATABASES['default']
|
|
256
|
+
|
|
257
|
+
pool = await asyncpg.create_pool(
|
|
258
|
+
max_size=settings.RDM_CLEANUP_MODELS_OUTDATED_DATA_POOL_SIZE,
|
|
259
|
+
min_size=settings.RDM_CLEANUP_MODELS_OUTDATED_DATA_POOL_SIZE,
|
|
260
|
+
host=DB_SETTINGS['HOST'],
|
|
261
|
+
port=DB_SETTINGS['PORT'],
|
|
262
|
+
user=DB_SETTINGS['USER'],
|
|
263
|
+
password=DB_SETTINGS['PASSWORD'],
|
|
264
|
+
database=DB_SETTINGS['NAME'],
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
tasks = [self.execute_query(pool, query) for query in queries]
|
|
268
|
+
|
|
269
|
+
await asyncio.gather(*tasks)
|
|
270
|
+
|
|
271
|
+
def run(self):
|
|
272
|
+
"""Запуск очистки устаревших данных."""
|
|
273
|
+
chunk_bounded = self.get_chunk_bounded()
|
|
274
|
+
|
|
275
|
+
queries = self.prepare_queries(chunk_bounded=chunk_bounded)
|
|
276
|
+
|
|
277
|
+
if queries:
|
|
278
|
+
even_loop = asyncio.new_event_loop()
|
|
279
|
+
try:
|
|
280
|
+
even_loop.run_until_complete(self.execute_queries(queries=queries))
|
|
281
|
+
finally:
|
|
282
|
+
even_loop.close()
|
|
283
|
+
|
|
284
|
+
logger.info(f'Удалено записей модели {self.model.__name__}: {self._deleted_count}')
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
class ServiceFileCleaner:
|
|
288
|
+
"""Асинхронный сервис для безопасного удаления файлов из MEDIA_ROOT."""
|
|
289
|
+
|
|
290
|
+
@staticmethod
|
|
291
|
+
async def file_deletion_process(file_paths: list[str]) -> None:
|
|
292
|
+
"""Удаляет указанные файлы, считая пути относительными к MEDIA_ROOT."""
|
|
293
|
+
media_root = Path(settings.MEDIA_ROOT).resolve()
|
|
294
|
+
|
|
295
|
+
async def delete_file(path_str: str):
|
|
296
|
+
path = (media_root / path_str).resolve()
|
|
297
|
+
try:
|
|
298
|
+
exists = await asyncio.to_thread(path.exists)
|
|
299
|
+
if exists and await asyncio.to_thread(path.is_file):
|
|
300
|
+
await asyncio.to_thread(path.unlink)
|
|
301
|
+
|
|
302
|
+
except Exception as e:
|
|
303
|
+
logger.warning(f"Не удалось удалить {path}: {e}")
|
|
304
|
+
|
|
305
|
+
await asyncio.gather(*(delete_file(path) for path in file_paths))
|
|
@@ -25,6 +25,7 @@ from educommon.utils.seqtools import (
|
|
|
25
25
|
|
|
26
26
|
from .base import (
|
|
27
27
|
BaseServiceOutdatedDataCleaner,
|
|
28
|
+
ServiceFileCleaner,
|
|
28
29
|
)
|
|
29
30
|
from .consts import (
|
|
30
31
|
OLD_RDM_MODEL,
|
|
@@ -102,15 +103,35 @@ class ExportingDataStageCleaner(BaseServiceOutdatedDataCleaner):
|
|
|
102
103
|
return self.get_orphan_reference_condition(sub_stage_table, 'stage_id')
|
|
103
104
|
|
|
104
105
|
|
|
105
|
-
class ExportingDataSubStageAttachmentCleaner(BaseServiceOutdatedDataCleaner):
|
|
106
|
+
class ExportingDataSubStageAttachmentCleaner(ServiceFileCleaner, BaseServiceOutdatedDataCleaner):
|
|
106
107
|
"""Очистка вложений подэтапов выгрузки данных."""
|
|
107
108
|
|
|
108
109
|
model = RDMExportingDataSubStageAttachment
|
|
109
110
|
|
|
111
|
+
REMOVE_OUTDATED_DATA_SQL = """
|
|
112
|
+
WITH deleted_rows AS (
|
|
113
|
+
DELETE FROM {table_name}
|
|
114
|
+
WHERE id IN (
|
|
115
|
+
WITH tbl AS (
|
|
116
|
+
SELECT *
|
|
117
|
+
FROM {table_name}
|
|
118
|
+
WHERE id >= {first_id}
|
|
119
|
+
AND id <= {last_id}
|
|
120
|
+
)
|
|
121
|
+
SELECT tbl.id
|
|
122
|
+
FROM tbl
|
|
123
|
+
WHERE {conditions}
|
|
124
|
+
)
|
|
125
|
+
RETURNING attachment AS file_path
|
|
126
|
+
)
|
|
127
|
+
SELECT file_path FROM deleted_rows;
|
|
128
|
+
"""
|
|
129
|
+
|
|
110
130
|
def get_merged_conditions(self) -> str:
|
|
111
131
|
"""Формирует условие удаления для устаревших данных."""
|
|
112
132
|
sub_stage_table = ExportingDataSubStageCleaner.get_table_name()
|
|
113
133
|
conditions = [
|
|
134
|
+
'exporting_data_sub_stage_id IS NULL',
|
|
114
135
|
f'({self.get_status_condition(sub_stage_table, "id", "FINISHED", 7, "exporting_data_sub_stage_id")})',
|
|
115
136
|
f'({self.get_status_condition(sub_stage_table, "id", "FAILED",30, "exporting_data_sub_stage_id")})',
|
|
116
137
|
f'({self.get_orphan_reference_condition(sub_stage_table, "id", "exporting_data_sub_stage_id")})',
|
{edu_rdm_integration-3.22.2 → edu_rdm_integration-3.22.3}/src/edu_rdm_integration.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edu-rdm-integration
|
|
3
|
-
Version: 3.22.
|
|
3
|
+
Version: 3.22.3
|
|
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
|
|
@@ -224,6 +224,7 @@ src/edu_rdm_integration/stages/export_data/management/commands/export_latest_ent
|
|
|
224
224
|
src/edu_rdm_integration/stages/export_data/migrations/0001_initial.py
|
|
225
225
|
src/edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py
|
|
226
226
|
src/edu_rdm_integration/stages/export_data/migrations/0003_fix_fk_constraints.py
|
|
227
|
+
src/edu_rdm_integration/stages/export_data/migrations/0004_alter_rdmexportingdatasubstageattachment_exporting_data_sub_stage.py
|
|
227
228
|
src/edu_rdm_integration/stages/export_data/migrations/__init__.py
|
|
228
229
|
src/edu_rdm_integration/stages/export_data/registry/__init__.py
|
|
229
230
|
src/edu_rdm_integration/stages/export_data/registry/actions.py
|