Skip to content

Commit

Permalink
Исправил ошибку получения набора параметров для определения специфик …
Browse files Browse the repository at this point in the history
…строки и ошибку проверки формата ячейки если значения в ней нет
  • Loading branch information
WoolenSweater committed Nov 12, 2021
1 parent ca7578c commit 4fc7b7a
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 13 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# CHANGELOG

### [1.2.5] - 2021-11-12

- Исправил ошибку из-за которой не удавалось получить набор параметров для определения специфик строки.
- Исправил ошибку проверки формата ячейки если значения в ней нет. Теперь для проверки берётся дефолтное значение из схемы если оно там есть.
- Правки не влияющие на работоспособность и нацеленные на облегчение отладки.
- Поправил передачу параметров при инициализации элемента `Elem`. Конвертация в `set` строки, приводила к разбиению кодов длиной более одного символа.
- Добавил `__repr__` для `Nullablefloat`, который явно вызывается при принте элемента и возвращает значение 'null' если объект инициализирован без передачи значения.


### [1.2.4] - 2021-11-03

- Исправил ошибку при проверке контроля с формулой вида `SUM{}|=|1|=|SUM{}`.
Expand Down
11 changes: 6 additions & 5 deletions rosstat/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@ def str_int(v):


class SchemaFormats(dict):
def _get_spec_code(self, sec_code, spec_idx):
def _get_spec_code(self, sec_code, col_code, spec_idx):
'''Возвращает из указаной секции ключ специфики по её индексу'''
for code, idx in self[sec_code]['specs'].items():
for spec_code, idx in self[sec_code]['specs'].items():
if idx == spec_idx:
return code
return spec_code
return col_code

def get_spec_params(self, sec_code, row_code, spec_idx):
def get_spec_params(self, sec_code, row_code, col_code, spec_idx):
'''Возвращает для указанной секции и строки словарь параметров,
определяющий формат проверок для специфики с указанным кодом
'''
spec_code = self._get_spec_code(sec_code, str(spec_idx))
spec_code = self._get_spec_code(sec_code, col_code, str(spec_idx))
try:
return self[sec_code][row_code][spec_code]
except KeyError:
Expand Down
10 changes: 7 additions & 3 deletions rosstat/validators/control/parser/elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def __repr__(self):
list(self.section),
list(self.rows),
list(self.columns),
self.val,
repr(self.val),
self.bool
)

Expand Down Expand Up @@ -175,7 +175,11 @@ def _prepare_specs(self, formats, catalogs):
def __get_spec_params(self, formats, spec_idx):
'''Определяем параметры для специфики указанной строки, раздела'''
row_code = next(iter(self.rows))
return formats.get_spec_params(self.section, row_code, spec_idx)
col_code = next(iter(self.columns))
return formats.get_spec_params(self.section,
row_code,
col_code,
spec_idx)

def __get_spec_list(self, catalogs, spec_params):
'''Выбираем список специфик по имени справочника из параметров'''
Expand Down Expand Up @@ -212,7 +216,7 @@ def _proc_row(self, raw_row, row_code, dimension):
'''
row = []
for col_code, value in self._read_columns(raw_row, dimension):
row.append(Elem(value, self.section, row_code, col_code))
row.append(Elem(value, self.section, [row_code], [col_code]))
return row

def _apply_funcs(self, report, params, ctx_elem):
Expand Down
3 changes: 3 additions & 0 deletions rosstat/validators/control/parser/value.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ def __new__(cls, val, *, is_null=False):
def __init__(self, val, *, is_null=False):
self.is_null = is_null

def __repr__(self):
return 'null' if self.is_null else super().__repr__()

def neg(self):
return type(self)(-self)

Expand Down
7 changes: 3 additions & 4 deletions rosstat/validators/format/inspectors/value.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ def __init__(self, params, catalogs):
self.format = params.get('format')
self.vld_type = params.get('vldType')
self.vld_param = params.get('vld')
self.default = params.get('default')

self.format_funcs_map = {'N': self._is_num, 'C': self._is_chars}

def __repr__(self):
return ('<ValueInspector format={format} vld_type={vld_type} '
'vld_param={vld_param}>').format(**self.__dict__)

@classmethod
def _is_num(self, value, limits):
'''Проверка длины целой и дробной частей числового значения поля'''
try:
Expand All @@ -36,16 +36,15 @@ def _is_num(self, value, limits):
if not (i_part_len <= i_part_lim and f_part_len <= f_part_lim):
raise ValueBadFormat()

@classmethod
def _is_chars(self, value, limit):
'''Проверка длины символьного значения поля'''
if not len(value) <= int(limit):
raise ValueLengthError()

def check(self, coords, value):
try:
self.__check_format(value)
self.__check_value(value)
self.__check_format(value or self.default)
self.__check_value(value or self.default)
except ValueBaseError as ex:
ex.update(coords)
raise
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

setup(
name='rosstat-flc',
version='1.2.4',
version='1.2.5',
packages=find_packages(),
description='Tool for format-logistic control of reports sent to RosStat',
long_description=open('README.md', 'r').read(),
Expand Down

0 comments on commit 4fc7b7a

Please sign in to comment.