Подготовка новых моделей тестов

This commit is contained in:
2026-07-17 13:23:17 +03:00
parent b68f17f069
commit 0c1c2bd61c
65 changed files with 337 additions and 5147 deletions

View File

@@ -7,7 +7,7 @@
"""
Описание класса ExpiredAtMixin
"""
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
@@ -19,6 +19,9 @@ class ExpiresAtMixin(models.Model):
Добавляет к модели свойство даты и времени истечения
"""
_RENEW_THROTTLING_SECONDS = getattr(settings, "AUTH_SESSION_THROTTLING", 0)
""" Не сохранять в БД, если сдвиг времени меньше этого значения """
expires_at = models.DateTimeField(
null=True,
blank=True,
@@ -27,11 +30,12 @@ class ExpiresAtMixin(models.Model):
)
""" Дата и время истечения """
def renew(self, seconds: int, save: bool = False) -> None:
def renew(self, seconds: int, force: bool = False, save: bool = False) -> None:
"""
Устанавливает время истечения на заданное количество секунд
:param seconds: Количество секунд до истечения
:param force: Признак принудительного обновления
:param save: Признак необходимости сохранения
"""
@@ -39,7 +43,16 @@ class ExpiresAtMixin(models.Model):
if seconds <= 0:
raise ValueError(f"The seconds parameter must be greater than 0")
self.expires_at = DateUtils.shift_time(seconds=seconds)
# Если None - то значение не может быть просрочено
if self.expires_at is not None:
value = DateUtils.shift_time(seconds=seconds)
delta = (value - self.expires_at).total_seconds()
if delta >= self._RENEW_THROTTLING_SECONDS or force:
self.expires_at = value
# Проверяем сохранение
if save:
self.save()