First commit
This commit is contained in:
2
middleware/validators/__init__.py
Normal file
2
middleware/validators/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .email_vld import *
|
||||
from .url_vld import *
|
||||
24
middleware/validators/email_vld.py
Normal file
24
middleware/validators/email_vld.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from typing import Optional
|
||||
|
||||
from email_validator import validate_email, EmailNotValidError, ValidatedEmail
|
||||
|
||||
# Настройка экспорта из этого модуля
|
||||
__all__ = ("valid_email",)
|
||||
|
||||
|
||||
def valid_email(e_mail: str) -> Optional[str]:
|
||||
"""
|
||||
Валидация почты через библиотеку.
|
||||
|
||||
:param e_mail: Получаемая почта.
|
||||
:return: Нормализированная почта.
|
||||
"""
|
||||
try:
|
||||
# Провека почты на валидность
|
||||
email: ValidatedEmail = validate_email(e_mail)
|
||||
|
||||
except EmailNotValidError:
|
||||
return None
|
||||
|
||||
# Возвращение строки с нормализированной почтой
|
||||
return email.normalized
|
||||
42
middleware/validators/url_vld.py
Normal file
42
middleware/validators/url_vld.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from re import Pattern, compile
|
||||
|
||||
# Настройка экспорта
|
||||
__all__ = ("valid_url", "url_to_text",)
|
||||
|
||||
|
||||
def valid_url(url: str) -> bool:
|
||||
"""
|
||||
Проверяет, является ли строка валидной ссылкой (URL).
|
||||
|
||||
:param url: Строка для проверки.
|
||||
:return: True, если строка является валидным URL, иначе False.
|
||||
"""
|
||||
url_pattern: Pattern[str] = compile(
|
||||
r'^(https?://)?' # Протокол (http или https, необязателен)
|
||||
r'([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}' # Домен
|
||||
r'(:\d+)?' # Порт (необязателен)
|
||||
r'(/[-a-zA-Z0-9@:%_+.~#?&/=]*)?$' # Путь, параметры и фрагменты
|
||||
)
|
||||
return bool(url_pattern.match(url))
|
||||
|
||||
|
||||
def url_to_text(text: str, url: str) -> str:
|
||||
"""
|
||||
Преобразует текст в HTML ссылку с указанным URL.
|
||||
|
||||
Эта функция генерирует HTML-ссылку с переданным текстом и URL, используя тег `<а>`, и делает ссылку жирной.
|
||||
|
||||
:param text: Текст, который будет отображаться для ссылки.
|
||||
:param url: URL, который будет привязан к тексту.
|
||||
:return: Строка с HTML кодом для ссылки, если URL валиден.
|
||||
:raises ValueError: Если URL невалиден.
|
||||
"""
|
||||
try:
|
||||
if not valid_url(url): # Проверяем, является ли URL валидным
|
||||
raise ValueError(f"Переданный URL '{url}' невалиден.")
|
||||
|
||||
# Генерация HTML-ссылки
|
||||
return f'<b><a href="{url}">{text}</a></b>'
|
||||
|
||||
except ValueError as e:
|
||||
raise e # Перебрасываем ошибку выше для дальнейшей обработки или уведомления
|
||||
Reference in New Issue
Block a user