Подготовка новых моделей тестов
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user