edu-rdm-integration 3.18.3__py3-none-any.whl → 3.18.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- edu_rdm_integration/core/utils.py +0 -4
- edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py +31 -2
- edu_rdm_integration/stages/service/model_outdated_data/cleaners.py +10 -1
- edu_rdm_integration/stages/service/model_outdated_data/managers.py +11 -2
- {edu_rdm_integration-3.18.3.dist-info → edu_rdm_integration-3.18.5.dist-info}/METADATA +11 -1
- {edu_rdm_integration-3.18.3.dist-info → edu_rdm_integration-3.18.5.dist-info}/RECORD +9 -9
- {edu_rdm_integration-3.18.3.dist-info → edu_rdm_integration-3.18.5.dist-info}/WHEEL +0 -0
- {edu_rdm_integration-3.18.3.dist-info → edu_rdm_integration-3.18.5.dist-info}/licenses/LICENSE +0 -0
- {edu_rdm_integration-3.18.3.dist-info → edu_rdm_integration-3.18.5.dist-info}/top_level.txt +0 -0
|
@@ -11,9 +11,6 @@ from typing import (
|
|
|
11
11
|
Union,
|
|
12
12
|
)
|
|
13
13
|
|
|
14
|
-
from _operator import (
|
|
15
|
-
attrgetter,
|
|
16
|
-
)
|
|
17
14
|
from django.conf import (
|
|
18
15
|
settings,
|
|
19
16
|
)
|
|
@@ -58,7 +55,6 @@ def register_classes(classes: Iterable[type[BaseEnumRegisterMixin]]) -> None:
|
|
|
58
55
|
Args:
|
|
59
56
|
classes: Классы, поддерживающие интерфейс регистрации.
|
|
60
57
|
"""
|
|
61
|
-
|
|
62
58
|
for enum_class in classes:
|
|
63
59
|
enum_class.register()
|
|
64
60
|
|
edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from django.conf import (
|
|
2
|
+
settings,
|
|
3
|
+
)
|
|
1
4
|
from django.core.management import (
|
|
2
5
|
BaseCommand,
|
|
3
6
|
)
|
|
@@ -18,6 +21,7 @@ class Command(BaseCommand):
|
|
|
18
21
|
help = 'Ночная команда для очистки устаревших данных РВД.'
|
|
19
22
|
|
|
20
23
|
def add_arguments(self, parser):
|
|
24
|
+
"""Добавляет аргументы командной строки."""
|
|
21
25
|
models = ', '.join(f'{key} - {value.title}' for key, value in RDMModelEnum.get_enum_data().items())
|
|
22
26
|
models_help_text = (
|
|
23
27
|
f'Значением параметра является перечисление моделей РВД, для которых должна быть произведена зачистка '
|
|
@@ -33,7 +37,32 @@ class Command(BaseCommand):
|
|
|
33
37
|
help=models_help_text,
|
|
34
38
|
)
|
|
35
39
|
|
|
40
|
+
parser.add_argument(
|
|
41
|
+
'--safe',
|
|
42
|
+
action='store_true',
|
|
43
|
+
dest='safe',
|
|
44
|
+
default=False,
|
|
45
|
+
help='Запускать команду в безопасном режиме (без удаления данных, только логирование).',
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
parser.add_argument(
|
|
49
|
+
'--log-sql',
|
|
50
|
+
action='store_true',
|
|
51
|
+
dest='log_sql',
|
|
52
|
+
default=False,
|
|
53
|
+
help='Включить логирование SQL-запросов, выполняемых во время работы команды.',
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def _cleanup_model_outdated_data(self, options):
|
|
57
|
+
"""Очистка устаревших данных моделей РВД."""
|
|
58
|
+
model_data_cleaner_manager = ModelOutdatedDataCleanerManager(
|
|
59
|
+
models=options['models'],
|
|
60
|
+
safe=options['safe'],
|
|
61
|
+
log_sql=options['log_sql'],
|
|
62
|
+
)
|
|
63
|
+
model_data_cleaner_manager.run()
|
|
64
|
+
|
|
36
65
|
def handle(self, *args, **options):
|
|
37
66
|
"""Запуск очистки устаревших данных РВД."""
|
|
38
|
-
|
|
39
|
-
|
|
67
|
+
if settings.RDM_ENABLE_CLEANUP_MODELS_OUTDATED_DATA:
|
|
68
|
+
self._cleanup_model_outdated_data(options)
|
|
@@ -16,8 +16,17 @@ if TYPE_CHECKING:
|
|
|
16
16
|
class BaseModelOutdatedDataCleaner(metaclass=ABCMeta):
|
|
17
17
|
"""Базовый класс уборщика устаревших данных моделей РВД."""
|
|
18
18
|
|
|
19
|
-
def __init__(
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
model_enum_value: 'ModelEnumValue',
|
|
22
|
+
*args,
|
|
23
|
+
safe: bool = False,
|
|
24
|
+
log_sql: bool = False,
|
|
25
|
+
**kwargs,
|
|
26
|
+
):
|
|
20
27
|
self._model_enum_value = model_enum_value
|
|
28
|
+
self._safe = safe
|
|
29
|
+
self._log_sql = log_sql
|
|
21
30
|
|
|
22
31
|
super().__init__(*args, **kwargs)
|
|
23
32
|
|
|
@@ -23,8 +23,17 @@ class ModelOutdatedDataCleanerManager:
|
|
|
23
23
|
метод run.
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
def __init__(
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
*args,
|
|
29
|
+
models: Optional[list[str]] = None,
|
|
30
|
+
safe: bool = False,
|
|
31
|
+
log_sql: bool = False,
|
|
32
|
+
**kwargs,
|
|
33
|
+
):
|
|
27
34
|
self._models = models
|
|
35
|
+
self._safe = safe
|
|
36
|
+
self._log_sql = log_sql
|
|
28
37
|
|
|
29
38
|
super().__init__(*args, **kwargs)
|
|
30
39
|
|
|
@@ -39,7 +48,7 @@ class ModelOutdatedDataCleanerManager:
|
|
|
39
48
|
outdated_data_cleaner_module = importlib.import_module(outdated_data_cleaner_module_path)
|
|
40
49
|
outdated_data_cleaner = getattr(outdated_data_cleaner_module, cleaner_name)
|
|
41
50
|
|
|
42
|
-
outdated_data_cleaner(model_enum_value=model_enum_value).run()
|
|
51
|
+
outdated_data_cleaner(model_enum_value=model_enum_value, safe=self._safe, log_sql=self._log_sql).run()
|
|
43
52
|
|
|
44
53
|
def _process_models(self):
|
|
45
54
|
"""Обрабатывает все модели РВД."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edu-rdm-integration
|
|
3
|
-
Version: 3.18.
|
|
3
|
+
Version: 3.18.5
|
|
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
|
|
@@ -197,6 +197,7 @@ INSTALLED_APPS = (
|
|
|
197
197
|
('uploader_client', 'ORGANIZATION_OGRN'): '',
|
|
198
198
|
('uploader_client', 'INSTALLATION_NAME'): '',
|
|
199
199
|
('uploader_client', 'INSTALLATION_ID'): '',
|
|
200
|
+
('rdm_cleanup_outdated_data', 'ENABLE_CLEANUP_MODELS_OUTDATED_DATA'): False,
|
|
200
201
|
})
|
|
201
202
|
```
|
|
202
203
|
- Получение значений настроек из конфигурационного файла в settings.py:
|
|
@@ -309,6 +310,9 @@ INSTALLED_APPS = (
|
|
|
309
310
|
# Директория логов отправки данных в витрину, доступных для скачивания
|
|
310
311
|
RDM_UPLOAD_LOG_DIR = os.path.join('logs', 'rdm', 'upload')
|
|
311
312
|
os.makedirs(os.path.join(MEDIA_ROOT, RDM_UPLOAD_LOG_DIR), exist_ok=True)
|
|
313
|
+
|
|
314
|
+
# Включить зачистку устаревших данных моделей РВД
|
|
315
|
+
RDM_ENABLE_CLEANUP_MODELS_OUTDATED_DATA = conf.get_bool('rdm_cleanup_outdated_data', 'ENABLE_CLEANUP_MODELS_OUTDATED_DATA')
|
|
312
316
|
```
|
|
313
317
|
|
|
314
318
|
Перечень настроек в settings.py указан в таблице ниже.
|
|
@@ -368,6 +372,7 @@ INSTALLED_APPS = (
|
|
|
368
372
|
| RDM_COLLECT_LOG_DIR | Директория логов сбора данных, доступных для скачивания | |
|
|
369
373
|
| RDM_EXPORT_LOG_DIR | Директория логов экспорта данных, доступных для скачивания | |
|
|
370
374
|
| RDM_UPLOAD_LOG_DIR | Директория логов отправки данных в витрину, доступных для скачивания | |
|
|
375
|
+
| RDM_ENABLE_CLEANUP_MODELS_OUTDATED_DATA | Включение зачистки устаревших данных моделей РВД | False |
|
|
371
376
|
|
|
372
377
|
- В дефолтный конфиг проекта необходимо добавить:
|
|
373
378
|
|
|
@@ -463,6 +468,11 @@ INSTALLED_APPS = (
|
|
|
463
468
|
INSTALLATION_NAME =
|
|
464
469
|
# Идентификатор инсталляции в целевой Витрине
|
|
465
470
|
INSTALLATION_ID =
|
|
471
|
+
|
|
472
|
+
# Настройка зачистки устаревших данных
|
|
473
|
+
[rdm_cleanup_outdated_data]
|
|
474
|
+
# Включить зачистку устаревших данных моделей РВД
|
|
475
|
+
ENABLE_CLEANUP_MODELS_OUTDATED_DATA = False
|
|
466
476
|
```
|
|
467
477
|
На основе дефолтного конфига произвести конфигурирование приложений.
|
|
468
478
|
|
|
@@ -18,7 +18,7 @@ edu_rdm_integration/core/redis_cache.py,sha256=R9_C1H8XbCHxZUoPbr7lfepI7Ic7td_NQ
|
|
|
18
18
|
edu_rdm_integration/core/signals.py,sha256=3eRlpkDcFCF6TN80-QM8yBYLcyozzcmoPjz6r4_ApWg,73
|
|
19
19
|
edu_rdm_integration/core/storages.py,sha256=9nlRfHe4DJMNVgr0N4DGIEnsYLsEGDEO9KFvNac-B_E,6635
|
|
20
20
|
edu_rdm_integration/core/typing.py,sha256=2asD8biX0l_DVqJSU4y19-zzEBJMk967PUj3UhzICzs,785
|
|
21
|
-
edu_rdm_integration/core/utils.py,sha256=
|
|
21
|
+
edu_rdm_integration/core/utils.py,sha256=KAqzToW3fwnWuPAmJplWZwDkBxqjOkjaNsGZnti5gB8,9813
|
|
22
22
|
edu_rdm_integration/core/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
edu_rdm_integration/core/registry/actions.py,sha256=DF5x1OjuVnfFFuPfK1HVIbDdhVArmlSv0-inqf-Gl6s,3886
|
|
24
24
|
edu_rdm_integration/core/registry/apps.py,sha256=ioBzfLzvKb36KmuVVCHbg9wxM6PHy4ZnxxbLm2Da_yI,378
|
|
@@ -48,7 +48,7 @@ edu_rdm_integration/pipelines/cleanup_outdated_data/__init__.py,sha256=47DEQpj8H
|
|
|
48
48
|
edu_rdm_integration/pipelines/cleanup_outdated_data/apps.py,sha256=tyTlr1Wt574eby2vIV68FMm7SPFSZKYw6zNkD8x6COE,507
|
|
49
49
|
edu_rdm_integration/pipelines/cleanup_outdated_data/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
-
edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py,sha256=
|
|
51
|
+
edu_rdm_integration/pipelines/cleanup_outdated_data/management/commands/rdm_cleanup_outdated_data.py,sha256=JsmMCv9dQpy0flyJr2gviG0A57FG7JcLAHKO-If_VGY,2909
|
|
52
52
|
edu_rdm_integration/pipelines/transfer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
53
|
edu_rdm_integration/pipelines/transfer/actions.py,sha256=e94NVtTcFIqBBTZ9vbSfh_0oXUWK9ZOx2pDYnIePJVc,5920
|
|
54
54
|
edu_rdm_integration/pipelines/transfer/app_meta.py,sha256=jshfepDDJrbCACtJBJBPuidAVJ6rcziQiet27wqOIjk,373
|
|
@@ -220,8 +220,8 @@ edu_rdm_integration/stages/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
|
|
|
220
220
|
edu_rdm_integration/stages/service/apps.py,sha256=lgCG4_kpwgfDWh6y-GNuUwz5SOjkP7oS8kkUyVUcNRg,648
|
|
221
221
|
edu_rdm_integration/stages/service/tasks.py,sha256=PPCtT6EpLkAKRczY0KIT6GeE9eBkv60fl2W6KFvCRqc,2302
|
|
222
222
|
edu_rdm_integration/stages/service/model_outdated_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
|
-
edu_rdm_integration/stages/service/model_outdated_data/cleaners.py,sha256=
|
|
224
|
-
edu_rdm_integration/stages/service/model_outdated_data/managers.py,sha256=
|
|
223
|
+
edu_rdm_integration/stages/service/model_outdated_data/cleaners.py,sha256=D4NX5BryzlOORfFRHUElRAsHVLObppPUq4DPGCKTmtw,793
|
|
224
|
+
edu_rdm_integration/stages/service/model_outdated_data/managers.py,sha256=0LNjvycTtSMGsN37U-otlPL_vlYJKZXtNXxwkseK1wA,2353
|
|
225
225
|
edu_rdm_integration/stages/service/service_outdated_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
226
226
|
edu_rdm_integration/stages/upload_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
227
227
|
edu_rdm_integration/stages/upload_data/apps.py,sha256=aFhVPK-65b35CGKoAeAgQ0mm3STaWtZg7rqk3eL-b7s,620
|
|
@@ -254,8 +254,8 @@ edu_rdm_integration/stages/upload_data/uploader_log/ui.py,sha256=mU3XA9zVKHGqzNk
|
|
|
254
254
|
edu_rdm_integration/stages/upload_data/uploader_log/migrations/0001_initial.py,sha256=r5oOB7DBK9-mfuqPAgjXUJY5-hEcmMdILCwDTpaLnBc,753
|
|
255
255
|
edu_rdm_integration/stages/upload_data/uploader_log/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
256
256
|
edu_rdm_integration/stages/upload_data/uploader_log/templates/ui-js/object-grid-buttons.js,sha256=2xyGe0wdVokM0RhpzRzcRvJPBkBmPe3SlZry4oP4Nzs,6201
|
|
257
|
-
edu_rdm_integration-3.18.
|
|
258
|
-
edu_rdm_integration-3.18.
|
|
259
|
-
edu_rdm_integration-3.18.
|
|
260
|
-
edu_rdm_integration-3.18.
|
|
261
|
-
edu_rdm_integration-3.18.
|
|
257
|
+
edu_rdm_integration-3.18.5.dist-info/licenses/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
|
|
258
|
+
edu_rdm_integration-3.18.5.dist-info/METADATA,sha256=9eyFr3E2PKhNOKwMJwDdCwxtjWAy0OLG0MLZDcoMKQ0,40693
|
|
259
|
+
edu_rdm_integration-3.18.5.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
260
|
+
edu_rdm_integration-3.18.5.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
|
|
261
|
+
edu_rdm_integration-3.18.5.dist-info/RECORD,,
|
|
File without changes
|
{edu_rdm_integration-3.18.3.dist-info → edu_rdm_integration-3.18.5.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|