Merge branch 'develop' into features/migrate-wine

This commit is contained in:
Anatoly 2019-11-01 11:16:06 +03:00
commit 6f8361cb83
13 changed files with 129 additions and 28 deletions

View File

@ -0,0 +1,31 @@
from django.core.management.base import BaseCommand
from establishment.models import Establishment
from transfer.models import Descriptions
class Command(BaseCommand):
help = 'Add description values from old db to new db'
def handle(self, *args, **kwargs):
count = 0
queryset = Descriptions.objects.all()
for obj in queryset:
try:
establishment = Establishment.objects.get(old_id=obj.establishment.id)
except Establishment.DoesNotExist:
continue
except Establishment.MultipleObjectsReturned:
establishment = Establishment.objects.filter(old_id=obj.establishment.id).first()
else:
description = establishment.description
description.update({
obj.locale: obj.text
})
establishment.description = description
establishment.save()
count += 1
break
self.stdout.write(self.style.WARNING(f'Updated {count} objects.'))

View File

@ -0,0 +1,41 @@
from django.core.management.base import BaseCommand
from django.db.models import Q
from establishment.models import Establishment
from transfer.models import Reviews
class Command(BaseCommand):
help = 'Add description values from old db to new db'
def handle(self, *args, **kwargs):
count = 0
valid_data = {}
queryset = Reviews.objects.exclude(
Q(establishment_id__isnull=True) |
Q(mark__isnull=True)
).filter(aasm_state='published').values_list('establishment_id', 'mark', 'updated_at')
for es_id, new_mark, new_date in queryset:
try:
mark, date = valid_data[es_id]
except KeyError:
valid_data[es_id] = (new_mark, new_date)
else:
if new_date > date:
valid_data[es_id] = (new_mark, new_date)
for key, value in valid_data.items():
try:
establishment = Establishment.objects.get(old_id=key)
except Establishment.DoesNotExist:
continue
except Establishment.MultipleObjectsReturned:
establishment = Establishment.objects.filter(old_id=key).first()
else:
establishment.public_mark = int(value[0])
establishment.save()
count += 1
self.stdout.write(self.style.WARNING(f'Updated {count} objects.'))

View File

@ -149,6 +149,18 @@ class EstablishmentSubTypeBaseSerializer(serializers.ModelSerializer):
'establishment_type': {'write_only': True}
}
class EstablishmentSubTypeGeoSerializer(EstablishmentSubTypeBaseSerializer):
"""Serializer for EstablishmentSuType model w/ index_name."""
class Meta(EstablishmentSubTypeBaseSerializer.Meta):
fields = EstablishmentSubTypeBaseSerializer.Meta.fields + [
'index_name'
]
extra_kwargs = {
**EstablishmentSubTypeBaseSerializer.Meta.extra_kwargs,
'index_name': {'read_only': True},
}
class EstablishmentEmployeeSerializer(serializers.ModelSerializer):
"""Serializer for actual employees."""
@ -200,12 +212,14 @@ class EstablishmentGeoSerializer(EstablishmentBaseSerializer):
"""Serializer for Geo view."""
type = EstablishmentTypeGeoSerializer(source='establishment_type', read_only=True)
subtypes = EstablishmentSubTypeGeoSerializer(many=True, source='establishment_subtypes')
class Meta(EstablishmentBaseSerializer.Meta):
"""Meta class."""
fields = EstablishmentBaseSerializer.Meta.fields + [
'type'
'type',
'subtypes',
]

View File

@ -172,8 +172,9 @@ class SiteSettings(ProjectBaseMixin):
@property
def published_sitefeatures(self):
return self.sitefeature_set\
.filter(Q(published=True) and Q(feature__source__in=[PlatformMixin.WEB, PlatformMixin.ALL]))
return self.sitefeature_set. \
filter(Q(published=True) &
Q(feature__source__in=[PlatformMixin.WEB, PlatformMixin.ALL]))
@property
def site_url(self):

View File

