Files
drf-rack/net/xeaf/rack/models/mixins/expired_at_mixin.py

73 lines
2.1 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса ExpiredAtMixin
"""
from datetime import timedelta
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
class ExpiresAtMixin(models.Model):
"""
Реализует свойство даты и времени истечения
"""
expires_at = models.DateTimeField(
null=False,
blank=False,
editable=True,
verbose_name=_("rack.mixin.expires_at"),
)
""" Дата и время истечения """
def renew(self, seconds: int, save: bool = False) -> None:
"""
Устанавливает время истечения на заданное количество секунд
:param seconds: Количество секунд до истечения
:param save: Признак необходимости сохранения
"""
# Проверка значений
if seconds <=0:
raise ValueError(f"The seconds parameter must be greater than 0")
self.expires_at = timezone.now() + timedelta(seconds=seconds)
if save:
self.save()
def expire(self, save: bool = False) -> None:
"""
Устанавливает время истечения на сейчас
:param save: Признак необходимости сохранения
"""
self.expires_at = timezone.now()
if save:
self.save()
def is_expired(self) -> bool:
"""
Возвращает признак просроченного значения
:return: Признак просроченного значения
"""
return self.expires_at < timezone.now()
class Meta:
"""
Параметры класса
"""
abstract = True