init
This commit is contained in:
12
new-planet-backend/app/utils/__init__.py
Normal file
12
new-planet-backend/app/utils/__init__.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from app.utils.validators import validate_email, validate_password
|
||||
from app.utils.helpers import format_datetime, format_date, dict_to_json, json_to_dict
|
||||
|
||||
__all__ = [
|
||||
"validate_email",
|
||||
"validate_password",
|
||||
"format_datetime",
|
||||
"format_date",
|
||||
"dict_to_json",
|
||||
"json_to_dict",
|
||||
]
|
||||
|
||||
24
new-planet-backend/app/utils/helpers.py
Normal file
24
new-planet-backend/app/utils/helpers.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from typing import Any, Dict
|
||||
from datetime import datetime, date
|
||||
import json
|
||||
|
||||
|
||||
def format_datetime(dt: datetime) -> str:
|
||||
"""Форматирование datetime в ISO строку"""
|
||||
return dt.isoformat()
|
||||
|
||||
|
||||
def format_date(d: date) -> str:
|
||||
"""Форматирование date в ISO строку"""
|
||||
return d.isoformat()
|
||||
|
||||
|
||||
def dict_to_json(data: Dict[str, Any]) -> str:
|
||||
"""Преобразование словаря в JSON строку"""
|
||||
return json.dumps(data, ensure_ascii=False, default=str)
|
||||
|
||||
|
||||
def json_to_dict(json_str: str) -> Dict[str, Any]:
|
||||
"""Преобразование JSON строки в словарь"""
|
||||
return json.loads(json_str)
|
||||
|
||||
27
new-planet-backend/app/utils/validators.py
Normal file
27
new-planet-backend/app/utils/validators.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from typing import Optional
|
||||
import re
|
||||
from pydantic import EmailStr, validator
|
||||
|
||||
|
||||
def validate_email(email: str) -> bool:
|
||||
"""Валидация email"""
|
||||
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
|
||||
return bool(re.match(pattern, email))
|
||||
|
||||
|
||||
def validate_password(password: str) -> tuple[bool, Optional[str]]:
|
||||
"""Валидация пароля"""
|
||||
if len(password) < 8:
|
||||
return False, "Password must be at least 8 characters long"
|
||||
|
||||
if not re.search(r'[A-Z]', password):
|
||||
return False, "Password must contain at least one uppercase letter"
|
||||
|
||||
if not re.search(r'[a-z]', password):
|
||||
return False, "Password must contain at least one lowercase letter"
|
||||
|
||||
if not re.search(r'\d', password):
|
||||
return False, "Password must contain at least one digit"
|
||||
|
||||
return True, None
|
||||
|
||||
Reference in New Issue
Block a user