gault-millau/apps/utils/methods.py
2019-09-06 17:55:17 +03:00

90 lines
2.6 KiB
Python

"""Utils app method."""
import random
import re
import string
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.http.request import HttpRequest
from django.utils.timezone import datetime
from rest_framework.request import Request
def generate_code(digits=6, string_output=True):
"""Generate random int."""
max_value = 10 ** digits - 1
min_value = 10 ** (digits - 1)
value = random.randint(min_value, max_value)
return str(value) if string_output else value
def get_token_from_cookies(request):
"""Get access token from request cookies"""
cookies = request.COOKIES
if cookies.get('access_token'):
token = f'Bearer {cookies.get("access_token")}'
return token.encode()
def get_token_from_request(request):
"""Get access token from request"""
token = None
if 'Authorization' in request.headers:
if isinstance(request, HttpRequest):
token = request.headers.get('Authorization').split(' ')[::-1][0]
if isinstance(request, Request):
token = request.headers.get('Authorization').split(' ')[::-1][0]
return token
def username_validator(username: str) -> bool:
"""Validate given username"""
pattern = r'[@,]+'
if re.search(pattern=pattern, string=username):
return False
else:
return True
def image_path(instance, filename):
"""Determine avatar path method."""
filename = '%s.jpeg' % generate_code()
return 'image/%s/%s/%s' % (
instance._meta.model_name,
datetime.now().strftime(settings.REST_DATE_FORMAT),
filename)
def svg_image_path(instance, filename):
"""Determine SVG path method."""
filename = '%s.svg' % generate_code()
return 'image/svg/%s/%s/%s' % (
instance._meta.model_name,
datetime.now().strftime(settings.REST_DATE_FORMAT),
filename)
def get_user_ip(request):
"""Get user ip."""
meta_dict = request.META
x_forwarded_for = meta_dict.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = meta_dict.get('REMOTE_ADDR')
return ip
def generate_string_code(size=64,
chars=string.ascii_lowercase + string.ascii_uppercase + string.digits):
"""Generate string code."""
return ''.join([random.SystemRandom().choice(chars) for _ in range(size)])
def get_contenttype(app_label: str, model: str):
"""Get ContentType instance by app_label and model"""
if app_label and model:
qs = ContentType.objects.filter(app_label=app_label, model=model)
if qs.exists():
return qs.first()