-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Переработал обработку ошибок в "блоке" проверок формата. Прочие небол…
…ьшие правки
- Loading branch information
1 parent
dea95ef
commit 02e56dc
Showing
11 changed files
with
240 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,46 @@ | ||
# Reference [WIP] | ||
# Коды ошибок [WIP] | ||
|
||
_class_ ElemLogic() | ||
Класс проверки выполнения логического условия между левым и правым элементами. | ||
## 0. Непредвиденная ошибка | ||
|
||
**check**(report, params, ctx_elem=None) | ||
* 0.0 Не удалось выполнить проверку | ||
|
||
* report(Report) - Подготовленный отчёт. | ||
* params(ControlParams) - Параметры проверки. | ||
* ctx_elem(ElemLogic, ElemSelector, ElemList, Elem) - Контекстный элемент. В логическом элементе не испольузется, так как предполагается, что он же содержит в себе левый и правый элементы логического условия, которые приходятся друг другу контекстом. Необходим только для поддержания единого набора всех параметров метода для их взаимного вызова в любом месте проверки. | ||
## 1. Проверка аттрибутов | ||
|
||
**Return type:** List[Elem] | ||
* 1.1 Указан недопустимый год | ||
* 1.2 Тип периодичности отчёта не соответствует типу периодичности шаблона | ||
* 1.3 Неверное значение периода отчёта | ||
|
||
--- | ||
## 2. Проверка полей заголовка | ||
|
||
_class_ ControlParams(dimension, precision, fault, is_rule=False) | ||
Вспомогательный класс с параметрами проверки. | ||
* 2.1 Лишнее поле - `<имя поля>` | ||
* 2.2 Повтор поля - `<имя поля>` | ||
* 2.3 Отсутствует значение в поле - `<имя поля>` | ||
* 2.4 Код ОКПО должен быть 8-и или 14-и значным числом | ||
* 2.5 Отсутствует ключевое поле - `<имя поля>` | ||
* 2.6 Отсутствует поле - `<имя поля>` | ||
|
||
* dimension(Dict[str, list]) - словарь вида {'1': ['3', '4'], ..., '4': ['1', '2']} Ключ - код секции, значене все возможные коды графов, прочитанные из схемы. | ||
* fault(float) - погрешность. Если логическое условие не выполнено, дополнительно проверяется погрешность. Отрицательное значение для проверки "condition" и если явно не передано в правиле "rule", так как там отклонение не допустимо. | ||
* precision(int) - округление. Используется логическим элементом для округления перед проверкой условия. | ||
* is_rule(bool) - флаг определяющий, проверяется "condition" или "rule". | ||
## 3. Проверка формата | ||
|
||
* 3.1 Раздел `<код секции>` отсутствует в отчёте | ||
* 3.2 Строка `<код строки>` повторяется `<кол-во>` раз(а) | ||
* 3.3 Раздел `<код секции>`, строка `<код строки>` не может быть пустой | ||
* 3.4 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>` не может быть пустой | ||
* 3.5 Раздел `<код секции>` не описан в шаблоне | ||
* 3.6 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. В шаблоне отсутствует правило для проверки этого поля | ||
* 3.7 Раздел `<код секции>`, строка `<код строки>`, специфика `<код специфики>`. Специфика отсутствует в справочнике | ||
* 3.8 Раздел `<код секции>`, строка `<код строки>`, специфика `<код специфики>`. Недопустмое значение | ||
* 3.9 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. Значение не является числом | ||
* 3.10 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. Число не соответствует формату | ||
* 3.11 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. Длина строки больше допустимого | ||
* 3.12 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. Значение отсутствует в справочнике | ||
* 3.13 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. Значение не входит в диапазон допустимых | ||
* 3.14 Раздел `<код секции>`, строка `<код строки>`, графа `<код графы>`. Значение не входит в список допустимых | ||
|
||
|
||
## 4. Проверка формата | ||
|
||
* 4.`<номер контроля>` Ошибка разбора формулы проверки периодичности | ||
* 4.`<номер контроля>` Ошибка разбора условия контроля | ||
* 4.`<номер контроля>` Ошибка разбора правила контроля | ||
* 4.`<номер контроля>` Проверка со значениями из прошлого периода не реализована | ||
* 4.`<номер контроля>` `<описание формулы контроля>`; слева `<значение слева>` `<оператор сравнения>` справа `<значение справа>` разница `<разница>`; обязательность `<признак обязательности>` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
class FormatError(Exception): | ||
pass | ||
|
||
|
||
# --- | ||
|
||
|
||
class NoSectionReportError(FormatError): | ||
def __init__(self, sec_code): | ||
self.code = '1' | ||
self.msg = 'Раздел {} отсутствует в отчёте'.format(sec_code) | ||
|
||
|
||
class DuplicateError(FormatError): | ||
def __init__(self, row_code, counter): | ||
self.code = '2' | ||
self.msg = 'Строка {} повторяется {} раз(а)'.format(row_code, counter) | ||
|
||
|
||
class EmptyRowError(FormatError): | ||
def __init__(self, sec_code, row_code): | ||
self.code = '3' | ||
self.msg = 'Раздел {}, строка {} не может быть пустой'.format(sec_code, | ||
row_code) | ||
|
||
|
||
class EmptyColumnError(FormatError): | ||
def __init__(self, sec_code, row_code, col_code): | ||
self.code = '4' | ||
self.msg = ('Раздел {}, строка {}, графа {} не может быть пустой' | ||
.format(sec_code, row_code, col_code)) | ||
|
||
|
||
class NoSectionTemplateError(FormatError): | ||
def __init__(self, sec_code): | ||
self.code = '5' | ||
self.msg = 'Раздел {} не описан в шаблоне'.format(sec_code) | ||
|
||
|
||
class NoRuleError(FormatError): | ||
def __init__(self, sec_code, row_code, col_code): | ||
self.code = '6' | ||
self.msg = ('Раздел {}, строка {}, графа {}. ' | ||
'В шаблоне отсутствует правило для проверки этого поля' | ||
.format(sec_code, row_code, col_code)) | ||
|
||
|
||
# --- | ||
|
||
|
||
class SpecBaseError(FormatError): | ||
def update(self, coords, spec): | ||
self.msg = 'Раздел {}, строка {}, специфика {}. {}'.format(coords[0], | ||
coords[1], | ||
spec, | ||
self.msg) | ||
|
||
|
||
class SpecNotInDictError(SpecBaseError): | ||
msg = 'Специфика отсутствует в справочнике' | ||
code = '7' | ||
|
||
|
||
class SpecValueError(SpecBaseError): | ||
msg = 'Недопустмое значение' | ||
code = '8' | ||
|
||
|
||
# --- | ||
|
||
|
||
class ValueBaseError(FormatError): | ||
def update(self, coords): | ||
self.msg = 'Раздел {}, строка {}, графа {}. {}'.format(*coords, | ||
self.msg) | ||
|
||
|
||
class ValueNotNumberError(ValueBaseError): | ||
msg = 'Значение не является числом' | ||
code = '9' | ||
|
||
|
||
class ValueBadFormat(ValueBaseError): | ||
msg = 'Число не соответствует формату' | ||
code = '10' | ||
|
||
|
||
class ValueLengthError(ValueBaseError): | ||
msg = 'Длина строки больше допустимого' | ||
code = '11' | ||
|
||
|
||
class ValueNotInDictError(ValueBaseError): | ||
msg = 'Значение отсутствует в справочнике' | ||
code = '12' | ||
|
||
|
||
class ValueNotInRangeError(ValueBaseError): | ||
msg = 'Значение не входит в диапазон допустимых' | ||
code = '13' | ||
|
||
|
||
class ValueNotInListError(ValueBaseError): | ||
msg = 'Значение не входит в список допустимых' | ||
code = '14' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.