@ -37,7 +37,7 @@ class EstablishmentDocument(Document):
works_noon = fields.ListField(fields.IntegerField(
attr='works_noon'
))
# works_now = fields.BooleanField(attr='works_now')
works_now = fields.BooleanField(attr='works_now')
tags = fields.ObjectField(
properties={
'id': fields.IntegerField(attr='id'),

View File

@ -1,7 +1,7 @@
"""Search indexes filters."""
from elasticsearch_dsl.query import Q
from django_elasticsearch_dsl_drf.filter_backends import SearchFilterBackend
from utils.models import get_current_language
from utils.models import get_current_locale
class CustomSearchFilterBackend(SearchFilterBackend):
@ -12,7 +12,7 @@ class CustomSearchFilterBackend(SearchFilterBackend):
field_name = field
if hasattr(view, 'search_fields') and hasattr(view, 'translated_search_fields'):
if field in view.translated_search_fields:
field_name = f'{field}.{get_current_language()}'
field_name = f'{field}.{get_current_locale()}'
return field_name
def construct_search(self, request, view):

View File

@ -1,6 +1,6 @@
"""Search indexes utils."""
from django_elasticsearch_dsl import fields
from utils.models import get_current_language
from utils.models import get_current_locale, get_default_locale
# object field properties
@ -19,4 +19,8 @@ def get_translated_value(value):
field_dict = value.to_dict()
elif isinstance(value, dict):
field_dict = value
return field_dict.get(get_current_language())
value = field_dict.get(get_current_locale())
# fallback
if value is None:
value = field_dict.get(get_default_locale())
return value

View File

@ -139,7 +139,7 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet):
'lookups': [
constants.LOOKUP_QUERY_IN,
],
},
},
'works_noon': {
'field': 'works_noon',
'lookups': [
@ -152,12 +152,12 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet):
constants.LOOKUP_QUERY_IN,
],
},
# 'works_now': {
# 'field': 'works_now',
# 'lookups': [
# constants.LOOKUP_FILTER_TERM,
# ]
# },
'works_now': {
'field': 'works_now',
'lookups': [
constants.LOOKUP_FILTER_TERM,
]
},
}
geo_spatial_filter_fields = {

View File

@ -14,7 +14,7 @@ class TagBaseSerializer(serializers.ModelSerializer):
# todo: refactor this
# label_translated = TranslatedField()
label_translated = serializers.CharField(source='value')
label_translated = serializers.CharField(source='value', read_only=True, allow_null=True)
class Meta:
"""Meta class."""
@ -43,7 +43,7 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer):
# todo: refactor this
# label_translated = TranslatedField()
label_translated = serializers.CharField(source='index_name')
label_translated = serializers.CharField(source='index_name', read_only=True, allow_null=True)
tags = TagBaseSerializer(many=True, read_only=True)
class Meta:

View File

@ -6,8 +6,8 @@ from establishment.models import Establishment, ContactEmail, ContactPhone, Esta
from location.models import Address
from timetable.models import Timetable
from utils.legacy_parser import parse_legacy_schedule_content
from utils.serializers import TimeZoneChoiceField
from utils.slug_generator import generate_unique_slug
from pytz import timezone as ptz
class EstablishmentSerializer(serializers.ModelSerializer):
@ -26,7 +26,7 @@ class EstablishmentSerializer(serializers.ModelSerializer):
twitter = serializers.CharField(allow_null=True, allow_blank=True)
booking = serializers.CharField(allow_null=True, allow_blank=True)
state = serializers.CharField(allow_null=True)
tz = serializers.CharField()
tz = TimeZoneChoiceField()
created = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
class Meta:
@ -59,7 +59,6 @@ class EstablishmentSerializer(serializers.ModelSerializer):
'establishment_type_id': self.get_type(data),
'is_publish': data.get('state') == 'published',
})
data['tz'] = ptz(data['tz'])
data.pop('location')
data.pop('type')
data.pop('state')

View File

@ -10,6 +10,7 @@ from django.contrib.postgres.fields.jsonb import KeyTextTransform
from django.utils import timezone
from django.utils.html import mark_safe
from django.utils.translation import ugettext_lazy as _, get_language
from configuration.models import TranslationSettings
from easy_thumbnails.fields import ThumbnailerImageField
from sorl.thumbnail import get_thumbnail
from sorl.thumbnail.fields import ImageField as SORLImageField
@ -59,13 +60,26 @@ def to_locale(language):
return language + '-' + country
def get_current_locale():
"""Get current language."""
return to_locale(get_language())
def get_default_locale():
return TranslationSettings.get_solo().default_language or \
settings.FALLBACK_LOCALE
def translate_field(self, field_name):
def translate(self):
field = getattr(self, field_name)
if isinstance(field, dict):
return field.get(to_locale(get_language()))
value = field.get(to_locale(get_language()))
# fallback
if value is None:
value = field.get(get_default_locale())
return value
return None
return translate
@ -111,15 +125,10 @@ class TranslatedFieldsMixin:
if self.STR_FIELD_NAME:
field = getattr(self, getattr(self, 'STR_FIELD_NAME'))
if isinstance(field, dict):
value = field.get(get_current_language())
value = field.get(get_current_locale())
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"""

Binary file not shown.

View File

@ -488,3 +488,5 @@ MEDIA_LOCATION = 'media'
PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = "FR"
FALLBACK_LOCALE = 'en-GB'