edu-rdm-integration 2.2.0__py3-none-any.whl → 3.0.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.
@@ -39,7 +39,7 @@ class EduRdmCollectDataCommandProgress(AbstractCollectDataCommandProgress):
39
39
  choices=CommandType.get_choices(),
40
40
  )
41
41
 
42
- class Meta:
42
+ class Meta(AbstractCollectDataCommandProgress.Meta):
43
43
  db_table = 'edu_rdm_collecting_data_command_progress'
44
44
 
45
45
 
@@ -63,5 +63,5 @@ class EduRdmExportDataCommandProgress(AbstractExportDataCommandProgress):
63
63
  choices=CommandType.get_choices(),
64
64
  )
65
65
 
66
- class Meta:
66
+ class Meta(AbstractExportDataCommandProgress.Meta):
67
67
  db_table = 'edu_rdm_exporting_data_command_progress'
@@ -155,16 +155,18 @@ class BaseExportDataFunction(
155
155
  Формирование списка строковых значений полей.
156
156
  """
157
157
  ordered_fields = self.first_entity.entity.get_ordered_fields()
158
- primary_key_fields = self.first_entity.entity.get_primary_key_fields()
159
- foreign_key_fields = self.first_entity.entity.get_foreign_key_fields()
160
- hashable_fields = self.first_entity.entity.get_hashable_fields()
161
- ignore_prefix_fields = self.first_entity.entity.get_ignore_prefix_key_fields()
158
+ primary_key_fields = set(self.first_entity.entity.get_primary_key_fields())
159
+ foreign_key_fields = set(self.first_entity.entity.get_foreign_key_fields())
160
+ required_fields = set(self.first_entity.entity.get_required_fields())
161
+ hashable_fields = set(self.first_entity.entity.get_hashable_fields())
162
+ ignore_prefix_fields = set(self.first_entity.entity.get_ignore_prefix_key_fields())
162
163
 
163
164
  field_values = self.helper.prepare_record(
164
165
  entity_instance=entity_instance,
165
166
  ordered_fields=ordered_fields,
166
167
  primary_key_fields=primary_key_fields,
167
168
  foreign_key_fields=foreign_key_fields,
169
+ required_fields=required_fields,
168
170
  hashable_fields=hashable_fields,
169
171
  ignore_prefix_fields=ignore_prefix_fields,
170
172
  )
@@ -2,11 +2,11 @@ from datetime import (
2
2
  date,
3
3
  datetime,
4
4
  )
5
- from itertools import (
6
- chain,
7
- )
8
5
  from typing import (
6
+ Any,
9
7
  List,
8
+ Set,
9
+ Tuple,
10
10
  Type,
11
11
  )
12
12
 
@@ -55,36 +55,58 @@ class BaseExportDataFunctionHelper(WebEduFunctionHelper):
55
55
 
56
56
  cryptographer = HashData(hash_algorithm=HASH_ALGORITHM)
57
57
 
58
+ @classmethod
59
+ def _prepare_str_field(cls, field_value: str, *, required: bool) -> str:
60
+ # Очистка строковых полей от управляющих символов
61
+ return str_without_control_chars(field_value)
62
+
63
+ @classmethod
64
+ def _prepare_datetime_field(cls, field_value: datetime, *, required: bool) -> str:
65
+ # Дату/время передаём в формате: YYYY-MM-DD hh:mm:ss
66
+ return field_value.strftime(EXPORT_DATETIME_FORMAT)
67
+
68
+ @classmethod
69
+ def _prepare_date_field(cls, field_value: date, *, required: bool) -> str:
70
+ return field_value.strftime(DATE_FORMAT)
71
+
72
+ @classmethod
73
+ def _prepare_common_field(cls, field_value: Any, *, required: bool) -> str:
74
+ return str(field_value if field_value is not None else '')
75
+
76
+ @classmethod
77
+ def _surround_with_quotes(cls, field_value: str, *, required: bool) -> str:
78
+ return f'"{field_value}"'
79
+
58
80
  @classmethod
59
81
  def prepare_record(
60
82
  cls,
61
83
  entity_instance,
62
- ordered_fields,
63
- primary_key_fields,
64
- foreign_key_fields,
65
- hashable_fields,
66
- ignore_prefix_fields,
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],
67
90
  ) -> List[str]:
68
91
  """
69
92
  Формирование списка строковых значений полей.
70
93
  """
71
94
  field_values = []
72
- key_fields = set(chain(primary_key_fields, foreign_key_fields))
73
- add_prefix_fields = key_fields - set(ignore_prefix_fields)
95
+ key_fields = primary_key_fields.union(foreign_key_fields)
96
+ add_prefix_fields = key_fields.difference(ignore_prefix_fields)
74
97
 
75
98
  for field in ordered_fields:
99
+ required = field in required_fields
76
100
  field_value = getattr(entity_instance, field)
77
101
 
78
102
  if isinstance(field_value, str):
79
- # Очистка строковых полей от управляющих символов
80
- field_value = str_without_control_chars(field_value)
103
+ field_value = cls._prepare_str_field(field_value, required=required)
81
104
  elif isinstance(field_value, datetime):
82
- # Дату/время передаём в формате: YYYY-MM-DD hh:mm:ss
83
- field_value = field_value.strftime(EXPORT_DATETIME_FORMAT)
105
+ field_value = cls._prepare_datetime_field(field_value, required=required)
84
106
  elif isinstance(field_value, date):
85
- field_value = field_value.strftime(DATE_FORMAT)
107
+ field_value = cls._prepare_date_field(field_value, required=required)
86
108
  else:
87
- field_value = str(field_value if field_value is not None else '')
109
+ field_value = cls._prepare_common_field(field_value, required=required)
88
110
 
89
111
  if field_value and field in add_prefix_fields:
90
112
  field_value = f'{settings.RDM_EXPORT_ENTITY_ID_PREFIX}-{field_value}'
@@ -95,9 +117,11 @@ class BaseExportDataFunctionHelper(WebEduFunctionHelper):
95
117
  # Экранирование двойных кавычек
96
118
  field_value = field_value.replace('"', '""')
97
119
 
120
+ field_value = cls._surround_with_quotes(field_value, required=required)
121
+
98
122
  field_values.append(field_value)
99
123
 
100
- return [f'"{v}"' for v in field_values]
124
+ return field_values
101
125
 
102
126
  def _prepare_cache_class(self) -> Type[BaseExportDataFunctionCacheStorage]:
103
127
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 2.2.0
3
+ Version: 3.0.0
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -293,6 +293,24 @@ Requires-Dist: uploader-client <1,>=0.2.1
293
293
 
294
294
  ### Удалено
295
295
 
296
+ ## 3.0.0 - 2024-04-02
297
+ Расширены возможности кастомизации поведения метода `BaseExportDataFunctionHelper.prepare_record`.
298
+
299
+ ### Добавлено
300
+
301
+ - [EDUCLLG-8325](https://jira.bars.group/browse/EDUCLLG-8325)
302
+ MAJOR Добавлена возможность отдельно указывать, как формировать строковое
303
+ представление полей в зависимости от их типа и обязательности. **Требуется добавить
304
+ параметр `required_fields` в метод `prepare_record` helper-а функции**.
305
+
306
+ ## [2.2.1] - 2024-03-28
307
+ Исправление наследования Meta в моделях EduRdmCollectDataCommandProgress и EduRdmExportDataCommandProgress
308
+
309
+ ### Исправлено
310
+
311
+ - [EDUSCHL-21569](https://jira.bars.group/browse/EDUSCHL-21569)
312
+ MINOR Перенести оставшиеся общие асинхронные задачи из ЭШ в пакет edu_rdm_integration
313
+
296
314
  ## [2.2.0] - 2024-03-20
297
315
 
298
316
  Из ЭШ перенесена периодическая задача по сбору и выгрузке данных в РВД.
@@ -32,7 +32,7 @@ edu_rdm_integration/adapters/tests.py,sha256=MoRY-a75Ow-7EjeQYxkXWunwqTGuBMaUyEk
32
32
  edu_rdm_integration/adapters/validators.py,sha256=LJWnCY8PtXDOj-fm3fBWjQYsHsSLfyKf_D97pqPv73s,496
33
33
  edu_rdm_integration/collect_and_export_data/__init__.py,sha256=4glPgPCzAyLreBGUnUrcRPCge45XucJz5bK8VjlQBaE,82
34
34
  edu_rdm_integration/collect_and_export_data/apps.py,sha256=fAcctcjxWP4Gd0Qr3YrQkMESrzga4IORWetBTy8wvHo,160
35
- edu_rdm_integration/collect_and_export_data/models.py,sha256=5IfLYgnJsQTi59z3NeGiOtSjGW0i89BlgmDzrryz5HY,1957
35
+ edu_rdm_integration/collect_and_export_data/models.py,sha256=TGm-hM-1aDhVcFPy0PTC3yNczoZGF4ZmIdr0Y9s8CfU,2038
36
36
  edu_rdm_integration/collect_and_export_data/utils.py,sha256=uw85W_uPr7zGa9rA4Bp1nDUrOMnlz0nZ92AZAgNsRlE,3073
37
37
  edu_rdm_integration/collect_and_export_data/migrations/0001_initial.py,sha256=UkoaXzh3tokZ8QdCdB09v3rRZfcHhvEwNMuj3mQIB74,4714
38
38
  edu_rdm_integration/collect_and_export_data/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -94,8 +94,8 @@ edu_rdm_integration/export_data/base/caches.py,sha256=dj8LGB7TMtX3cSfp-1UB3dnzcT
94
94
  edu_rdm_integration/export_data/base/consts.py,sha256=jLuy2y7YQ921OrEuzDld3F0k6YxgCnr5yorWBQJiLLw,519
95
95
  edu_rdm_integration/export_data/base/enums.py,sha256=BSmwrkzYwEQhz9NbZCJsldY532PqgZJzxzsVk6ue0bM,93
96
96
  edu_rdm_integration/export_data/base/errors.py,sha256=SaxXgKWNGG8RZQ8soFlzbX8d2_j58gWVmikzNZG1s74,291
97
- edu_rdm_integration/export_data/base/functions.py,sha256=QWs6JxHChCg1M7anAJ5wJIE6bzjafMWIfvkJSao_Uyc,12642
98
- edu_rdm_integration/export_data/base/helpers.py,sha256=-fpPTMrSHV3odfMjN5pRGzL7Q3BWsik0Vvl2DyCgHC4,3480
97
+ edu_rdm_integration/export_data/base/functions.py,sha256=5LGMrAMkGu1pb03gZ8PDpx5hjuoY4B9s5yXX6qs-EiM,12785
98
+ edu_rdm_integration/export_data/base/helpers.py,sha256=MbzVIqwH_5vVRpX1KOsf3VwbzzSA395e_GLUCJv9urw,4476
99
99
  edu_rdm_integration/export_data/base/managers.py,sha256=AJBBOmQbW-cnVEa3d2DCpyoNbnRxXmgpAcUCBu1rDiI,6075
100
100
  edu_rdm_integration/export_data/base/presenters.py,sha256=JXh8nwyezaC-2h_TYfPPYUZRitFr9Y9Ifp-j7CaUCL0,403
101
101
  edu_rdm_integration/export_data/base/requests.py,sha256=-4Kn4hSl6IuKrpd8uIYTe4gO4Dz11HLfjJXLvmf9jTk,2576
@@ -162,9 +162,9 @@ edu_rdm_integration/uploader_log/apps.py,sha256=tYJj4-sDlq8fLOSvw18L_yys7SILpTKW
162
162
  edu_rdm_integration/uploader_log/enums.py,sha256=rgSO3BL2rh2xpfm0Pt4waQW8fB1VMJLdsGmr3SXwH_U,266
163
163
  edu_rdm_integration/uploader_log/managers.py,sha256=y5wTSMzF9hpOpIU_A7nIafL_LBU3QEie6LAYWoB-pBQ,3203
164
164
  edu_rdm_integration/uploader_log/ui.py,sha256=YM9Buqp2wxE95Wf5gvAATBzuYzDOossK1sEmvFk07cI,2110
165
- edu_rdm_integration-2.2.0.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
166
- edu_rdm_integration-2.2.0.dist-info/METADATA,sha256=_aK2kxFaO9Pl5hBdB5Reic5cJZ3fBnIXxrgx9fbK0GM,57869
167
- edu_rdm_integration-2.2.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
168
- edu_rdm_integration-2.2.0.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
169
- edu_rdm_integration-2.2.0.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
170
- edu_rdm_integration-2.2.0.dist-info/RECORD,,
165
+ edu_rdm_integration-3.0.0.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
166
+ edu_rdm_integration-3.0.0.dist-info/METADATA,sha256=_8nLJtril424bXoqc4ZJkDNchqTF30-ISQXruCBIBVA,58912
167
+ edu_rdm_integration-3.0.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
168
+ edu_rdm_integration-3.0.0.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
169
+ edu_rdm_integration-3.0.0.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
170
+ edu_rdm_integration-3.0.0.dist-info/RECORD,,