Merge remote-tracking branch 'origin/develop' into feature/authorization

This commit is contained in:
Anatoly 2019-09-02 13:52:53 +03:00
commit 892159ccb6
11 changed files with 93 additions and 28 deletions

View File

@ -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',

View File

@ -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),
),
]

View File

@ -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'),

View File

@ -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):

View File

@ -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',

View File

@ -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,

View File

@ -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(

View File

@ -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

View File

@ -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"""

View File

@ -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'
@ -388,7 +388,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

View File

@ -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,
},
}
}