Repository URL to install this package:
|
Version:
0.0.1 ▾
|
import re
import uuid
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.text import slugify
from model_utils.models import TimeStampedModel
from kaos_utils.behaviors import HasAutoSlug, HasUniqueName
from .utils import get_verbose_name
class UUIDMixin(models.Model):
uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
@property
def uuid_str(self):
return str(self.uuid)
@property
def short_uuid(self):
return str(self.uuid).split('-')[-1]
class Meta:
abstract = True
class NameSlugModelMixin(HasUniqueName, HasAutoSlug, models.Model):
class Meta:
abstract = True
class HasCodename(HasUniqueName, models.Model):
@property
def typename(self):
return get_verbose_name(self)
@property
def codename(self):
return f"[{self.typename}] {self.name}"
def __str__(self):
return self.codename
class Meta:
abstract = True
class HasCodenameSlug(HasCodename, HasAutoSlug):
class Meta:
abstract = True
def generate_slug(self):
match = re.compile(r'\[.*\] (?P<name>.*)').match(self.codename)
if not match:
raise ValidationError("Unsupported codename")
return slugify(match.groupdict()['name'])
class KaosModel(UUIDMixin, HasCodenameSlug, TimeStampedModel, models.Model):
class Meta:
abstract = True