Skip to content

Commit

Permalink
Исправил метод применения функций к элементу (Elem). Реализовал добав…
Browse files Browse the repository at this point in the history
…ление функций логическому элементу (ElemLogic) и применение их к левому операнду
  • Loading branch information
WoolenSweater committed Jan 11, 2022
1 parent 4fc7b7a commit cfec243
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 7 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,13 @@
# CHANGELOG

### [1.2.6] - 2022-01-11

- Исправил ошибку проверки значения на вхождение в диапазон когда границы диапазона являются числами с точкой.
- Исправил метод применения функций к элементу (Elem). Из-за передачи самого элемента в функцию, к нему применялись все действия подряд, давая на выходе неверный результат. Теперь для каждого действия передаётся копия самого элемента.
- Исправил разбор формулы, где логическому элементу добавляется функция.
- Так же реализовал применение этих функции к левому операнду.


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

- Исправил ошибку из-за которой не удавалось получить набор параметров для определения специфик строки.
Expand Down
19 changes: 14 additions & 5 deletions rosstat/validators/control/parser/elements.py
Expand Up @@ -96,10 +96,10 @@ def check(self, report, params, ctx_elem):
return [self]

def _apply_func(self, report, params, func, right_elem):
'''Выполнение функции на элементах массива'''
'''Выполнение функций на элементах массива'''
elems = []
for r_elem in right_elem.check(report, params, self):
elems.append(getattr(operator, func)(self, r_elem))
elems.append(getattr(operator, func)(deepcopy(self), r_elem))
return elems

def isnull(self, replace):
Expand Down Expand Up @@ -220,7 +220,7 @@ def _proc_row(self, raw_row, row_code, dimension):
return row

def _apply_funcs(self, report, params, ctx_elem):
'''Выполнение функций на эелементах массива'''
'''Выполнение функций на элементах массива'''
for func, args in self.funcs:
if func == 'sum':
self._apply_sum(ctx_elem)
Expand Down Expand Up @@ -310,15 +310,17 @@ def __init__(self, l_elem, operator, r_elem):
self.op_name = operator.lower()
self.op_func = operator_map[self.op_name]

self.funcs = []
self.elems = []

self.params = None

def __repr__(self):
return '<ElemLogic left={} operator="{}" right={}>'.format(
return '<ElemLogic left={} operator="{}" right={} funcs={}>'.format(
self.l_elem,
self.op_name,
self.r_elem
self.r_elem,
self.funcs
)

def check(self, report, params, ctx_elem=None):
Expand All @@ -333,12 +335,19 @@ def _control(self, report):
r_elems = self.r_elem.check(report, self.params, self.l_elem)

self.__check_elems(l_elems, r_elems)
self.__apply_funcs(l_elems)
self.__control(self._zip(l_elems, r_elems))

def __check_elems(self, *elems):
if not all(elems):
raise NoElemToCompareError()

def __apply_funcs(self, elems):
'''Выполнение функций на элементах массива'''
for func, _ in self.funcs:
for elem in elems:
getattr(elem, func)()

def __control(self, elems_pairs):
'''Определение аттрибута контроля. Итерация по парам элементов,
выполнение проверок, обработка результата
Expand Down
2 changes: 1 addition & 1 deletion rosstat/validators/format/inspectors/value.py
Expand Up @@ -71,7 +71,7 @@ def __check_value_catalog(self, value):
def __check_value_range(self, value):
'''Проверка на вхождение в диапазон'''
value = float(value)
start, end = (int(n) for n in self.vld_param.split('-'))
start, end = (float(n) for n in self.vld_param.split('-'))
if not (value >= start and value <= end):
raise ValueNotInRangeError()

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -2,7 +2,7 @@

setup(
name='rosstat-flc',
version='1.2.5',
version='1.2.6',
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 cfec243

Please sign in to comment.