-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidators.py
More file actions
81 lines (67 loc) · 2.8 KB
/
Copy pathvalidators.py
File metadata and controls
81 lines (67 loc) · 2.8 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
from datetime import datetime
from typing import Tuple, Dict, Any, Optional
MIN_LEN_TITLE: int = 1
MAX_LEN_TITLE: int = 100
MIN_LEN_DESCRIPTION: int = 1
MAX_LEN_DESCRIPTION: int = 1000
MIN_LEN_CATEGORY: int = 1
MAX_LEN_CATEGORY: int = 50
PRIORITY_CHOICES: Tuple = ("Низкий", "Средний", "Высокий")
STATUS_CHOICES: Tuple = ("Не выполнена", "Выполнена")
def validate_task_id(raw_id: str) -> int:
if not raw_id.isdigit():
raise ValueError(
f"Индентификатор не является целым числом"
)
task_id: int = int(raw_id)
if task_id < 0:
raise ValueError(
f"Индентификатор не может быть меньше 0"
)
return task_id
def validate_title(title: str) -> str:
if not (MIN_LEN_TITLE <= len(title) <= MAX_LEN_TITLE):
raise ValueError(
f"Длина названия задачи не входит в диапозон {MIN_LEN_TITLE} - {MAX_LEN_TITLE}"
)
return title
def validate_description(description: str) -> str:
if not (MIN_LEN_DESCRIPTION <= len(description) <= MAX_LEN_DESCRIPTION):
raise ValueError(
f"Длина описания задачи не входит в диапозон {MIN_LEN_DESCRIPTION} - {MAX_LEN_DESCRIPTION}"
)
return description
def validate_category(category: str) -> str:
if not (MIN_LEN_CATEGORY <= len(category) <= MAX_LEN_CATEGORY):
raise ValueError(
f"Длина категории задачи не входит в диапозон {MIN_LEN_CATEGORY} - {MAX_LEN_CATEGORY}"
)
return category
def validate_due_date(due_date: str) -> str:
try:
datetime.strptime(due_date, '%Y-%m-%d')
except ValueError:
raise ValueError("Дата указана в неправильном формате")
return due_date
def validate_priority(priority: str) -> str:
if priority.capitalize() not in PRIORITY_CHOICES:
raise ValueError("Введенный Вами приоритет не предусмотрен")
return priority.capitalize()
def validate_status(status: str) -> str:
if status.capitalize() not in STATUS_CHOICES:
raise ValueError("Введенный Вами статус не предусмотрен")
return status.capitalize()
VALIDATE_DICT: Dict = {
"title": validate_title,
"description": validate_description,
"category": validate_category,
"due_date": validate_due_date,
"priority": validate_priority,
"status": validate_status
}
def validate_task_fields(kwargs) -> Dict:
for key, value in kwargs.items():
if key in VALIDATE_DICT:
validate_field = VALIDATE_DICT[key]
validate_field(value)
return kwargs