From a2ef5bbfd558f80dcb2f206caa4e60266e6c753c Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Mon, 2 Sep 2019 12:00:19 +0300 Subject: [PATCH] small refactor --- .../migrations/0010_auto_20190901_1142.py | 2 +- .../migrations/0011_menu_plate.py | 4 +- apps/establishment/models.py | 24 +++++++----- apps/establishment/views.py | 6 +-- .../migrations/0011_auto_20190829_0821.py | 2 +- apps/main/models.py | 6 +-- apps/news/models.py | 4 +- apps/review/models.py | 5 ++- apps/utils/models.py | 23 ++++++++++- project/settings/base.py | 7 +++- project/settings/local.py | 38 +++++++++++++++++++ 11 files changed, 93 insertions(+), 28 deletions(-) diff --git a/apps/establishment/migrations/0010_auto_20190901_1142.py b/apps/establishment/migrations/0010_auto_20190901_1142.py index 9a76424b..f92b5f65 100644 --- a/apps/establishment/migrations/0010_auto_20190901_1142.py +++ b/apps/establishment/migrations/0010_auto_20190901_1142.py @@ -43,7 +43,7 @@ class Migration(migrations.Migration): 'verbose_name': 'Position', 'verbose_name_plural': 'Positions', }, - bases=(models.Model, utils.models.TraslatedFieldsMixin), + bases=(models.Model, utils.models.TranslatedFieldsMixin), ), migrations.CreateModel( name='EstablishmentEmployee', diff --git a/apps/establishment/migrations/0011_menu_plate.py b/apps/establishment/migrations/0011_menu_plate.py index e0d50925..adef9856 100644 --- a/apps/establishment/migrations/0011_menu_plate.py +++ b/apps/establishment/migrations/0011_menu_plate.py @@ -31,7 +31,7 @@ class Migration(migrations.Migration): 'verbose_name': 'menu', 'verbose_name_plural': 'menu', }, - bases=(utils.models.TraslatedFieldsMixin, models.Model), + bases=(utils.models.TranslatedFieldsMixin, models.Model), ), migrations.CreateModel( name='Plate', @@ -48,6 +48,6 @@ class Migration(migrations.Migration): 'verbose_name': 'plate', 'verbose_name_plural': 'plates', }, - bases=(utils.models.TraslatedFieldsMixin, models.Model), + bases=(utils.models.TranslatedFieldsMixin, models.Model), ), ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 41e2ae72..a27a83f7 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -1,22 +1,22 @@ """Establishment models.""" from functools import reduce - from django.contrib.contenttypes import fields as generic from django.core.exceptions import ValidationError from django.db import models from django.utils import timezone from django.utils.translation import gettext_lazy as _ from phonenumber_field.modelfields import PhoneNumberField - from location.models import Address from utils.models import (ProjectBaseMixin, ImageMixin, TJSONField, - TraslatedFieldsMixin, BaseAttributes) + TranslatedFieldsMixin, BaseAttributes) # todo: establishment type&subtypes check -class EstablishmentType(ProjectBaseMixin, TraslatedFieldsMixin): +class EstablishmentType(TranslatedFieldsMixin, ProjectBaseMixin): """Establishment type model.""" + STR_FIELD_NAME = 'name' + name = TJSONField(blank=True, null=True, default=None, verbose_name=_('Description'), help_text='{"en-GB":"some text"}') use_subtypes = models.BooleanField(_('Use subtypes'), default=True) @@ -38,7 +38,7 @@ class EstablishmentSubTypeManager(models.Manager): return obj -class EstablishmentSubType(ProjectBaseMixin, TraslatedFieldsMixin): +class EstablishmentSubType(ProjectBaseMixin, TranslatedFieldsMixin): """Establishment type model.""" name = TJSONField(blank=True, null=True, default=None, verbose_name=_('Description'), @@ -87,9 +87,11 @@ class EstablishmentQuerySet(models.QuerySet): to_attr='actual_establishment_employees')) -class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin): +class Establishment(ProjectBaseMixin, ImageMixin, TranslatedFieldsMixin): """Establishment model.""" + STR_FIELD_NAME = 'name' + name = TJSONField(blank=True, null=True, default=None, verbose_name=_('Name'), help_text='{"en-GB":"some text"}') description = TJSONField(blank=True, null=True, default=None, @@ -177,9 +179,11 @@ class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin): return 200 -class Position(BaseAttributes, TraslatedFieldsMixin): +class Position(BaseAttributes, TranslatedFieldsMixin): """Position model.""" + STR_FIELD_NAME = 'name' + name = TJSONField(blank=True, null=True, default=None, verbose_name=_('Description'), help_text='{"en":"some text"}') @@ -285,7 +289,7 @@ class ContactEmail(models.Model): return f'{self.email}' # -# class Wine(TraslatedFieldsMixin, models.Model): +# class Wine(TranslatedFieldsMixin, models.Model): # """Wine model.""" # establishment = models.ForeignKey( # 'establishment.Establishment', verbose_name=_('establishment'), @@ -303,7 +307,7 @@ class ContactEmail(models.Model): # -class Plate(TraslatedFieldsMixin, models.Model): +class Plate(TranslatedFieldsMixin, models.Model): """Plate model.""" name = TJSONField( @@ -329,7 +333,7 @@ class Plate(TraslatedFieldsMixin, models.Model): return f'plate_id:{self.id}' -class Menu(TraslatedFieldsMixin, BaseAttributes): +class Menu(TranslatedFieldsMixin, BaseAttributes): """Menu model.""" category = TJSONField( blank=True, null=True, default=None, verbose_name=_('category'), diff --git a/apps/establishment/views.py b/apps/establishment/views.py index 146c6f9b..3d3566e8 100644 --- a/apps/establishment/views.py +++ b/apps/establishment/views.py @@ -13,6 +13,7 @@ class EstablishmentMixin: def get_queryset(self): """Overrided method 'get_queryset'.""" + # todo: update ordering (last review) return models.Establishment.objects.all().prefetch_actual_employees() @@ -23,9 +24,8 @@ class EstablishmentListView(EstablishmentMixin, JWTGenericViewMixin, generics.Li def get_queryset(self): """Overrided method 'get_queryset'.""" - return models.Establishment.objects.all()\ - .prefetch_actual_employees()\ - .by_country_code(code=self.request.country_code) + qs = super(EstablishmentListView, self).get_queryset() + return qs.by_country_code(code=self.request.country_code) class EstablishmentRetrieveView(EstablishmentMixin, JWTGenericViewMixin, generics.RetrieveAPIView): diff --git a/apps/main/migrations/0011_auto_20190829_0821.py b/apps/main/migrations/0011_auto_20190829_0821.py index 6501af58..3ffaf71b 100644 --- a/apps/main/migrations/0011_auto_20190829_0821.py +++ b/apps/main/migrations/0011_auto_20190829_0821.py @@ -24,7 +24,7 @@ class Migration(migrations.Migration): 'verbose_name': 'metadata', 'verbose_name_plural': 'metadata', }, - bases=(utils.models.TraslatedFieldsMixin, models.Model), + bases=(utils.models.TranslatedFieldsMixin, models.Model), ), migrations.CreateModel( name='MetaDataContent', diff --git a/apps/main/models.py b/apps/main/models.py index b58dc402..75139e95 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -7,7 +7,7 @@ from django.utils.translation import gettext_lazy as _ from django.contrib.contenttypes.models import ContentType from location.models import Country from main import methods -from utils.models import ProjectBaseMixin, TJSONField, TraslatedFieldsMixin +from utils.models import ProjectBaseMixin, TJSONField, TranslatedFieldsMixin from configuration.models import TranslationSettings # @@ -185,7 +185,7 @@ class SiteFeature(ProjectBaseMixin): unique_together = ('site_settings', 'feature') -class Award(TraslatedFieldsMixin, models.Model): +class Award(TranslatedFieldsMixin, models.Model): """Award model.""" award_type = models.ForeignKey('main.AwardType', on_delete=models.CASCADE) title = TJSONField( @@ -224,7 +224,7 @@ class MetaDataCategory(models.Model): public = models.BooleanField() -class MetaData(TraslatedFieldsMixin, models.Model): +class MetaData(TranslatedFieldsMixin, models.Model): """MetaData model.""" label = TJSONField( _('label'), null=True, blank=True, diff --git a/apps/news/models.py b/apps/news/models.py index 0abc7ab5..df92341d 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -2,7 +2,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ -from utils.models import BaseAttributes, TJSONField, TraslatedFieldsMixin +from utils.models import BaseAttributes, TJSONField, TranslatedFieldsMixin class NewsType(models.Model): @@ -32,7 +32,7 @@ class NewsQuerySet(models.QuerySet): return self.filter(is_publish=True) -class News(BaseAttributes, TraslatedFieldsMixin): +class News(BaseAttributes, TranslatedFieldsMixin): """News model.""" image = models.ForeignKey( diff --git a/apps/review/models.py b/apps/review/models.py index 97b910dd..97eaad8c 100644 --- a/apps/review/models.py +++ b/apps/review/models.py @@ -1,9 +1,10 @@ +"""Review app models.""" from django.contrib.contenttypes import fields as generic from django.core.validators import MinValueValidator, MaxValueValidator from django.db import models from django.utils.translation import gettext_lazy as _ -from utils.models import BaseAttributes, TraslatedFieldsMixin +from utils.models import BaseAttributes, TranslatedFieldsMixin from utils.models import TJSONField @@ -19,7 +20,7 @@ class ReviewQuerySet(models.QuerySet): return self.filter(vintage=year) -class Review(BaseAttributes, TraslatedFieldsMixin): +class Review(BaseAttributes, TranslatedFieldsMixin): """Review model""" TO_INVESTIGATE = 0 TO_REVIEW = 1 diff --git a/apps/utils/models.py b/apps/utils/models.py index d9c4564c..da35ec7c 100644 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -55,9 +55,14 @@ def translate_field(self, field_name): return translate -class TraslatedFieldsMixin: +class TranslatedFieldsMixin: + """Translated Fields mixin""" + + STR_FIELD_NAME = '' + def __init__(self, *args, **kwargs): - super(TraslatedFieldsMixin, self).__init__(*args, **kwargs) + """Overrided __init__ method.""" + super(TranslatedFieldsMixin, self).__init__(*args, **kwargs) cls = self.__class__ for field in cls._meta.fields: field_name = field.name @@ -65,6 +70,20 @@ class TraslatedFieldsMixin: setattr(cls, f'{field.name}_translated', property(translate_field(self, field_name))) + def __str__(self): + """Overrided __str__ method.""" + value = None + if self.STR_FIELD_NAME: + field = getattr(self, getattr(self, 'STR_FIELD_NAME')) + if isinstance(field, dict): + value = field.get(get_current_language()) + return value if value else super(TranslatedFieldsMixin, self).__str__() + + +def get_current_language(): + """Get current language.""" + return to_locale(get_language()) + class OAuthProjectMixin: """OAuth2 mixin for project GM""" diff --git a/project/settings/base.py b/project/settings/base.py index c68d6841..638707d0 100644 --- a/project/settings/base.py +++ b/project/settings/base.py @@ -169,7 +169,7 @@ LOGOUT_URL = 'admin:logout' # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ -LANGUAGE_CODE = 'ru' +LANGUAGE_CODE = 'ru-RU' TIME_ZONE = 'UTC' @@ -387,7 +387,10 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 5242880 # 5MB FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # 5MB FILE_UPLOAD_PERMISSIONS = 0o644 - +# SOLO SETTINGS +# todo: make a separate service (redis?) and update solo_cache +SOLO_CACHE = 'default' +SOLO_CACHE_PREFIX = 'solo' SOLO_CACHE_TIMEOUT = 300 # REDIRECT URL diff --git a/project/settings/local.py b/project/settings/local.py index 19b3b51c..1c73a857 100644 --- a/project/settings/local.py +++ b/project/settings/local.py @@ -16,3 +16,41 @@ DOMAIN_URI = '0.0.0.0:8000' BROKER_URL = 'amqp://rabbitmq:5672' CELERY_RESULT_BACKEND = BROKER_URL CELERY_BROKER_URL = BROKER_URL + + +# LOGGING +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse', + }, + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + 'handlers': { + 'console': { + 'level': 'DEBUG', + 'filters': ['require_debug_true'], + 'class': 'logging.StreamHandler', + }, + 'null': { + 'class': 'logging.NullHandler', + }, + }, + 'loggers': { + 'django': { + 'handlers': ['console'], + }, + 'py.warnings': { + 'handlers': ['console'], + }, + 'django.db.backends': { + 'handlers': ['console', ], + 'level': 'DEBUG', + 'propagate': False, + }, + } +}