gault-millau/apps/utils/methods.py
2019-08-30 15:40:53 +03:00

81 lines
2.3 KiB
Python

"""Utils app method."""
import random
import re
import string
from django.conf import settings
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)])