Начало переноса классов миксинов

This commit is contained in:
2026-07-11 04:13:59 +03:00
parent b4c505048d
commit 5d30e8cbaf
12 changed files with 919 additions and 2 deletions

View File

@@ -5,5 +5,5 @@
# Все права защищены. Лицензия: MIT
"""
Пакет описания моделей данных
Пакет описания классов моделей данных
"""

View 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

View 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

View 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

View 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