change display_country_code type of returning value, refactored create guide method, added filtering award type list, change name of username_random -> string_random
This commit is contained in:
parent
4d52ec57c4
commit
400b5ac402
|
|
@ -1,10 +1,8 @@
|
||||||
"""Common serializer for application authorization"""
|
"""Common serializer for application authorization"""
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import authenticate
|
|
||||||
from django.contrib.auth import password_validation as password_validators
|
from django.contrib.auth import password_validation as password_validators
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.generics import get_object_or_404
|
|
||||||
|
|
||||||
from account import models as account_models
|
from account import models as account_models
|
||||||
from authorization import tasks
|
from authorization import tasks
|
||||||
|
|
@ -69,9 +67,9 @@ class SignupSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
username = validated_data.get('username')
|
username = validated_data.get('username')
|
||||||
if not username:
|
if not username:
|
||||||
username = utils_methods.username_random()
|
username = utils_methods.string_random()
|
||||||
while account_models.User.objects.filter(username__iexact=username).exists():
|
while account_models.User.objects.filter(username__iexact=username).exists():
|
||||||
username = utils_methods.username_random()
|
username = utils_methods.string_random()
|
||||||
|
|
||||||
obj = account_models.User.objects.make(
|
obj = account_models.User.objects.make(
|
||||||
username=validated_data.get('username'),
|
username=validated_data.get('username'),
|
||||||
|
|
|
||||||
|
|
@ -337,15 +337,6 @@ class Guide(ProjectBaseMixin, CollectionNameMixin, CollectionDateMixin):
|
||||||
"""String method."""
|
"""String method."""
|
||||||
return f'{self.name}'
|
return f'{self.name}'
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
|
||||||
if not self.pk:
|
|
||||||
if not self.slug:
|
|
||||||
slugify_slug = slugify(
|
|
||||||
f'{self.name} {self.vintage}',
|
|
||||||
word_boundary=True
|
|
||||||
)
|
|
||||||
self.slug = slugify_slug
|
|
||||||
super(Guide, self).save(*args, **kwargs)
|
|
||||||
|
|
||||||
# todo: for test use, use annotation instead
|
# todo: for test use, use annotation instead
|
||||||
# @property
|
# @property
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework_recursive.fields import RecursiveField
|
from rest_framework_recursive.fields import RecursiveField
|
||||||
|
from slugify import slugify
|
||||||
|
|
||||||
from collection import models
|
from collection import models
|
||||||
from review.serializers import ReviewBaseSerializer
|
|
||||||
from establishment.serializers import EstablishmentGuideElementSerializer
|
from establishment.serializers import EstablishmentGuideElementSerializer
|
||||||
from location import models as location_models
|
from location import models as location_models
|
||||||
from main.serializers import SiteShortSerializer
|
from main.serializers import SiteShortSerializer
|
||||||
from product.serializers import ProductGuideElementSerializer
|
from product.serializers import ProductGuideElementSerializer
|
||||||
from utils import exceptions
|
from utils import exceptions
|
||||||
|
from utils.methods import string_random
|
||||||
from utils.serializers import TranslatedField
|
from utils.serializers import TranslatedField
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -145,6 +146,19 @@ class GuideBaseSerializer(serializers.ModelSerializer):
|
||||||
'vintage': {'required': True},
|
'vintage': {'required': True},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
"""Overridden create method."""
|
||||||
|
slug = validated_data.get('slug')
|
||||||
|
name = validated_data.get('name')
|
||||||
|
vintage = validated_data.get('vintage')
|
||||||
|
|
||||||
|
if not slug:
|
||||||
|
slug = slugify(f'{name} {vintage}', word_boundary=True)
|
||||||
|
while models.Guide.objects.filter(slug=slug).exists():
|
||||||
|
slug = slugify(f'{name} {vintage} {string_random()}', word_boundary=True)
|
||||||
|
validated_data['slug'] = slug
|
||||||
|
return super(GuideBaseSerializer, self).create(validated_data)
|
||||||
|
|
||||||
|
|
||||||
class GuideElementBaseSerializer(serializers.ModelSerializer):
|
class GuideElementBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for model GuideElement."""
|
"""Serializer for model GuideElement."""
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,11 @@ class GuideListCreateView(GuideBaseView,
|
||||||
"""View for Guides list for BackOffice users and Guide create."""
|
"""View for Guides list for BackOffice users and Guide create."""
|
||||||
filter_class = filters.GuideFilterSet
|
filter_class = filters.GuideFilterSet
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
"""Overridden create method."""
|
||||||
|
super(GuideListCreateView, self).create(request, *args, **kwargs)
|
||||||
|
return Response(status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
|
||||||
class GuideBackOfficeList(BindObjectMixin, GuideBaseView):
|
class GuideBackOfficeList(BindObjectMixin, GuideBaseView):
|
||||||
"""ViewSet for Guides list for BackOffice users"""
|
"""ViewSet for Guides list for BackOffice users"""
|
||||||
|
|
|
||||||
|
|
@ -75,17 +75,20 @@ class Country(TranslatedFieldsMixin,
|
||||||
return 'hh:mmA'
|
return 'hh:mmA'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def display_calling_code(self) -> str:
|
def display_calling_code(self) -> list:
|
||||||
"""Return formatted calling code."""
|
"""Return formatted calling code."""
|
||||||
|
array = []
|
||||||
if self.code and self.calling_code:
|
if self.code and self.calling_code:
|
||||||
# hardcoded calling numbers for Antilles Guyane West Indies islands.
|
# hardcoded calling numbers for Antilles Guyane West Indies islands.
|
||||||
if self.code.lower() == 'aa':
|
if self.code.lower() == 'aa':
|
||||||
return f"""{[self.CALLING_NUMBER_MASK % i
|
array.extend([self.CALLING_NUMBER_MASK % i
|
||||||
for i in set(settings.CALLING_CODES_ANTILLES_GUYANE_WEST_INDIES)]}"""
|
for i in set(settings.CALLING_CODES_ANTILLES_GUYANE_WEST_INDIES)])
|
||||||
return self.CALLING_NUMBER_MASK % self.calling_code
|
else:
|
||||||
|
array.append(self.CALLING_NUMBER_MASK % self.calling_code)
|
||||||
|
return array
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def default_calling_code(self):
|
def default_calling_code(self) -> str:
|
||||||
"""Return default calling code based on phone number."""
|
"""Return default calling code based on phone number."""
|
||||||
if self.code and self.calling_code:
|
if self.code and self.calling_code:
|
||||||
# hardcoded default calling number for Antilles Guyane West Indies islands.
|
# hardcoded default calling number for Antilles Guyane West Indies islands.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ class CountrySerializer(serializers.ModelSerializer):
|
||||||
"""Country serializer."""
|
"""Country serializer."""
|
||||||
|
|
||||||
name_translated = TranslatedField()
|
name_translated = TranslatedField()
|
||||||
display_calling_code = serializers.CharField(allow_null=True, read_only=True)
|
display_calling_code = serializers.ListField(allow_null=True, read_only=True)
|
||||||
default_calling_code = serializers.CharField(allow_null=True, read_only=True)
|
default_calling_code = serializers.CharField(allow_null=True, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from django.db import connections
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from mptt.models import MPTTModel, TreeForeignKey
|
from mptt.models import MPTTModel
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
|
|
||||||
from configuration.models import TranslationSettings
|
from configuration.models import TranslationSettings
|
||||||
|
|
@ -216,6 +216,14 @@ class Award(TranslatedFieldsMixin, URLImageMixin, models.Model):
|
||||||
return f'id:{self.id}-{title}'
|
return f'id:{self.id}-{title}'
|
||||||
|
|
||||||
|
|
||||||
|
class AwardTypeQuerySet(models.QuerySet):
|
||||||
|
"""QuerySet for model AwardType."""
|
||||||
|
|
||||||
|
def by_country_code(self, country_code: str):
|
||||||
|
"""Filter QuerySet by country code."""
|
||||||
|
return self.filter(country__code=country_code)
|
||||||
|
|
||||||
|
|
||||||
class AwardType(models.Model):
|
class AwardType(models.Model):
|
||||||
"""AwardType model."""
|
"""AwardType model."""
|
||||||
country = models.ForeignKey(
|
country = models.ForeignKey(
|
||||||
|
|
@ -223,6 +231,8 @@ class AwardType(models.Model):
|
||||||
name = models.CharField(_('name'), max_length=255)
|
name = models.CharField(_('name'), max_length=255)
|
||||||
old_id = models.IntegerField(null=True, blank=True)
|
old_id = models.IntegerField(null=True, blank=True)
|
||||||
|
|
||||||
|
objects = AwardTypeQuerySet.as_manager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,10 +51,15 @@ class AwardRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
class AwardTypesListView(generics.ListAPIView):
|
class AwardTypesListView(generics.ListAPIView):
|
||||||
"""AwardType List view."""
|
"""AwardType List view."""
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
queryset = AwardType.objects.all()
|
|
||||||
serializer_class = serializers.AwardTypeBaseSerializer
|
serializer_class = serializers.AwardTypeBaseSerializer
|
||||||
permission_classes = get_permission_classes()
|
permission_classes = get_permission_classes()
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
"""Overridden get_queryset method."""
|
||||||
|
if hasattr(self, 'request') and hasattr(self.request, 'country_code'):
|
||||||
|
return AwardType.objects.by_country_code(self.request.country_code)
|
||||||
|
return AwardType.objects.none()
|
||||||
|
|
||||||
|
|
||||||
class ContentTypeView(generics.ListAPIView):
|
class ContentTypeView(generics.ListAPIView):
|
||||||
"""ContentType list view"""
|
"""ContentType list view"""
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ def username_validator(username: str) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def username_random():
|
def string_random():
|
||||||
"""Generate random username"""
|
"""Generate random username"""
|
||||||
username = list('{letters}{digits}'.format(
|
username = list('{letters}{digits}'.format(
|
||||||
letters=''.join([random.choice(string.ascii_lowercase) for _ in range(4)]),
|
letters=''.join([random.choice(string.ascii_lowercase) for _ in range(4)]),
|
||||||
|
|
|
||||||
|
|
@ -561,5 +561,5 @@ COUNTRY_CALLING_CODES = {
|
||||||
"aa": 590 # Guyane West Indies
|
"aa": 590 # Guyane West Indies
|
||||||
}
|
}
|
||||||
|
|
||||||
CALLING_CODES_ANTILLES_GUYANE_WEST_INDIES = [590, 594, 1758]
|
CALLING_CODES_ANTILLES_GUYANE_WEST_INDIES = [590, 594, 1758, 596]
|
||||||
DEFAULT_CALLING_CODE_ANTILLES_GUYANE_WEST_INDIES = 590
|
DEFAULT_CALLING_CODE_ANTILLES_GUYANE_WEST_INDIES = 590
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user