rhazdon/django-sonic-screwdriver

View on GitHub
django_sonic_screwdriver/models.py

Summary

Maintainability
A
1 hr
Test Coverage
from django.db import models
from django.utils.translation import ugettext_lazy as _
from enum import Enum


class BaseManager(models.Manager):
    def get_or_404(self, *args, **kwargs):
        """
        Returns instance or raises 404.
        """
        try:
            instance = super(BaseManager, self).get(*args, **kwargs)
        except self.model.DoesNotExist:
            from .exceptions import NotFoundException

            raise NotFoundException
        return instance


class BaseModel(models.Model):
    created_at = models.DateTimeField(
        verbose_name=_("Created at"),
        auto_now_add=True,
        blank=False,
        null=False,
        help_text=_("Model was created at this time."),
    )

    updated_at = models.DateTimeField(
        verbose_name=_("Updated at"),
        auto_now=True,
        blank=False,
        null=False,
        help_text=_("Model was updated at this time."),
    )

    objects = BaseManager()

    class Meta:
        abstract = True


class BaseChoiceEnum(Enum):
    def __str__(self):
        return self.name

    @classmethod
    def as_choices(cls):
        return [(tag.name, tag.value) for tag in cls]

    @classmethod
    def has_value(cls, value):
        return value in cls._value2member_map_

    @classmethod
    def get_name_for_value(cls, value, default=None):
        status = cls._value2member_map_.get(value, default)
        return status.name if status else default


class SerializableEnum(BaseChoiceEnum):
    """
    This is a Enum, that is serializable.

    To serialize this, use `from django_sonic_screwdriver.json import stringify_keys`.
    """
    def json_repr(self):
        return self.value


class ErrorCodes(Enum):
    def __str__(self):
        return str(self.value)