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.
@@ -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
 
@@ -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
- model_data_cleaner_manager = ModelOutdatedDataCleanerManager(models=options['models'])
39
- model_data_cleaner_manager.run()
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__(self, model_enum_value: 'ModelEnumValue', *args, **kwargs):
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__(self, *args, models: Optional[list[str]] = None, **kwargs):
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
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=MaZ-78hR_dlvm6_r2uoYY4Jvv8adMfGz9dIk3QMlPDA,9856
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=XgRoaXyRiJ08En4y1dMGIjr3ES5BPzjU3kpik66ubuo,1811
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=gk5_wUNVJwr3D6k5fJDzbSGEhWUXqk9yT6xPK7OP1hw,637
224
- edu_rdm_integration/stages/service/model_outdated_data/managers.py,sha256=vtHqhdeRXs8qAGltG6YF8gplmAeOQuPIBmrFWGeR7FI,2157
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.3.dist-info/licenses/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
258
- edu_rdm_integration-3.18.3.dist-info/METADATA,sha256=syepnxnmUeKndzEB4uSzmDy_GfWDFTuzub7AwTKcFIs,39873
259
- edu_rdm_integration-3.18.3.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
260
- edu_rdm_integration-3.18.3.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
261
- edu_rdm_integration-3.18.3.dist-info/RECORD,,
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,,