From bb67cd3461935377880f478b9486a98c7f638930 Mon Sep 17 00:00:00 2001 From: Max Yakovenko Date: Thu, 12 Jul 2018 23:52:23 +0300 Subject: [PATCH] add core app --- core/__init__.py | 0 core/admin.py | 3 + core/apps.py | 5 ++ core/context_processors.py | 0 core/management/__init__.py | 0 core/management/commands/__init__.py | 0 core/management/commands/clearcache.py | 7 +++ core/models.py | 83 ++++++++++++++++++++++++++ core/tests.py | 3 + core/views.py | 8 +++ 10 files changed, 109 insertions(+) create mode 100644 core/__init__.py create mode 100644 core/admin.py create mode 100644 core/apps.py create mode 100644 core/context_processors.py create mode 100644 core/management/__init__.py create mode 100644 core/management/commands/__init__.py create mode 100644 core/management/commands/clearcache.py create mode 100644 core/models.py create mode 100644 core/tests.py create mode 100644 core/views.py diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/admin.py b/core/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/core/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/core/apps.py b/core/apps.py new file mode 100644 index 0000000..26f78a8 --- /dev/null +++ b/core/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CoreConfig(AppConfig): + name = 'core' diff --git a/core/context_processors.py b/core/context_processors.py new file mode 100644 index 0000000..e69de29 diff --git a/core/management/__init__.py b/core/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/management/commands/__init__.py b/core/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/management/commands/clearcache.py b/core/management/commands/clearcache.py new file mode 100644 index 0000000..bcd3c40 --- /dev/null +++ b/core/management/commands/clearcache.py @@ -0,0 +1,7 @@ +from django.core.management.base import BaseCommand +from django.core.cache import cache + +class Command(BaseCommand): + def handle(self, *args, **kwargs): + cache.clear() + self.stdout.write('Cleared cache\n') diff --git a/core/models.py b/core/models.py new file mode 100644 index 0000000..cf0a356 --- /dev/null +++ b/core/models.py @@ -0,0 +1,83 @@ +from django.conf import settings +from django.contrib.auth.base_user import BaseUserManager +from django.utils.translation import ugettext_lazy as _ +from django.db import models + +# Create your models here. +STATUS_NEW = 0 +STATUS_ACTIVE = 25 +STATUS_DELETED = 50 + +STATUS_DEFAULT = STATUS_NEW + +STATUS_CHOICES = ( + (STATUS_NEW, _('New')), + (STATUS_ACTIVE, _('Active')), + (STATUS_DELETED, _('Deleted')), +) + + +class ActualOnlyManager(models.Manager): + def get_queryset(self): + queryset = super().get_queryset() + if not settings.DEBUG: + queryset = queryset.exclude(status=STATUS_DELETED) + return queryset + + +class ActiveOnlyManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(status=STATUS_ACTIVE) + + +class DeletedManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(status=STATUS_DELETED) + + +class AbstractDateTimeModel(models.Model): + create_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + abstract = True + + +class AbstractStatusModel(AbstractDateTimeModel): + status = models.SmallIntegerField(default=STATUS_DEFAULT, choices=STATUS_CHOICES) + + objects = ActualOnlyManager() + deleted = DeletedManager() + active = ActiveOnlyManager() + + @property + def is_active(self): + return self.status == STATUS_ACTIVE + + @is_active.setter + def is_active(self, value): + if value: + self.status = STATUS_ACTIVE + else: + self.status = STATUS_DEFAULT + + def delete(self, using=None, keep_parents=False): + self.status = STATUS_DELETED + self.save(using=using) + + def delete_from_base(self, using=None, keep_parents=False): + return super().delete(using, keep_parents) + + class Meta: + abstract = True + + +class CaseInsensitiveQuerySet(models.QuerySet): + CASE_INSENSITIVE_FIELDS = ('email',) + + def _filter_or_exclude(self, negate, *args, **kwargs): + for field in self.CASE_INSENSITIVE_FIELDS: + if field in kwargs: + kwargs[field + '__iexact'] = kwargs[field] + del kwargs[field] + return super()._filter_or_exclude(negate, *args, **kwargs) diff --git a/core/tests.py b/core/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/core/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/core/views.py b/core/views.py new file mode 100644 index 0000000..3f7b5d7 --- /dev/null +++ b/core/views.py @@ -0,0 +1,8 @@ +from django.contrib.auth.mixins import LoginRequiredMixin + +# Create your views here. +from django.views.generic import TemplateView + + +class ProtectedView(LoginRequiredMixin, TemplateView): + pass