/
zhikovkoly
/
Lab1_api
Обзор
Документация
Войти
/
zhikovkoly
/
Lab1_api
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/utils.py
54 строки
2 KB
Zhikov-Nikolay
first_commit
19 янв 2026, 18:15
19 янв 2026, 18:15
b7dd5a5
Код
Авторство
О чём код?
import hashlib from datetime import datetime from .database import db class IdempotencyKey: """Управление ключами идемпотентности""" @staticmethod def generate_key(data): """Генерация ключа идемпотентности из данных запроса""" import json data_str = json.dumps(data, sort_keys=True) timestamp = datetime.utcnow().isoformat() return hashlib.sha256(f"{data_str}:{timestamp}".encode()).hexdigest() @staticmethod def check_key(key, endpoint): """Проверка, использовался ли уже ключ""" # В реальной системе это бы сохранялось в БД или Redis # Здесь используем простой словарь if not hasattr(IdempotencyKey, 'used_keys'): IdempotencyKey.used_keys = {} cache_key = f"{endpoint}:{key}" return cache_key in IdempotencyKey.used_keys @staticmethod def store_key(key, endpoint, response_data): """Сохранение использованного ключа""" cache_key = f"{endpoint}:{key}" IdempotencyKey.used_keys[cache_key] = { 'response': response_data, 'timestamp': datetime.utcnow() } def validate_book_data(data): """Валидация данных книги""" errors = [] if not data.get('title'): errors.append("Title is required") if not data.get('author'): errors.append("Author is required") if not data.get('isbn'): errors.append("ISBN is required") # Проверка формата ISBN (упрощенная) isbn = data.get('isbn', '') if isbn and (len(isbn) != 10 and len(isbn) != 13): errors.append("ISBN must be 10 or 13 characters") return errors