edu-rdm-integration 2.2.1__py3-none-any.whl → 3.0.1__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.
@@ -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,62 @@ 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
+ has_value = not (field_value is None or field_value == '')
79
+ if not required and not has_value:
80
+ return ''
81
+
82
+ return f'"{field_value}"'
83
+
58
84
  @classmethod
59
85
  def prepare_record(
60
86
  cls,
61
87
  entity_instance,
62
- ordered_fields,
63
- primary_key_fields,
64
- foreign_key_fields,
65
- hashable_fields,
66
- ignore_prefix_fields,
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],
67
94
  ) -> List[str]:
68
95
  """
69
96
  Формирование списка строковых значений полей.
70
97
  """
71
98
  field_values = []
72
- key_fields = set(chain(primary_key_fields, foreign_key_fields))
73
- add_prefix_fields = key_fields - set(ignore_prefix_fields)
99
+ key_fields = primary_key_fields.union(foreign_key_fields)
100
+ add_prefix_fields = key_fields.difference(ignore_prefix_fields)
74
101
 
75
102
  for field in ordered_fields:
103
+ required = field in required_fields
76
104
  field_value = getattr(entity_instance, field)
77
105
 
78
106
  if isinstance(field_value, str):
79
- # Очистка строковых полей от управляющих символов
80
- field_value = str_without_control_chars(field_value)
107
+ field_value = cls._prepare_str_field(field_value, required=required)
81
108
  elif isinstance(field_value, datetime):
82
- # Дату/время передаём в формате: YYYY-MM-DD hh:mm:ss
83
- field_value = field_value.strftime(EXPORT_DATETIME_FORMAT)
109
+ field_value = cls._prepare_datetime_field(field_value, required=required)
84
110
  elif isinstance(field_value, date):
85
- field_value = field_value.strftime(DATE_FORMAT)
111
+ field_value = cls._prepare_date_field(field_value, required=required)
86
112
  else:
87
- field_value = str(field_value if field_value is not None else '')
113
+ field_value = cls._prepare_common_field(field_value, required=required)
88
114
 
89
115
  if field_value and field in add_prefix_fields:
90
116
  field_value = f'{settings.RDM_EXPORT_ENTITY_ID_PREFIX}-{field_value}'
@@ -95,9 +121,11 @@ class BaseExportDataFunctionHelper(WebEduFunctionHelper):
95
121
  # Экранирование двойных кавычек
96
122
  field_value = field_value.replace('"', '""')
97
123
 
124
+ field_value = cls._surround_with_quotes(field_value, required=required)
125
+
98
126
  field_values.append(field_value)
99
127
 
100
- return [f'"{v}"' for v in field_values]
128
+ return field_values
101
129
 
102
130
  def _prepare_cache_class(self) -> Type[BaseExportDataFunctionCacheStorage]:
103
131
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edu-rdm-integration
3
- Version: 2.2.1
3
+ Version: 3.0.1
4
4
  Summary: Интеграция с Региональной витриной данных
5
5
  Home-page:
6
6
  Download-URL:
@@ -293,6 +293,25 @@ Requires-Dist: uploader-client <1,>=0.2.1
293
293
 
294
294
  ### Удалено
295
295
 
296
+ ## 3.0.1 - 2024-04-03
297
+ Убрано окружение кавычками пустых необязательных полей.
298
+
299
+ ### Изменено
300
+
301
+ - [EDUCLLG-8325](https://jira.bars.group/browse/EDUCLLG-8325)
302
+ PATCH Убрано окружение кавычками пустых необязательных полей.
303
+
304
+
305
+ ## 3.0.0 - 2024-04-02
306
+ Расширены возможности кастомизации поведения метода `BaseExportDataFunctionHelper.prepare_record`.
307
+
308
+ ### Добавлено
309
+
310
+ - [EDUCLLG-8325](https://jira.bars.group/browse/EDUCLLG-8325)
311
+ MAJOR Добавлена возможность отдельно указывать, как формировать строковое
312
+ представление полей в зависимости от их типа и обязательности. **Требуется добавить
313
+ параметр `required_fields` в метод `prepare_record` helper-а функции**.
314
+
296
315
  ## [2.2.1] - 2024-03-28
297
316
  Исправление наследования Meta в моделях EduRdmCollectDataCommandProgress и EduRdmExportDataCommandProgress
298
317
 
@@ -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=h0S_fItbaygZfNZb9oUUPNF4dmeOojNx2nHCv3m3TWU,4609
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.1.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
166
- edu_rdm_integration-2.2.1.dist-info/METADATA,sha256=0K4JnLA9jXs0MxuvyJlFL0IaolV9Oil6ppFcTemQhxY,58264
167
- edu_rdm_integration-2.2.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
168
- edu_rdm_integration-2.2.1.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
169
- edu_rdm_integration-2.2.1.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
170
- edu_rdm_integration-2.2.1.dist-info/RECORD,,
165
+ edu_rdm_integration-3.0.1.dist-info/LICENSE,sha256=uw43Gjjj-1vXWCItfSrNDpbejnOwZMrNerUh8oWbq8Q,3458
166
+ edu_rdm_integration-3.0.1.dist-info/METADATA,sha256=o0npElCHES5Mt6i7ACVVmvm8uHrTe8YKA6VNr229_4s,59239
167
+ edu_rdm_integration-3.0.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
168
+ edu_rdm_integration-3.0.1.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
169
+ edu_rdm_integration-3.0.1.dist-info/top_level.txt,sha256=nRJV0O14UtNE-jGIYG03sohgFnZClvf57H5m6VBXe9Y,20
170
+ edu_rdm_integration-3.0.1.dist-info/RECORD,,