Начало переноса классов миксинов
This commit is contained in:
@@ -5,5 +5,5 @@
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Пакет описания моделей данных
|
||||
Пакет описания классов моделей данных
|
||||
"""
|
||||
|
||||
13
net/xeaf/rack/models/mixins/__init__.py
Normal file
13
net/xeaf/rack/models/mixins/__init__.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Пакет описания классов расширений моделей данных
|
||||
"""
|
||||
|
||||
from .created_at_mixin import CreatedAtMixin
|
||||
from .deleted_at_mixin import DeletedAtMixin
|
||||
from .expired_at_mixin import ExpiresAtMixin
|
||||
34
net/xeaf/rack/models/mixins/created_at_mixin.py
Normal file
34
net/xeaf/rack/models/mixins/created_at_mixin.py
Normal file
@@ -0,0 +1,34 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса CreatedAtMixin
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class CreatedAtMixin(models.Model):
|
||||
"""
|
||||
Добавляет к модели свойство даты и времени создания
|
||||
"""
|
||||
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
null=False,
|
||||
blank=False,
|
||||
editable=False,
|
||||
verbose_name=_("rack.mixin.created_at"),
|
||||
)
|
||||
""" Дата и время создания """
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Конфигурация класса
|
||||
"""
|
||||
|
||||
abstract = True
|
||||
65
net/xeaf/rack/models/mixins/deleted_at_mixin.py
Normal file
65
net/xeaf/rack/models/mixins/deleted_at_mixin.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса DeletedAtMixin
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class DeletedAtMixin(models.Model):
|
||||
"""
|
||||
Добавляет к модели свойство даты и времени удаления
|
||||
"""
|
||||
|
||||
deleted_at = models.DateTimeField(
|
||||
null=True,
|
||||
blank=True,
|
||||
editable=True,
|
||||
verbose_name=_("rack.mixin.deleted_at"),
|
||||
)
|
||||
""" Дата и время удаления """
|
||||
|
||||
def soft_delete(self, save: bool = True) -> None:
|
||||
"""
|
||||
Помечает запись на удаление
|
||||
|
||||
:param save: Признак необходимости сохранения
|
||||
"""
|
||||
|
||||
self.deleted_at = timezone.now()
|
||||
if save:
|
||||
self.save()
|
||||
|
||||
def undelete(self, save: bool = True) -> None:
|
||||
"""
|
||||
Снимает пометку удаленной записи
|
||||
|
||||
:param save: Признак необходимости сохранения
|
||||
"""
|
||||
|
||||
self.deleted_at = None
|
||||
if save:
|
||||
self.save()
|
||||
|
||||
def is_deleted(self) -> bool:
|
||||
"""
|
||||
Возвращает признак удаленной записи
|
||||
|
||||
:return: True, если запись была удалена
|
||||
"""
|
||||
|
||||
return self.deleted_at is not None
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Конфигурация класса
|
||||
"""
|
||||
|
||||
abstract = True
|
||||
72
net/xeaf/rack/models/mixins/expired_at_mixin.py
Normal file
72
net/xeaf/rack/models/mixins/expired_at_mixin.py
Normal file
@@ -0,0 +1,72 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user