edu-rdm-integration 3.20.0__py3-none-any.whl → 3.20.2__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.

Potentially problematic release.


This version of edu-rdm-integration might be problematic. Click here for more details.

@@ -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,
@@ -35,15 +35,6 @@ from m3_db_utils.models import (
35
35
  class BaseRDMModel(ReprStrPreModelMixin, BaseObjectModel):
36
36
  """Базовая модель РВД."""
37
37
 
38
- collecting_sub_stage = ForeignKey(
39
- verbose_name='Подэтап сбора данных',
40
- to='edu_rdm_integration_collect_data_stage.RDMCollectingDataSubStage',
41
- on_delete=CASCADE,
42
- )
43
- operation = SmallIntegerField(
44
- verbose_name='Действие',
45
- choices=EntityLogOperation.get_choices(),
46
- )
47
38
  created = DateTimeField(
48
39
  verbose_name='Дата создания',
49
40
  auto_now_add=True,
@@ -68,10 +59,32 @@ class BaseRDMModel(ReprStrPreModelMixin, BaseObjectModel):
68
59
  abstract = True
69
60
 
70
61
 
71
- class BaseMainRDMModel(BaseRDMModel):
62
+ class BaseAdditionalRDMModel(BaseRDMModel):
63
+ """Абстрактная вспомогательная модель РВД.
64
+
65
+ Является базовым классом для моделей РВД, которые не являются основными для сущностей РВД. Для таких моделей
66
+ производится сбор данных.
67
+ """
68
+
69
+ collecting_sub_stage = ForeignKey(
70
+ verbose_name='Подэтап сбора данных',
71
+ to='edu_rdm_integration_collect_data_stage.RDMCollectingDataSubStage',
72
+ on_delete=CASCADE,
73
+ )
74
+ operation = SmallIntegerField(
75
+ verbose_name='Действие',
76
+ choices=EntityLogOperation.get_choices(),
77
+ )
78
+
79
+ class Meta:
80
+ abstract = True
81
+
82
+
83
+ class BaseMainRDMModel(BaseAdditionalRDMModel):
72
84
  """Абстрактная основная модель РВД.
73
85
 
74
- Является базовым классом для моделей РВД, которые являются основными для сущностей РВД.
86
+ Является базовым классом для моделей РВД, которые являются основными для сущностей РВД. Для таких моделей
87
+ производится сбор и выгрузка данных.
75
88
  """
76
89
 
77
90
  exporting_sub_stage = ForeignKey(
@@ -103,6 +116,11 @@ class RDMModelEnum(TitledModelEnum):
103
116
  verbose_name = 'Модель-перечисление моделей "Региональной витрины данных"'
104
117
  verbose_name_plural = 'Модели-перечисления моделей "Региональной витрины данных"'
105
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
+
106
124
  @classmethod
107
125
  def _get_model_relations(cls, model: Type['BaseRDMModel']) -> dict[str, str]:
108
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=[(key, key) for key in RDMModelEnum.get_model_enum_keys()],
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=[(value.key, value.title) for value in AsyncTaskStatus.get_model_enum_values()],
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=[(key, key) for key in RDMCollectingDataStageStatus.get_model_enum_keys()],
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
  ),
@@ -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 = 'Модель-перечисление статусов этапа выгрузки данных'
@@ -86,7 +86,7 @@ class BaseExportingDataProgressPack(BaseCommandProgressPack):
86
86
  'header': 'Сущность',
87
87
  'sortable': True,
88
88
  'filter': ChoicesFilter(
89
- choices=[(key, key) for key in RDMEntityEnum.get_model_enum_keys()],
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=[(value.key, value.title) for value in AsyncTaskStatus.get_model_enum_values()],
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=[(key, key) for key in RDMExportingDataStageStatus.get_model_enum_keys()],
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
  ),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edu-rdm-integration
3
- Version: 3.20.0
3
+ Version: 3.20.2
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
@@ -150,6 +150,7 @@ INSTALLED_APPS = (
150
150
  # Настройки РВД
151
151
  ('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # Дефолтное значение нужно изменить на специфическое системе
152
152
  ('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,
153
+ ('rdm_general', 'COLLECT_PROGRESS_BATCH_SIZE'): 10000,
153
154
  ('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,
154
155
  ('rdm_general', 'UPLOAD_QUEUE_MAX_SIZE'): 500_000_000,
155
156
  ('rdm_general', 'RDM_MENU_ITEM'): False,
@@ -218,6 +219,9 @@ INSTALLED_APPS = (
218
219
  # Количество записей моделей ЭШ обрабатываемых за одну итерацию сбора данных
219
220
  RDM_COLLECT_CHUNK_SIZE = conf.get_int('rdm_general', 'COLLECT_CHUNK_SIZE')
220
221
 
222
+ # Размер батча для bulk_create операций при сборе данных РВД
223
+ COLLECT_PROGRESS_BATCH_SIZE = conf.get_int('rdm_general', 'COLLECT_PROGRESS_BATCH_SIZE')
224
+
221
225
  # Количество записей моделей обрабатываемых за одну итерацию экспорта данных
222
226
  RDM_EXPORT_CHUNK_SIZE = conf.get_int('rdm_general', 'EXPORT_CHUNK_SIZE')
223
227
 
@@ -328,6 +332,7 @@ INSTALLED_APPS = (
328
332
  | UPLOADS | Основная директория в MEDIA, в которой будет создана директория edu_rdm_integration для сохранения файлов для дальнейшей выгрузки | 500 |
329
333
  | RDM_EXPORT_ENTITY_ID_PREFIX | Префикс идентификаторов записей сущностей специфический для продукта | |
330
334
  | RDM_COLLECT_CHUNK_SIZE | Количество записей моделей обрабатываемых за одну итерацию сбора данных | 500 |
335
+ | COLLECT_PROGRESS_BATCH_SIZE | Размер батча для bulk_create операций при сборе данных РВД | 10000 |
331
336
  | RDM_EXPORT_CHUNK_SIZE | Количество записей моделей обрабатываемых за одну итерацию экспорта | 500 |
332
337
  | RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE | # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified | 5000 |
333
338
  | RDM_UPLOAD_QUEUE_MAX_SIZE | Объем очереди файлов в витрину (в байтах). | 500_000_000 |
@@ -395,6 +400,8 @@ INSTALLED_APPS = (
395
400
  EXPORT_CHUNK_SIZE = 500
396
401
  # Количество записей моделей ЭШ обрабатываемых за одну итерацию сбора данных
397
402
  COLLECT_CHUNK_SIZE = 500
403
+ # Размер батча для bulk_create операций при сборе данных РВД
404
+ COLLECT_PROGRESS_BATCH_SIZE = 10000
398
405
  # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
399
406
  UPDATE_NON_EXPORTED_CHUNK_SIZE = 5000
400
407
  # Объем очереди файлов в витрину (в байтах) - по умолчанию 512 Мбайт.
@@ -65,7 +65,7 @@ edu_rdm_integration/rdm_entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
65
65
  edu_rdm_integration/rdm_entities/apps.py,sha256=2rg5IqBjzpvNsjK-1lnrknxH002XYTDCcrEcARCV-ms,302
66
66
  edu_rdm_integration/rdm_entities/entities.py,sha256=zfIVpXwiNWEeotiS17xZtijSXe3rx6utCFhZ18fGPhM,14850
67
67
  edu_rdm_integration/rdm_entities/mixins.py,sha256=TFxRpajEGHwpFMOJ1G5sJK7hOTEdiv2dWqZzvbUOow4,3081
68
- edu_rdm_integration/rdm_entities/models.py,sha256=vGDQTS-iLnt-THRd89s24uzSXR4nBHLeEdWdPDxf2r4,5759
68
+ edu_rdm_integration/rdm_entities/models.py,sha256=7jJ5DUj1Xn-OEplIvyItxrcDmc0sp08aa3BOgk1guB0,6045
69
69
  edu_rdm_integration/rdm_entities/utils.py,sha256=zpVmqcJVYjQSHot9ZrVufDeSECP9kosgTmB8ydFDG8w,1095
70
70
  edu_rdm_integration/rdm_entities/migrations/0001_initial.py,sha256=TL8zkmtbFdwdKkFy8wn5SC7dpLBFlS6s8PBp1YBPAog,1664
71
71
  edu_rdm_integration/rdm_entities/migrations/0002_rename_regionaldatamartentityenum_rdmentityenum.py,sha256=CJmQp5TPAL66DBzho01tnWDrCa1fOmEI4AdaS0UbAB0,510
@@ -73,7 +73,7 @@ edu_rdm_integration/rdm_entities/migrations/__init__.py,sha256=47DEQpj8HBSa-_TIm
73
73
  edu_rdm_integration/rdm_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  edu_rdm_integration/rdm_models/apps.py,sha256=JJwHzCXYVe5cEhvDg61KkrLoRT_ZbJCIAWEM2lOQyHU,288
75
75
  edu_rdm_integration/rdm_models/mixins.py,sha256=NuPklb0SppvIfgHK_FCfX7VnD3Wsh48fR85hULoQUNY,2301
76
- edu_rdm_integration/rdm_models/models.py,sha256=vLJkOGP0opHoWbt-0GfrPz1CkQL9H2BsJbhzuTNHNJg,13235
76
+ edu_rdm_integration/rdm_models/models.py,sha256=FqJ72Fmx_OIZhBybu_cqxYLAnQ6-6oI8mnMbyjBZeaY,14067
77
77
  edu_rdm_integration/rdm_models/utils.py,sha256=Xk0HEpFEGAndoAD2TdubK4SI_dW2BvchQ7UeMEfvpfQ,631
78
78
  edu_rdm_integration/rdm_models/migrations/0001_initial.py,sha256=qXgObuG2nfOLEnGJBoBqmq30TXetOv21UZU4trMV7mQ,1529
79
79
  edu_rdm_integration/rdm_models/migrations/0002_rename_regionaldatamartmodelenum_rdmmodelenum.py,sha256=hNTLriOc9r9WEVKahJURA3yXhZ3ivbwJJ_HaMC46PpI,451
@@ -85,7 +85,7 @@ edu_rdm_integration/stages/collect_data/consts.py,sha256=tzaK9oxzdMRq3oTEocPz4um
85
85
  edu_rdm_integration/stages/collect_data/generators.py,sha256=azl0s_xJp6Mg2ARNLKd4o4ikVcarUN3ysb4xm8pYlyY,12434
86
86
  edu_rdm_integration/stages/collect_data/helpers.py,sha256=xy8z9yJKEMjNUPNhrsRRtnYy6RVbwDoD5zSDAX7y_6U,5260
87
87
  edu_rdm_integration/stages/collect_data/mixins.py,sha256=izioaiPC26BDODgi_Lhy33IaH207945tGjFnbFLMQyI,2072
88
- edu_rdm_integration/stages/collect_data/models.py,sha256=WHGDg-qFyR88fryaD9joxT3bb0tj1yOYaH0XnbGRvAE,9424
88
+ edu_rdm_integration/stages/collect_data/models.py,sha256=PkBTXIcqv69eqtd084bKad1FtkJF6t0q8t7fmzEQYeY,9700
89
89
  edu_rdm_integration/stages/collect_data/operations.py,sha256=K-St1Avwq093VU1fKzYB19vHRthK_DX6nGPO6PYAipk,11883
90
90
  edu_rdm_integration/stages/collect_data/tests.py,sha256=OqxCSdSAOQm92WcBQRF2s0o3VYf-N4e60xpJ1TGdKO8,5550
91
91
  edu_rdm_integration/stages/collect_data/function_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -156,7 +156,7 @@ edu_rdm_integration/stages/collect_data/migrations/0003_auto_20250704_0810.py,sh
156
156
  edu_rdm_integration/stages/collect_data/migrations/0004_auto_20250704_0825.py,sha256=B6SUsxlhQvWoD8lFGNwaMUCFDzhPj91bsMdmAcSuEDg,1379
157
157
  edu_rdm_integration/stages/collect_data/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  edu_rdm_integration/stages/collect_data/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
- edu_rdm_integration/stages/collect_data/registry/actions.py,sha256=ZMk8H1adcI2ycQ0a0ECBVRNKrkeYDc64UEHKV8drpUU,10260
159
+ edu_rdm_integration/stages/collect_data/registry/actions.py,sha256=-Z2F0hdk4roH4rUsm2V3UPB1EfTR-uaBnZC7OaFUXHE,10167
160
160
  edu_rdm_integration/stages/collect_data/registry/apps.py,sha256=K5f97YXKMmdM7m33qgQYvJjrA8_eGAJ4VWyuRjJ0gwQ,439
161
161
  edu_rdm_integration/stages/collect_data/registry/ui.py,sha256=pw13DAASxqnX_E5D4RG9CywtnQKQeljXHief7mojVgk,8398
162
162
  edu_rdm_integration/stages/collect_data/registry/templates/ui-js/collect-command-window.js,sha256=QfxVSAA0282-41K0XGtyPa9WPzpoX_uClke8pHdAzBo,3112
@@ -167,7 +167,7 @@ edu_rdm_integration/stages/export_data/consts.py,sha256=ZEi1kXMs-54KFKxkyGIQVwZ4
167
167
  edu_rdm_integration/stages/export_data/generators.py,sha256=XsTGcKm0oDgE3fUVDxRMkNFriOeuPDBAWi32nx5ASuc,3974
168
168
  edu_rdm_integration/stages/export_data/helpers.py,sha256=uBl85AWS-V0usHeLf7VeAsy0ywvqXL_zT1Kgho-MRTM,6537
169
169
  edu_rdm_integration/stages/export_data/mixins.py,sha256=YCr5aNcZmDx07JIr-vMietQQ3sZ82caWc7SWOMfdSjY,1772
170
- edu_rdm_integration/stages/export_data/models.py,sha256=amPrzRzhnX0L7TTnQJH78tmJXCN6_HnK2mt9I9kqhVI,12024
170
+ edu_rdm_integration/stages/export_data/models.py,sha256=A915qqPRZOPmn8cIvxgyAE6lMHF9FRIviLiANy4IE58,12300
171
171
  edu_rdm_integration/stages/export_data/operations.py,sha256=g8rj4TaFnkRkaBD4omckBTGwsTlYpuBydOwwxY9hEiI,13188
172
172
  edu_rdm_integration/stages/export_data/strategies.py,sha256=93pRhUOLL_q4VbWTY3CtC5J8rgPPO2EYn0fJk_oLuLk,6520
173
173
  edu_rdm_integration/stages/export_data/function_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -211,7 +211,7 @@ edu_rdm_integration/stages/export_data/migrations/0001_initial.py,sha256=h7HIT-Q
211
211
  edu_rdm_integration/stages/export_data/migrations/0002_auto_20250704_0810.py,sha256=yjGlH25Mke2_VAe188LEkWZ04Xy1qenai7D2zOA-ecY,1558
212
212
  edu_rdm_integration/stages/export_data/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
213
213
  edu_rdm_integration/stages/export_data/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
- edu_rdm_integration/stages/export_data/registry/actions.py,sha256=C5qLwGQeVd9ddOKo2zBJKBLtYn5x_8XV2MaTjK-SGFM,10940
214
+ edu_rdm_integration/stages/export_data/registry/actions.py,sha256=zJ1GEzyhoGGRCEGxErmepPtec0qNJtcDJJEaPtcATdA,10847
215
215
  edu_rdm_integration/stages/export_data/registry/apps.py,sha256=71DtJQ2ULt8_3CnTu2VAfT5ABBrDNY1nKTmZ6UtvIpw,448
216
216
  edu_rdm_integration/stages/export_data/registry/ui.py,sha256=0kWWfOmtTyN4SUO9dGUcEz0wgOPA111jHoWw3_LNPqI,6238
217
217
  edu_rdm_integration/stages/export_data/registry/templates/ui-js/create-export-command-win.js,sha256=g0dpYsvd_6VfRU4nRv3tNK-0wtMND_VurQRT04ShJjk,1341
@@ -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.20.0.dist-info/licenses/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
258
- edu_rdm_integration-3.20.0.dist-info/METADATA,sha256=-QkMVD3Xx8QiOF_CwjuI8s4gn1wGiS24B7tLTBwYAw8,42277
259
- edu_rdm_integration-3.20.0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
260
- edu_rdm_integration-3.20.0.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
261
- edu_rdm_integration-3.20.0.dist-info/RECORD,,
257
+ edu_rdm_integration-3.20.2.dist-info/licenses/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
258
+ edu_rdm_integration-3.20.2.dist-info/METADATA,sha256=GJm0VPApSumMLKQpsEaQ1zIT5vpk8tdZGOSm8ZxNzQ0,42932
259
+ edu_rdm_integration-3.20.2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
260
+ edu_rdm_integration-3.20.2.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
261
+ edu_rdm_integration-3.20.2.dist-info/RECORD,,