-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidators.py
More file actions
111 lines (87 loc) · 3.89 KB
/
Copy pathvalidators.py
File metadata and controls
111 lines (87 loc) · 3.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
"""Валидаторы для внутренних функций."""
import datetime
import os
import sys
if getattr(sys, "frozen", False):
BASE_DIR = os.path.dirname(sys.executable)
elif __file__:
BASE_DIR = os.path.dirname(__file__)
class ValidateError(Exception):
pass
def now():
return datetime.datetime.now().strftime("%d.%m %H_%M_%S")
def log_any_error(any_text):
"""Функция для записи ошибок в файл."""
log = open(rf"{BASE_DIR}\log_any_error.txt", "a+")
text = str(any_text)
print(f"[{now()}] {text}", file=log)
log.close()
def validate_column_with_data(row: list, expected_values: int) -> bool:
"""Пропускает строку, если количество "None" в списке/строке больше ожидаемого."""
count_values = len(row) - row.count(None)
if count_values < expected_values:
return True
return False
def validate_department(department) -> bool:
"""Проверка поля отделения: более 1 символа и не None."""
if department is None:
return False
if len(department) > 1:
return True
else:
return False
def validate_count_days(count_days) -> int:
"""Возвращает количество дней или ноль."""
if count_days is None:
return 0
try:
return int(count_days)
except ValueError:
log_any_error("Не корректное значение количества дней в отчете!")
return 0
def validate_number_history(number_history):
"""Проверяем наличие номера истории и возвращаем его."""
if number_history is None:
log_any_error("Не корректное значение номера карты!")
return number_history
def validate_bunks_from_file(value, department, BUNKS):
"""Проверяем правильно ли введены данные в файл коечного фонда."""
try:
count_bunks = value if type(value) == int else int(value.strip())
except ValueError:
log_any_error(
f"[ERR] Для отделения <{department}> указано не числовое"
f" значение количества коек <{value}>"
)
except TypeError:
log_any_error(
"Значение количества дней не число. Проверьте, что ввели число!"
f"Число дней в файле с отделениями и койками = {value}"
)
else:
BUNKS[department] = count_bunks
def validate_for_title(target_values: list, row: list):
"""Является ли строка заголовком."""
if len(target_values) == 1:
search = target_values[0].upper()
if search in set([element.upper() if type(element) is str else element for element in row if element is not None]):
return True
return False
values = [value.upper() if type(value) is str else value for value in target_values]
for value in values:
if value in set([element.upper() if type(element) is str else element for element in row if element is not None]):
return True
return False
def validate_numbers(row: list):
"""Если часть значений строка с номерами столбцев."""
lst = set(['1', '2',])
if set([element for element in row[:2] if element is not None]) == lst:
return True
return False
def validate_not_pdo(target_values: list, row: str):
"""Если есть ПДО, то возвращаем ложь, иначе истину."""
values = [value.upper() if type(value) is str else value for value in target_values]
for value in values:
if value in row.upper():
return False
return True