edu-rdm-integration 3.4.9__py3-none-any.whl → 3.5.0__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.
Files changed (67) hide show
  1. edu_rdm_integration/adapters/functions.py +3 -6
  2. edu_rdm_integration/adapters/helpers.py +2 -5
  3. edu_rdm_integration/adapters/managers.py +1 -4
  4. edu_rdm_integration/adapters/runners.py +9 -13
  5. edu_rdm_integration/apps.py +1 -1
  6. edu_rdm_integration/collect_data/base/caches.py +5 -7
  7. edu_rdm_integration/collect_data/base/helpers.py +1 -5
  8. edu_rdm_integration/collect_data/base/managers.py +4 -7
  9. edu_rdm_integration/collect_data/base/mixins.py +5 -8
  10. edu_rdm_integration/collect_data/calculated/base/functions.py +3 -6
  11. edu_rdm_integration/collect_data/calculated/base/helpers.py +2 -6
  12. edu_rdm_integration/collect_data/calculated/base/managers.py +1 -4
  13. edu_rdm_integration/collect_data/calculated/base/runners.py +3 -7
  14. edu_rdm_integration/collect_data/calculated/strategies.py +1 -2
  15. edu_rdm_integration/collect_data/collect.py +6 -10
  16. edu_rdm_integration/collect_data/generators.py +4 -6
  17. edu_rdm_integration/collect_data/helpers.py +1 -4
  18. edu_rdm_integration/collect_data/non_calculated/base/caches.py +2 -4
  19. edu_rdm_integration/collect_data/non_calculated/base/functions.py +3 -6
  20. edu_rdm_integration/collect_data/non_calculated/base/helpers.py +2 -6
  21. edu_rdm_integration/collect_data/non_calculated/base/managers.py +1 -4
  22. edu_rdm_integration/collect_data/non_calculated/base/runners.py +3 -7
  23. edu_rdm_integration/collect_data/non_calculated/strategies.py +1 -2
  24. edu_rdm_integration/collect_data/tests.py +3 -5
  25. edu_rdm_integration/entities.py +21 -22
  26. edu_rdm_integration/enum_register/mixins.py +7 -10
  27. edu_rdm_integration/enum_register/register.py +1 -2
  28. edu_rdm_integration/export_data/base/caches.py +1 -5
  29. edu_rdm_integration/export_data/base/functions.py +5 -7
  30. edu_rdm_integration/export_data/base/helpers.py +9 -13
  31. edu_rdm_integration/export_data/base/managers.py +3 -6
  32. edu_rdm_integration/export_data/base/runners.py +3 -7
  33. edu_rdm_integration/export_data/export.py +5 -9
  34. edu_rdm_integration/export_data/export_manger.py +1 -2
  35. edu_rdm_integration/export_data/generators.py +2 -3
  36. edu_rdm_integration/export_data/helpers.py +1 -4
  37. edu_rdm_integration/export_data/queue.py +3 -6
  38. edu_rdm_integration/export_data/strategies.py +1 -2
  39. edu_rdm_integration/function_templates/function_collect_data_template/functions.py-tpl +8 -9
  40. edu_rdm_integration/function_templates/function_collect_data_template/helpers.py-tpl +4 -6
  41. edu_rdm_integration/function_templates/function_collect_data_template/managers.py-tpl +2 -4
  42. edu_rdm_integration/function_templates/function_collect_data_template/runners.py-tpl +5 -7
  43. edu_rdm_integration/function_templates/function_collect_data_template/tests.py-tpl +1 -6
  44. edu_rdm_integration/function_templates/function_export_data_template/caches.py-tpl +1 -2
  45. edu_rdm_integration/function_templates/function_export_data_template/functions.py-tpl +5 -7
  46. edu_rdm_integration/function_templates/function_export_data_template/helpers.py-tpl +2 -6
  47. edu_rdm_integration/function_templates/function_export_data_template/managers.py-tpl +3 -6
  48. edu_rdm_integration/function_templates/function_export_data_template/runners.py-tpl +5 -7
  49. edu_rdm_integration/helpers.py +8 -11
  50. edu_rdm_integration/management/commands/async_fix_attachment_size.py +3 -7
  51. edu_rdm_integration/management/commands/check_upload_status.py +4 -4
  52. edu_rdm_integration/mapping.py +2 -7
  53. edu_rdm_integration/migrations/0013_set_attachment_size.py +4 -3
  54. edu_rdm_integration/models.py +3 -5
  55. edu_rdm_integration/redis_cache.py +1 -2
  56. edu_rdm_integration/registry/ui.py +5 -3
  57. edu_rdm_integration/storages.py +9 -15
  58. edu_rdm_integration/tasks.py +4 -6
  59. edu_rdm_integration/typing.py +1 -1
  60. edu_rdm_integration/uploader_log/actions.py +1 -1
  61. edu_rdm_integration/utils.py +6 -14
  62. {edu_rdm_integration-3.4.9.dist-info → edu_rdm_integration-3.5.0.dist-info}/METADATA +19 -6
  63. {edu_rdm_integration-3.4.9.dist-info → edu_rdm_integration-3.5.0.dist-info}/RECORD +67 -67
  64. {edu_rdm_integration-3.4.9.dist-info → edu_rdm_integration-3.5.0.dist-info}/LICENSE +0 -0
  65. {edu_rdm_integration-3.4.9.dist-info → edu_rdm_integration-3.5.0.dist-info}/WHEEL +0 -0
  66. {edu_rdm_integration-3.4.9.dist-info → edu_rdm_integration-3.5.0.dist-info}/namespace_packages.txt +0 -0
  67. {edu_rdm_integration-3.4.9.dist-info → edu_rdm_integration-3.5.0.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,6 @@
1
1
  from abc import (
2
2
  ABCMeta,
3
3
  )
4
- from typing import (
5
- Type,
6
- )
7
4
 
8
5
  from edu_rdm_integration.collect_data.base.managers import (
9
6
  BaseCollectingDataRunnerManager,
@@ -19,7 +16,7 @@ class BaseCollectingExportedDataRunnerManager(BaseCollectingDataRunnerManager, m
19
16
  """
20
17
 
21
18
  @classmethod
22
- def _prepare_runner_class(cls) -> Type[BaseCollectingExportedDataRunner]:
19
+ def _prepare_runner_class(cls) -> type[BaseCollectingExportedDataRunner]:
23
20
  """
24
21
  Возвращает класс ранера.
25
22
  """
@@ -1,7 +1,3 @@
1
- from typing import (
2
- Type,
3
- )
4
-
5
1
  from edu_rdm_integration.collect_data.base.runners import (
6
2
  BaseCollectingDataRunner,
7
3
  )
@@ -21,19 +17,19 @@ class BaseCollectingExportedDataRunner(BaseCollectingDataRunner):
21
17
  Базовый класс ранеров функций сбора данных для интеграции с "Региональная витрина данных".
22
18
  """
23
19
 
24
- def _prepare_helper_class(self) -> Type[BaseCollectingExportedDataRunnerHelper]:
20
+ def _prepare_helper_class(self) -> type[BaseCollectingExportedDataRunnerHelper]:
25
21
  """
26
22
  Возвращает класс помощника ранера функции.
27
23
  """
28
24
  return BaseCollectingExportedDataRunnerHelper
29
25
 
30
- def _prepare_validator_class(self) -> Type[BaseCollectingExportedDataRunnerValidator]:
26
+ def _prepare_validator_class(self) -> type[BaseCollectingExportedDataRunnerValidator]:
31
27
  """
32
28
  Возвращает класс валидатора ранера функции.
33
29
  """
34
30
  return BaseCollectingExportedDataRunnerValidator
35
31
 
36
- def _prepare_result_class(self) -> Type[BaseCollectingExportedDataRunnerResult]:
32
+ def _prepare_result_class(self) -> type[BaseCollectingExportedDataRunnerResult]:
37
33
  """
38
34
  Возвращает класс результата ранера функции.
39
35
  """
@@ -1,5 +1,4 @@
1
1
  from typing import (
2
- List,
3
2
  Optional,
4
3
  )
5
4
 
@@ -71,7 +70,7 @@ class CollectingExportedDataFunctionImplementationStrategy(
71
70
  )
72
71
 
73
72
  @classmethod
74
- def _prepare_tags(cls) -> List[str]:
73
+ def _prepare_tags(cls) -> list[str]:
75
74
  """
76
75
  Список тегов, по которым сущность можно будет осуществлять поиск.
77
76
  """
@@ -4,9 +4,7 @@ import uuid
4
4
  from typing import (
5
5
  TYPE_CHECKING,
6
6
  Any,
7
- Dict,
8
7
  Optional,
9
- Type,
10
8
  )
11
9
  from unittest import (
12
10
  mock,
@@ -65,7 +63,7 @@ class BaseCollectingFunctionTestCase(TestCase):
65
63
  databases = (settings.DEFAULT_DB_ALIAS, settings.SERVICE_DB_ALIAS)
66
64
 
67
65
  @property
68
- def manager(self) -> Type['RunnerManager']:
66
+ def manager(self) -> type['RunnerManager']:
69
67
  """Менеджер раннера Функции сбора."""
70
68
  raise NotImplementedError
71
69
 
@@ -101,7 +99,7 @@ class BaseCollectingFunctionTestCase(TestCase):
101
99
  ready_to_save_mock: mock.MagicMock,
102
100
  *,
103
101
  instance: 'Model',
104
- changes: Optional[Dict[str, Any]] = None,
102
+ changes: Optional[dict[str, Any]] = None,
105
103
  operation: EntityLogOperation = EntityLogOperation.UPDATE,
106
104
  ) -> None:
107
105
  """Создает AuditLog."""
@@ -147,7 +145,7 @@ class BaseCollectingFunctionTestCase(TestCase):
147
145
  stage=stage,
148
146
  )
149
147
 
150
- def _clean_data(self, instance: 'Model') -> Dict[str, Optional[str]]:
148
+ def _clean_data(self, instance: 'Model') -> dict[str, Optional[str]]:
151
149
  """Подготавливает данные экземпляра модели для формирования AuditLog'a."""
152
150
  fields = {}
153
151
 
@@ -6,7 +6,6 @@ from datetime import (
6
6
  )
7
7
  from typing import (
8
8
  Optional,
9
- Tuple,
10
9
  )
11
10
 
12
11
  from educommon.integration_entities.entities import (
@@ -73,31 +72,31 @@ class AddressEntity(EntityEnumRegisterMixin, BaseEntity):
73
72
  end_datetime: datetime = None
74
73
 
75
74
  @classmethod
76
- def get_required_fields(cls) -> Tuple[str, ...]:
75
+ def get_required_fields(cls) -> tuple[str, ...]:
77
76
  """Возвращает кортеж обязательных полей."""
78
77
  return cls.ID, cls.TYPE_ADDRESS, cls.TEXT, cls.CREATE_DATETIME, cls.SEND_DATETIME
79
78
 
80
79
  @classmethod
81
- def get_hashable_fields(cls) -> Tuple[str, ...]:
80
+ def get_hashable_fields(cls) -> tuple[str, ...]:
82
81
  """Возвращает кортеж полей, которые необходимо деперсонализировать (хэшировать)."""
83
82
  return tuple()
84
83
 
85
84
  @classmethod
86
- def get_primary_key_fields(cls) -> Tuple[str, ...]:
85
+ def get_primary_key_fields(cls) -> tuple[str, ...]:
87
86
  """
88
87
  Возвращает кортеж полей первичного ключа.
89
88
  """
90
89
  return cls.ID,
91
90
 
92
91
  @classmethod
93
- def get_foreign_key_fields(cls) -> Tuple[str, ...]:
92
+ def get_foreign_key_fields(cls) -> tuple[str, ...]:
94
93
  """
95
94
  Возвращает кортеж полей внешних ключей.
96
95
  """
97
96
  return ()
98
97
 
99
98
  @classmethod
100
- def get_ordered_fields(cls) -> Tuple[str, ...]:
99
+ def get_ordered_fields(cls) -> tuple[str, ...]:
101
100
  return (
102
101
  cls.ID, cls.USE_ADDRESS, cls.TYPE_ADDRESS, cls.TEXT, cls.CITY, cls.DISTRICT, cls.STATE, cls.POSTAL_CODE,
103
102
  cls.COUNTRY, cls.START_DATETIME, cls.END_DATETIME, cls.FLAT, cls.BUILDING, cls.HOUSE, cls.STREET,
@@ -140,31 +139,31 @@ class AddressOrganisationEntity(EntityEnumRegisterMixin, BaseEntity):
140
139
  send_datetime: datetime
141
140
 
142
141
  @classmethod
143
- def get_required_fields(cls) -> Tuple[str, ...]:
142
+ def get_required_fields(cls) -> tuple[str, ...]:
144
143
  """Возвращает кортеж обязательных полей."""
145
144
  return cls.ADDRESS_ID, cls.ORGANISATION_ID, cls.CREATE_DATETIME, cls.SEND_DATETIME
146
145
 
147
146
  @classmethod
148
- def get_hashable_fields(cls) -> Tuple[str, ...]:
147
+ def get_hashable_fields(cls) -> tuple[str, ...]:
149
148
  """Возвращает кортеж полей, которые необходимо деперсонализировать (хэшировать)."""
150
149
  return tuple()
151
150
 
152
151
  @classmethod
153
- def get_primary_key_fields(cls) -> Tuple[str, ...]:
152
+ def get_primary_key_fields(cls) -> tuple[str, ...]:
154
153
  """
155
154
  Возвращает кортеж полей первичного ключа.
156
155
  """
157
156
  return cls.ADDRESS_ID, cls.ORGANISATION_ID,
158
157
 
159
158
  @classmethod
160
- def get_foreign_key_fields(cls) -> Tuple[str, ...]:
159
+ def get_foreign_key_fields(cls) -> tuple[str, ...]:
161
160
  """
162
161
  Возвращает кортеж полей внешних ключей.
163
162
  """
164
163
  return ()
165
164
 
166
165
  @classmethod
167
- def get_ordered_fields(cls) -> Tuple[str, ...]:
166
+ def get_ordered_fields(cls) -> tuple[str, ...]:
168
167
  return cls.ADDRESS_ID, cls.ORGANISATION_ID, cls.CREATE_DATETIME, cls.SEND_DATETIME,
169
168
 
170
169
  # TODO EDUSCHL-20938 Удалить в рамках задачи
@@ -180,7 +179,7 @@ class AddressOrganisationEntity(EntityEnumRegisterMixin, BaseEntity):
180
179
 
181
180
  # TODO EDUSCHL-20938 Удалить в рамках задачи
182
181
  @classmethod
183
- def get_additional_model_enums(cls) -> Optional[Tuple[ModelEnumValue]]:
182
+ def get_additional_model_enums(cls) -> Optional[tuple[ModelEnumValue]]:
184
183
  """Возвращает кортеж значений модели-перечисления основной модели сущности.
185
184
 
186
185
  В классе определяется поле additional_model_enums или данный метод.
@@ -225,7 +224,7 @@ class TelecomEntity(EntityEnumRegisterMixin, BaseEntity):
225
224
  end_datetime: datetime = None
226
225
 
227
226
  @classmethod
228
- def get_ordered_fields(cls) -> Tuple[str, ...]:
227
+ def get_ordered_fields(cls) -> tuple[str, ...]:
229
228
  """
230
229
  Возвращает кортеж полей в правильном порядке.
231
230
  """
@@ -233,28 +232,28 @@ class TelecomEntity(EntityEnumRegisterMixin, BaseEntity):
233
232
  cls.START_DATETIME, cls.END_DATETIME, cls.CREATE_DATETIME, cls.SEND_DATETIME,)
234
233
 
235
234
  @classmethod
236
- def get_primary_key_fields(cls) -> Tuple[str, ...]:
235
+ def get_primary_key_fields(cls) -> tuple[str, ...]:
237
236
  """
238
237
  Возвращает кортеж полей первичного ключа.
239
238
  """
240
239
  return cls.ID,
241
240
 
242
241
  @classmethod
243
- def get_foreign_key_fields(cls) -> Tuple[str, ...]:
242
+ def get_foreign_key_fields(cls) -> tuple[str, ...]:
244
243
  """
245
244
  Возвращает кортеж полей внешних ключей.
246
245
  """
247
246
  return ()
248
247
 
249
248
  @classmethod
250
- def get_required_fields(cls) -> Tuple[str, ...]:
249
+ def get_required_fields(cls) -> tuple[str, ...]:
251
250
  """
252
251
  Возвращает кортеж обязательных полей.
253
252
  """
254
253
  return cls.ID, cls.CREATE_DATETIME, cls.SEND_DATETIME,
255
254
 
256
255
  @classmethod
257
- def get_hashable_fields(cls) -> Tuple[str, ...]:
256
+ def get_hashable_fields(cls) -> tuple[str, ...]:
258
257
  """Возвращает кортеж полей, которые необходимо деперсонализировать (хэшировать)."""
259
258
  return tuple()
260
259
 
@@ -326,7 +325,7 @@ class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
326
325
  phone: str
327
326
 
328
327
  @classmethod
329
- def get_ordered_fields(cls) -> Tuple[str, ...]:
328
+ def get_ordered_fields(cls) -> tuple[str, ...]:
330
329
  """
331
330
  Возвращает кортеж полей в правильном порядке.
332
331
  """
@@ -353,7 +352,7 @@ class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
353
352
  )
354
353
 
355
354
  @classmethod
356
- def get_required_fields(cls) -> Tuple[str, ...]:
355
+ def get_required_fields(cls) -> tuple[str, ...]:
357
356
  """
358
357
  Возвращает кортеж обязательных полей.
359
358
  """
@@ -377,21 +376,21 @@ class OrganisationsEntity(EntityEnumRegisterMixin, BaseEntity):
377
376
  )
378
377
 
379
378
  @classmethod
380
- def get_primary_key_fields(cls) -> Tuple[str, ...]:
379
+ def get_primary_key_fields(cls) -> tuple[str, ...]:
381
380
  """
382
381
  Возвращает кортеж полей первичного ключа.
383
382
  """
384
383
  return cls.ID,
385
384
 
386
385
  @classmethod
387
- def get_foreign_key_fields(cls) -> Tuple[str, ...]:
386
+ def get_foreign_key_fields(cls) -> tuple[str, ...]:
388
387
  """
389
388
  Возвращает кортеж полей внешних ключей.
390
389
  """
391
390
  return cls.PARTOF_ID,
392
391
 
393
392
  @classmethod
394
- def get_hashable_fields(cls) -> Tuple[str, ...]:
393
+ def get_hashable_fields(cls) -> tuple[str, ...]:
395
394
  """
396
395
  Возвращает кортеж полей, которые необходимо деперсонализировать (хэшировать).
397
396
  """
@@ -1,10 +1,7 @@
1
1
  from typing import (
2
2
  Any,
3
- Dict,
4
3
  NamedTuple,
5
4
  Optional,
6
- Type,
7
- Tuple,
8
5
  )
9
6
 
10
7
  from django.db import (
@@ -43,7 +40,7 @@ class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
43
40
  """Значение RegionalDataMartModelEnum,
44
41
  основной модели РВД для формирования сущности."""
45
42
 
46
- additional_model_enums: Tuple[ModelEnumValue] = ()
43
+ additional_model_enums: tuple[ModelEnumValue] = ()
47
44
  """Перечень дополнительных значений RegionalDataMartModelEnum,
48
45
  которые участвуют в формировании записей сущностей"""
49
46
 
@@ -55,7 +52,7 @@ class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
55
52
  return camel_to_underscore(cls.__name__.rsplit('Entity', 1)[0], upper=True)
56
53
 
57
54
  @classmethod
58
- def get_register_params(cls) -> Dict[str, Any]:
55
+ def get_register_params(cls) -> dict[str, Any]:
59
56
  register_params = super().get_register_params()
60
57
 
61
58
  register_params['main_model_enum'] = getattr(cls, 'main_model_enum', None) or cls.get_main_model_enum()
@@ -76,7 +73,7 @@ class EntityEnumRegisterMixin(BaseEnumRegisterMixin):
76
73
 
77
74
  # TODO EDUSCHL-20938 Удалить в рамках задачи
78
75
  @classmethod
79
- def get_additional_model_enums(cls) -> Optional[Tuple[ModelEnumValue]]:
76
+ def get_additional_model_enums(cls) -> Optional[tuple[ModelEnumValue]]:
80
77
  """Возвращает кортеж значений модели-перечисления основной модели сущности.
81
78
 
82
79
  В классе определяется поле additional_model_enums или данный метод.
@@ -91,10 +88,10 @@ class ModelEnumRegisterMixin(BaseEnumRegisterMixin):
91
88
  enum = RegionalDataMartModelEnum
92
89
  """Модель-перечисление в которую регистрируется модель."""
93
90
 
94
- creating_trigger_models: Tuple[models.Model] = ()
91
+ creating_trigger_models: tuple[models.Model, ...] = ()
95
92
  """Перечень моделей по которым генерируются логи."""
96
93
 
97
- loggable_models: Tuple[models.Model] = ()
94
+ loggable_models: tuple[models.Model, ...] = ()
98
95
  """Перечень моделей по которым собираются логи."""
99
96
 
100
97
  @classproperty
@@ -106,7 +103,7 @@ class ModelEnumRegisterMixin(BaseEnumRegisterMixin):
106
103
  return cls._meta.verbose_name
107
104
 
108
105
  @classmethod
109
- def get_register_params(cls) -> Dict[str, Any]:
106
+ def get_register_params(cls) -> dict[str, Any]:
110
107
  register_params = super().get_register_params()
111
108
  register_params['model'] = cls
112
109
  register_params['creating_trigger_models'] = cls.creating_trigger_models
@@ -119,7 +116,7 @@ class FromNamedTupleMixin:
119
116
  """Миксин получения экземпляра модели из получаемого кэша значений."""
120
117
 
121
118
  @classmethod
122
- def from_namedtuple(cls: Type[MODEL_TYPE_VAR], namedtuple: NamedTuple) -> MODEL_TYPE_VAR:
119
+ def from_namedtuple(cls: type[MODEL_TYPE_VAR], namedtuple: NamedTuple) -> MODEL_TYPE_VAR:
123
120
  """Создает экземпляр класса из NamedTuple."""
124
121
  return cls(
125
122
  **{
@@ -8,7 +8,6 @@ from operator import (
8
8
  )
9
9
  from typing import (
10
10
  Iterable,
11
- Type,
12
11
  )
13
12
 
14
13
  from django.apps import (
@@ -31,7 +30,7 @@ from edu_rdm_integration.enum_register.mixins import (
31
30
  )
32
31
 
33
32
 
34
- def register_classes(classes: Iterable[Type[BaseEnumRegisterMixin]]) -> None:
33
+ def register_classes(classes: Iterable[type[BaseEnumRegisterMixin]]) -> None:
35
34
  """Вызывает метод регистрации в модель-перечисление
36
35
  у переданных классов.
37
36
 
@@ -1,7 +1,3 @@
1
- from typing import (
2
- List,
3
- )
4
-
5
1
  from educommon.integration_entities.entities import (
6
2
  BaseEntity,
7
3
  )
@@ -23,7 +19,7 @@ class BaseExportDataFunctionCacheStorage(WebEduFunctionCacheStorage):
23
19
  Базовый кеш помощников функций выгрузки данных для интеграции с "Региональная витрина данных".
24
20
  """
25
21
 
26
- def _prepare_entity_instances(self, model_ids, *args, **kwargs) -> List[BaseEntity]:
22
+ def _prepare_entity_instances(self, model_ids, *args, **kwargs) -> list[BaseEntity]:
27
23
  """
28
24
  Формирование списка объектов сущностей для дальнейшей выгрузки.
29
25
 
@@ -2,8 +2,6 @@ from abc import (
2
2
  ABCMeta,
3
3
  )
4
4
  from typing import (
5
- List,
6
- Type,
7
5
  Union,
8
6
  )
9
7
 
@@ -66,7 +64,7 @@ class BaseExportDataFunction(
66
64
  Базовый класс функций выгрузки данных для интеграции с "Региональная витрина данных".
67
65
  """
68
66
 
69
- def __init__(self, *args, stage: ExportingDataStage, model_ids: List[Union[int, str]], **kwargs):
67
+ def __init__(self, *args, stage: ExportingDataStage, model_ids: list[Union[int, str]], **kwargs):
70
68
  super().__init__(*args, entities=self.entities, model_ids=model_ids, **kwargs)
71
69
 
72
70
  self._sub_stage = ExportingDataSubStage.objects.create(
@@ -96,19 +94,19 @@ class BaseExportDataFunction(
96
94
 
97
95
  self.has_data = False
98
96
 
99
- def _prepare_helper_class(self) -> Type[BaseExportDataFunctionHelper]:
97
+ def _prepare_helper_class(self) -> type[BaseExportDataFunctionHelper]:
100
98
  """
101
99
  Возвращает класс помощника функции.
102
100
  """
103
101
  return BaseExportDataFunctionHelper
104
102
 
105
- def _prepare_validator_class(self) -> Type[BaseExportDataFunctionValidator]:
103
+ def _prepare_validator_class(self) -> type[BaseExportDataFunctionValidator]:
106
104
  """
107
105
  Возвращает класс валидатора функции.
108
106
  """
109
107
  return BaseExportDataFunctionValidator
110
108
 
111
- def _prepare_result_class(self) -> Type[BaseExportDataFunctionResult]:
109
+ def _prepare_result_class(self) -> type[BaseExportDataFunctionResult]:
112
110
  """
113
111
  Возвращает класс результата функции.
114
112
  """
@@ -123,7 +121,7 @@ class BaseExportDataFunction(
123
121
 
124
122
  logger.info(f'{LOGS_DELIMITER * 3}change status {repr(self._sub_stage)}')
125
123
 
126
- def _prepare_record(self, entity_instance) -> List[str]:
124
+ def _prepare_record(self, entity_instance) -> list[str]:
127
125
  """
128
126
  Формирование списка строковых значений полей.
129
127
  """
@@ -4,10 +4,6 @@ from datetime import (
4
4
  )
5
5
  from typing import (
6
6
  Any,
7
- List,
8
- Set,
9
- Tuple,
10
- Type,
11
7
  )
12
8
 
13
9
  from django.conf import (
@@ -41,7 +37,7 @@ class BaseExportDataRunnerHelper(WebEduRunnerHelper):
41
37
  Базовый класс помощников ранеров функций выгрузки данных для интеграции с "Региональная витрина данных".
42
38
  """
43
39
 
44
- def _prepare_cache_class(self) -> Type[BaseExportDataRunnerCacheStorage]:
40
+ def _prepare_cache_class(self) -> type[BaseExportDataRunnerCacheStorage]:
45
41
  """
46
42
  Возвращает класс кеша помощника ранера.
47
43
  """
@@ -85,13 +81,13 @@ class BaseExportDataFunctionHelper(WebEduFunctionHelper):
85
81
  def prepare_record(
86
82
  cls,
87
83
  entity_instance,
88
- ordered_fields: Tuple[str, ...],
89
- primary_key_fields: Set[str],
90
- foreign_key_fields: Set[str],
91
- required_fields: Set[str],
92
- hashable_fields: Set[str],
93
- ignore_prefix_fields: Set[str],
94
- ) -> List[str]:
84
+ ordered_fields: tuple[str, ...],
85
+ primary_key_fields: set[str],
86
+ foreign_key_fields: set[str],
87
+ required_fields: set[str],
88
+ hashable_fields: set[str],
89
+ ignore_prefix_fields: set[str],
90
+ ) -> list[str]:
95
91
  """
96
92
  Формирование списка строковых значений полей.
97
93
  """
@@ -127,7 +123,7 @@ class BaseExportDataFunctionHelper(WebEduFunctionHelper):
127
123
 
128
124
  return field_values
129
125
 
130
- def _prepare_cache_class(self) -> Type[BaseExportDataFunctionCacheStorage]:
126
+ def _prepare_cache_class(self) -> type[BaseExportDataFunctionCacheStorage]:
131
127
  """
132
128
  Возвращает класс кеша помощника функции.
133
129
  """
@@ -7,10 +7,7 @@ from datetime import (
7
7
  time,
8
8
  )
9
9
  from typing import (
10
- Dict,
11
10
  Iterator,
12
- Tuple,
13
- Type,
14
11
  )
15
12
 
16
13
  from educommon import (
@@ -68,7 +65,7 @@ class BaseExportDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
68
65
  logger.info(f'{LOGS_DELIMITER}{repr(self._stage)} created.')
69
66
 
70
67
  @classmethod
71
- def _prepare_runner_class(cls) -> Type[BaseExportDataRunner]:
68
+ def _prepare_runner_class(cls) -> type[BaseExportDataRunner]:
72
69
  """
73
70
  Возвращает класс ранера.
74
71
  """
@@ -96,7 +93,7 @@ class BaseExportDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
96
93
 
97
94
  return exporting_data_stage
98
95
 
99
- def _prepare_period(self, *args, **kwargs) -> Tuple[datetime, datetime]:
96
+ def _prepare_period(self, *args, **kwargs) -> tuple[datetime, datetime]:
100
97
  """
101
98
  Формирование периода сбора данных моделей РВД.
102
99
  """
@@ -116,7 +113,7 @@ class BaseExportDataRunnerManager(WebEduRunnerManager, metaclass=ABCMeta):
116
113
 
117
114
  return period_started_at, period_ended_at
118
115
 
119
- def _prepare_model_ids_map(self) -> Dict[ModelEnumValue, Iterator[int]]:
116
+ def _prepare_model_ids_map(self) -> dict[ModelEnumValue, Iterator[int]]:
120
117
  """
121
118
  Осуществляется поиск записей моделей добавленных или обновленных за указанный период времени.
122
119
 
@@ -1,7 +1,3 @@
1
- from typing import (
2
- Type,
3
- )
4
-
5
1
  from edu_rdm_integration.adapters.runners import (
6
2
  WebEduRunner,
7
3
  )
@@ -21,19 +17,19 @@ class BaseExportDataRunner(WebEduRunner):
21
17
  Базовый класс ранеров функций выгрузки данных для интеграции с "Региональная витрина данных".
22
18
  """
23
19
 
24
- def _prepare_helper_class(self) -> Type[BaseExportDataRunnerHelper]:
20
+ def _prepare_helper_class(self) -> type[BaseExportDataRunnerHelper]:
25
21
  """
26
22
  Возвращает класс помощника ранера функции.
27
23
  """
28
24
  return BaseExportDataRunnerHelper
29
25
 
30
- def _prepare_validator_class(self) -> Type[BaseExportDataRunnerValidator]:
26
+ def _prepare_validator_class(self) -> type[BaseExportDataRunnerValidator]:
31
27
  """
32
28
  Возвращает класс валидатора ранера функции.
33
29
  """
34
30
  return BaseExportDataRunnerValidator
35
31
 
36
- def _prepare_result_class(self) -> Type[BaseExportDataRunnerResult]:
32
+ def _prepare_result_class(self) -> type[BaseExportDataRunnerResult]:
37
33
  """
38
34
  Возвращает класс результата ранера функции.
39
35
  """
@@ -10,11 +10,7 @@ from datetime import (
10
10
  )
11
11
  from typing import (
12
12
  TYPE_CHECKING,
13
- Dict,
14
13
  Iterable,
15
- List,
16
- Set,
17
- Type,
18
14
  Union,
19
15
  )
20
16
 
@@ -116,7 +112,7 @@ class BaseExportEntitiesData(BaseOperationData):
116
112
 
117
113
  # Если сущности не указаны, берется значение по умолчанию - все сущности:
118
114
  entities = entities if entities else RegionalDataMartEntityEnum.get_enum_data().keys()
119
- self.entities: List[ModelEnumValue] = [
115
+ self.entities: list[ModelEnumValue] = [
120
116
  RegionalDataMartEntityEnum.get_model_enum_value(entity) for entity in entities
121
117
  ]
122
118
 
@@ -124,13 +120,13 @@ class BaseExportEntitiesData(BaseOperationData):
124
120
  self.period_ended_at = period_ended_at
125
121
 
126
122
  # Классы менеджеров Функций, которые должны быть запущены для выгрузки данных
127
- self._exporting_data_managers: Set[Type['RunnerManager']] = set()
123
+ self._exporting_data_managers: set[type['RunnerManager']] = set()
128
124
 
129
125
  # Результаты работы Функций выгрузки данных
130
126
  self._exporting_data_results = []
131
127
 
132
128
  # Карта соответствия manager_id сущности и его основной модели
133
- self.manager_main_model_map: Dict[str, ModelBase] = {}
129
+ self.manager_main_model_map: dict[str, ModelBase] = {}
134
130
 
135
131
  @property
136
132
  def _log_file_path(self) -> str:
@@ -240,10 +236,10 @@ class BaseExportLatestEntitiesData(BaseExportEntitiesData):
240
236
  ):
241
237
  super().__init__(entities, period_started_at, period_ended_at, **kwargs)
242
238
 
243
- self._exporting_data_managers: Set[Type['RunnerManager']] = OrderedSet()
239
+ self._exporting_data_managers: set[type['RunnerManager']] = OrderedSet()
244
240
 
245
241
  # Словарь данных с классами менеджеров и их сущностями
246
- self._manager_entities_map: Dict[Type[object], List[str]] = defaultdict(set)
242
+ self._manager_entities_map: dict[type[object], list[str]] = defaultdict(set)
247
243
 
248
244
  self.async_task = self._get_async_task()
249
245
  self.task_id = kwargs.get('task_id')
@@ -3,7 +3,6 @@ from pathlib import (
3
3
  )
4
4
  from typing import (
5
5
  Iterable,
6
- List,
7
6
  )
8
7
 
9
8
  from django.conf import (
@@ -105,7 +104,7 @@ class ExportQueueSender:
105
104
  'entity',
106
105
  )
107
106
 
108
- def set_sub_stage_to_cache(self, sub_stage_id: int, entity_name: str, attachments: List[UploadFile]) -> bool:
107
+ def set_sub_stage_to_cache(self, sub_stage_id: int, entity_name: str, attachments: list[UploadFile]) -> bool:
109
108
  """Помещение подэтапа в очередь вместе с информацией по файлам и обновление счетчика объема файлов."""
110
109
  sub_stage_total_size = sum((attachment.attachment_size for attachment in attachments))
111
110
  if self.queue_total_file_size + sub_stage_total_size > settings.RDM_UPLOAD_QUEUE_MAX_SIZE:
@@ -6,7 +6,6 @@ from datetime import (
6
6
  )
7
7
  from typing import (
8
8
  Iterable,
9
- List,
10
9
  )
11
10
 
12
11
  from django.db import (
@@ -39,7 +38,7 @@ class BaseFirstExportEntitiesDataCommandsGenerator:
39
38
  """Инициализация."""
40
39
  # Если сущности не указаны, берется значение по умолчанию - все сущности:
41
40
  entities = entities if entities else RegionalDataMartEntityEnum.get_enum_data().keys()
42
- self.entities: List[ModelEnumValue] = [
41
+ self.entities: list[ModelEnumValue] = [
43
42
  RegionalDataMartEntityEnum.get_model_enum_value(entity) for entity in entities
44
43
  ]
45
44
 
@@ -81,7 +80,7 @@ class BaseFirstExportEntitiesDataCommandsGenerator:
81
80
  where modified between '{period_started_at}' and '{period_ended_at}'
82
81
  """
83
82
 
84
- def generate(self) -> List:
83
+ def generate(self) -> list:
85
84
  """Генерирует список данных для формирования команд для экспорта данных РВД."""
86
85
  params_for_commands = []
87
86
 
@@ -4,9 +4,6 @@ from datetime import (
4
4
  time,
5
5
  timedelta,
6
6
  )
7
- from typing import (
8
- Dict,
9
- )
10
7
 
11
8
  from django.conf import (
12
9
  settings,
@@ -36,7 +33,7 @@ from edu_rdm_integration.models import (
36
33
 
37
34
 
38
35
  @atomic
39
- def set_failed_status_suspended_exporting_data_stages() -> Dict[str, int]:
36
+ def set_failed_status_suspended_exporting_data_stages() -> dict[str, int]:
40
37
  """Установить статус 'Завершено с ошибками' для зависших этапов и подэтапов экспорта.
41
38
 
42
39
  Экспорт считается зависшим в случае если за определенное в параметре RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT время,