From cfec24376b74f5e8c698ccfa664245842035417a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=A0=D1=8F=D0=B1?= =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D0=BD?= Date: Tue, 11 Jan 2022 10:30:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B9=20=D0=BA=20=D1=8D=D0=BB=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D1=83=20(Elem).=20=D0=A0=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B9=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=87=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D1=83=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D1=83=20(ElemLogic)=20=D0=B8=20=D0=BF=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D1=85=20=D0=BA=20?= =?UTF-8?q?=D0=BB=D0=B5=D0=B2=D0=BE=D0=BC=D1=83=20=D0=BE=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 8 ++++++++ rosstat/validators/control/parser/elements.py | 19 ++++++++++++++----- rosstat/validators/format/inspectors/value.py | 2 +- setup.py | 2 +- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a779cd..786b72d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # CHANGELOG +### [1.2.6] - 2022-01-11 + +- Исправил ошибку проверки значения на вхождение в диапазон когда границы диапазона являются числами с точкой. +- Исправил метод применения функций к элементу (Elem). Из-за передачи самого элемента в функцию, к нему применялись все действия подряд, давая на выходе неверный результат. Теперь для каждого действия передаётся копия самого элемента. +- Исправил разбор формулы, где логическому элементу добавляется функция. + - Так же реализовал применение этих функции к левому операнду. + + ### [1.2.5] - 2021-11-12 - Исправил ошибку из-за которой не удавалось получить набор параметров для определения специфик строки. diff --git a/rosstat/validators/control/parser/elements.py b/rosstat/validators/control/parser/elements.py index 777cd80..677c5fd 100644 --- a/rosstat/validators/control/parser/elements.py +++ b/rosstat/validators/control/parser/elements.py @@ -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): @@ -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) @@ -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 ''.format( + return ''.format( self.l_elem, self.op_name, - self.r_elem + self.r_elem, + self.funcs ) def check(self, report, params, ctx_elem=None): @@ -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): '''Определение аттрибута контроля. Итерация по парам элементов, выполнение проверок, обработка результата diff --git a/rosstat/validators/format/inspectors/value.py b/rosstat/validators/format/inspectors/value.py index bd89adb..87ec057 100644 --- a/rosstat/validators/format/inspectors/value.py +++ b/rosstat/validators/format/inspectors/value.py @@ -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() diff --git a/setup.py b/setup.py index 42ceb50..5de19fd 100644 --- a/setup.py +++ b/setup.py @@ -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(),