-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvalidators.py
More file actions
62 lines (49 loc) · 2.36 KB
/
validators.py
File metadata and controls
62 lines (49 loc) · 2.36 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
import phonenumbers
from django.core.exceptions import ValidationError as DjangoValidationError
from django.utils import timezone
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from users.constants import NOT_VALID_NUMBER_MESSAGE
def user_birthday_validator(birthday):
"""returns true if person > 12 years old"""
if (timezone.now().date() - birthday).days >= 12 * 365:
return True
# check if person is > 100 years old
if (timezone.now().date() - birthday).days >= 100 * 365:
raise ValidationError("Человек старше 100 лет")
raise ValidationError("Человек младше 12 лет")
def user_name_validator(value, field_name="Поле"):
"""Валидатор для имени, фамилии и отчества"""
if not value:
return
valid_name_chars = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
for letter in value:
if letter.upper() not in valid_name_chars:
raise DjangoValidationError(
f"{field_name} содержит недопустимые символы. Могут быть только символы кириллического алфавита."
)
if len(value) < 2:
raise DjangoValidationError(f"Поле '{field_name}' слишком короткое")
def specialization_exists_validator(pk: int):
# avoid circular imports
from core.models import Specialization
if not Specialization.objects.filter(pk=pk).exists():
raise serializers.ValidationError(
{"v2_speciality_id": "Specialization with given id does not exist"}
)
def user_experience_years_range_validator(value: int):
"""
Check range for choice entry/completion year.
(2000 - `now.year`)
"""
if value not in range(2000, timezone.now().year + 1):
raise DjangoValidationError(
f"Год должен быть в диапазоне 2000 - {timezone.now().year}"
)
def user_phone_number_validation(value: str):
"""Validates phone number according to the international standard."""
try:
phone_number = phonenumbers.parse(value, None)
return phonenumbers.is_valid_number(phone_number)
except phonenumbers.phonenumberutil.NumberParseException:
raise DjangoValidationError(NOT_VALID_NUMBER_MESSAGE)