Skip to content

Commit

Permalink
Исправил ошибки разбора контролей и формулы проверки периода с пробел…
Browse files Browse the repository at this point in the history
…ами и символами переноса строк
  • Loading branch information
WoolenSweater committed Apr 7, 2021
1 parent a686baa commit 539affd
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 7 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
# CHANGELOG

### [1.1.1] - 2021-04-07

- Исправил ошибку разбора контролей с пробелами в операторах сравнения.
- Исправил ошибку разбора контролей с символами переноса строк в кодах/спецификах.
- Исправил ошибку разбора формулы проверки периода. Появились формулы со значениями вида "01". Требуется приводить к числу, избавляясь от нуля.
- Исправил ошибку сравнения элементов. Теперь после сравнения, левый элемент, кроме списка контролей, получает и значение правого элемента.


### [1.1.0] - 2021-03-26

- Исправил проверку ОКПО. 10-значные номера не будут выдавать ошибку.
- Доработал класс Elem. Теперь он как и ElemList умеет принимать и применять к значению функцию (только одну и только математическую).
- Доработал проверку множества логических условий OR. Теперь в результатах не будет возвращаться множество дублей ложных ошибок.


### [1.0.0] - 2021-03-16

- Исправил ошибку при проверке контроля с формулой вида `SUM{[5][*][*]}`, где раздел отчёта, указанный в арументе формулы, пуст.
Expand Down
5 changes: 4 additions & 1 deletion rosstat/validators/control/inspectors/period.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,15 @@ def _eval_regex(self, pattern, string):
raise PeriodExprError()
return result

def _to_int(self, clause_parts):
return ','.join(str(int(n)) for n in clause_parts.split(','))

def _check_in(self, report):
'''Проверка на вхождение в список'''
clause_parts = self._eval_regex(in_pattern, self.period_clause)

clause = '{0} in ({1},)'.format(report.period_code,
clause_parts.group(1))
self._to_int(clause_parts.group(1)))
return eval(clause)

def _check_logic(self, report):
Expand Down
1 change: 1 addition & 0 deletions rosstat/validators/control/parser/elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ def __get_result(self, l_elem, r_elem, *, success):

if not success:
l_elem.controls_append(r_elem, self.op_name)
l_elem.val = r_elem.val
l_elem.controls_extend(r_elem)

def __logic_control(self, l_elem, r_elem, attrib):
Expand Down
8 changes: 4 additions & 4 deletions rosstat/validators/control/parser/lexer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from re import IGNORECASE
from re import IGNORECASE, DOTALL
import ply.lex as lex
from ply.lex import TOKEN

Expand All @@ -19,7 +19,7 @@
t_ELEM_END = r'}?}'

t_LOGIC = r'and|or'
t_COMP = r'\|<\||\|<=\||\|=\||\|>=\||\|>\||\|<>\|'
t_COMP = r'\| *(<|<=|=|>=|>|<>) *\|'

t_SUM = r'SUM'
t_ABS = r'abs'
Expand All @@ -38,7 +38,7 @@ def _range(rng):
@TOKEN(r'\[.+?\]')
def t_CODE(t):
code = []
for i in t.value[1:-1].split(','):
for i in map(lambda i: i.strip(), t.value[1:-1].split(',')):
if ('-' in i) and ('.' not in i):
code.extend(_range(i))
else:
Expand All @@ -63,4 +63,4 @@ def t_error(t):
t.lexer.skip(1)


lexer = lex.lex(reflags=IGNORECASE)
lexer = lex.lex(reflags=IGNORECASE | DOTALL)
2 changes: 1 addition & 1 deletion rosstat/validators/control/parser/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
def p_elem_logic(p):
'''elem : elem COMP elem
| elem LOGIC elem'''
p[0] = ElemLogic(p[1], p[2].strip('|'), p[3])
p[0] = ElemLogic(p[1], p[2].strip('| '), p[3])


def p_elem_selector(p):
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.1.0',
version='1.1.1',
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 539affd

Please sign in to comment.