init
This commit is contained in:
537
BaseModels/functions.py
Normal file
537
BaseModels/functions.py
Normal file
@@ -0,0 +1,537 @@
|
||||
## -*- coding: utf-8 -*-
|
||||
__author__ = 'SDE'
|
||||
|
||||
from django.utils.html import strip_tags
|
||||
# from uuslug import slugify
|
||||
import json
|
||||
import os.path
|
||||
from PIL import Image
|
||||
from django.core.files.uploadedfile import InMemoryUploadedFile
|
||||
from BaseModels.mailSender import techSendMail
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
def get_near_work_day(DT):
|
||||
if DT.isoweekday() < 6:
|
||||
return DT
|
||||
|
||||
return DT + timedelta(days=8 - DT.isoweekday())
|
||||
|
||||
|
||||
def get_next_DT_for_monthes_delta_great(monthes_delta, fromDT=datetime.now()):
|
||||
DT = fromDT
|
||||
i = 0
|
||||
|
||||
cur_month = DT.month
|
||||
|
||||
while cur_month == DT.month:
|
||||
DT = DT + timedelta(days=1)
|
||||
|
||||
# подбираем ближайший день, существующий в месяце
|
||||
fail = True
|
||||
i = 0
|
||||
while fail:
|
||||
try:
|
||||
DT = DT.replace(day=fromDT.day - i)
|
||||
fail = False
|
||||
except:
|
||||
i += 1
|
||||
# DT = DT - timedelta(days=1)
|
||||
# DT = DT.replace(hour=23, minute=59, second=59)
|
||||
|
||||
return DT
|
||||
|
||||
|
||||
def get_prev_DT_for_monthes_delta_less(monthes_delta, fromDT=datetime.now()):
|
||||
DT = fromDT
|
||||
i = 0
|
||||
|
||||
while i < monthes_delta:
|
||||
DT = DT.replace(day=1)
|
||||
DT = DT - timedelta(days=1)
|
||||
i += 1
|
||||
|
||||
# подбираем ближайший день, существующий в месяце
|
||||
fail = True
|
||||
i = 0
|
||||
while fail:
|
||||
try:
|
||||
DT = DT.replace(day=fromDT.day - i)
|
||||
fail = False
|
||||
except:
|
||||
i += 1
|
||||
# DT = DT - timedelta(days=1)
|
||||
# DT = DT.replace(hour=23, minute=59, second=59)
|
||||
|
||||
return DT
|
||||
|
||||
|
||||
def correct_filter_name_for_filter_and_create(filter_kwargs):
|
||||
filter_Dict = {}
|
||||
create_Dict = {}
|
||||
|
||||
filter_Dict.update(filter_kwargs)
|
||||
create_Dict.update(filter_kwargs)
|
||||
|
||||
if 'name' in filter_kwargs:
|
||||
filter_Dict['name__iexact'] = filter_kwargs['name']
|
||||
del filter_Dict['name']
|
||||
|
||||
if 'id' in filter_kwargs:
|
||||
del filter_Dict['id']
|
||||
del create_Dict['id']
|
||||
|
||||
return filter_Dict, create_Dict
|
||||
|
||||
|
||||
def date_range_as_Dict(start_date, end_date):
|
||||
import datetime
|
||||
# for ordinal in range(start_date.toordinal(), end_date.toordinal()):
|
||||
# yield datetime.date.fromordinal(ordinal)
|
||||
|
||||
return [{start_date + datetime.timedelta(n): {}} for n in range(int((end_date - start_date).days) + 1)]
|
||||
|
||||
|
||||
def sortByLength(inputStr):
|
||||
return len(inputStr)
|
||||
|
||||
|
||||
def add_domain(request, url, add_lang=False):
|
||||
domain = get_domain_by_request(request)
|
||||
if add_lang:
|
||||
cur_lang = get_cur_lang_by_request(request)
|
||||
return '{0}/{1}/{2}'.format(domain, cur_lang, url)
|
||||
else:
|
||||
return '{0}{1}'.format(domain, url)
|
||||
|
||||
|
||||
def get_domain_by_request(request):
|
||||
from project_sets import domain
|
||||
if request.query_params and 'domain' in request.query_params:
|
||||
return request.query_params['domain']
|
||||
return domain
|
||||
|
||||
|
||||
def get_cur_lang_by_request(request):
|
||||
from project_sets import lang
|
||||
if request.query_params and 'cur_lang' in request.query_params:
|
||||
return request.query_params['cur_lang']
|
||||
return lang
|
||||
|
||||
|
||||
def get_img_type_by_request(request):
|
||||
if request.query_params and 'img_type' in request.query_params:
|
||||
return request.query_params['img_type']
|
||||
|
||||
return 'webp'
|
||||
|
||||
|
||||
def image_convert_to_png(photo_file, save_file_path=None):
|
||||
from io import BytesIO
|
||||
from PIL import Image as Img
|
||||
print('image_convert_to_png')
|
||||
|
||||
try:
|
||||
|
||||
fn_list = photo_file.name.split('.')
|
||||
if len(fn_list) > 1:
|
||||
fp = fn_list[0] + '.png'
|
||||
else:
|
||||
fp = photo_file.name + '.png'
|
||||
|
||||
image = Img.open(photo_file)
|
||||
|
||||
print('photo was uploaded')
|
||||
|
||||
try:
|
||||
image.convert("RGB")
|
||||
print('photo was converted to RGB')
|
||||
except:
|
||||
print('!!! fail convert photo to RGB')
|
||||
|
||||
if save_file_path:
|
||||
image.save(save_file_path, format="PNG")
|
||||
|
||||
print('photo was saved')
|
||||
|
||||
fileBytes = BytesIO()
|
||||
image.save(fileBytes, format="PNG")
|
||||
print('photo was preparing for streaming')
|
||||
|
||||
memoryFile = InMemoryUploadedFile(fileBytes, None, fp, 'image/png', 1, None)
|
||||
|
||||
return memoryFile
|
||||
|
||||
except Exception as e:
|
||||
msg = 'image_convert_to_png error={0}'.format(str(e))
|
||||
print(msg)
|
||||
techSendMail(msg, 'image_convert_to_png error')
|
||||
return {'error': msg}
|
||||
|
||||
|
||||
def image_convert_to_webP(photo_file, save_file_path=None):
|
||||
from io import BytesIO
|
||||
from PIL import Image as Img
|
||||
|
||||
fn_list = photo_file.name.split('.')
|
||||
if len(fn_list) > 1:
|
||||
webP_fp = fn_list[0] + '.webp'
|
||||
else:
|
||||
webP_fp = photo_file.name + '.webp'
|
||||
|
||||
image = Img.open(photo_file)
|
||||
|
||||
image.convert("RGB")
|
||||
|
||||
if save_file_path:
|
||||
image.save(save_file_path, format="WEBP")
|
||||
|
||||
fileBytes = BytesIO()
|
||||
image.save(fileBytes, format="WEBP")
|
||||
memoryFile = InMemoryUploadedFile(fileBytes, None, webP_fp, 'image/webp', 1, None)
|
||||
|
||||
return memoryFile
|
||||
|
||||
|
||||
def get_thumb_path(full_filepath, img_type):
|
||||
if img_type == 'webp':
|
||||
convert_to_webP = True
|
||||
else:
|
||||
convert_to_webP = False
|
||||
|
||||
icon_path = None
|
||||
|
||||
full_filepath = full_filepath.replace('\\', '/')
|
||||
|
||||
if not os.path.exists(full_filepath):
|
||||
return None
|
||||
|
||||
path_list = full_filepath.split('/')
|
||||
filename = path_list[-1]
|
||||
filepath = '/'.join(path_list[:-1])
|
||||
|
||||
if convert_to_webP:
|
||||
fn_list = filename.split('.')
|
||||
if len(fn_list) > 1:
|
||||
filename = fn_list[0] + '.webp'
|
||||
else:
|
||||
filename = filename + '.webp'
|
||||
|
||||
icon_path = '{0}/icon-{1}'.format(filepath, filename)
|
||||
|
||||
if not os.path.exists(icon_path):
|
||||
size = (300, 300)
|
||||
img = Image.open(full_filepath)
|
||||
if convert_to_webP:
|
||||
img.convert("RGB")
|
||||
img.thumbnail(size)
|
||||
if convert_to_webP:
|
||||
img.save(icon_path, 'WEBP')
|
||||
else:
|
||||
img.save(icon_path)
|
||||
|
||||
return icon_path
|
||||
|
||||
|
||||
def get_filename_from_path(filepath, wo_ext=False):
|
||||
f_list = filepath.split('/')
|
||||
if len(f_list) > 1:
|
||||
filename = f_list[-1]
|
||||
else:
|
||||
filename = f_list[0]
|
||||
|
||||
f_list = filename.split('\\')
|
||||
if len(f_list) > 1:
|
||||
filename = f_list[-1]
|
||||
else:
|
||||
filename = f_list[0]
|
||||
|
||||
if filename and wo_ext:
|
||||
f_list = filename.split('.')
|
||||
filename = f_list[0]
|
||||
|
||||
return filename
|
||||
|
||||
|
||||
def get_free_filename(filename, filepath):
|
||||
from os import path, access, R_OK # W_OK for write permission.
|
||||
|
||||
full_path = filepath + filename
|
||||
|
||||
i = 0
|
||||
while path.exists(full_path) and path.isfile(full_path) and access(full_path, R_OK):
|
||||
i += 1
|
||||
full_path = filepath + filename + '-{0}'.format(str(i))
|
||||
|
||||
return full_path
|
||||
|
||||
|
||||
def url_translit(value):
|
||||
value = translit(value).lower()
|
||||
# value = slugify_text(value).lower()
|
||||
# value = value.replace(u',', u'-')
|
||||
# value = value.replace(u'.', u'-')
|
||||
# value = value.replace(u'_', u'-')
|
||||
# value = value.replace(u'"', u'')
|
||||
# value = value.replace(u'“', u'')
|
||||
# value = value.replace(u'”', u'')
|
||||
# value = value.replace(u"'", u'')
|
||||
# value = value.replace(u'/', u'-')
|
||||
# value = value.replace(u'\\', u'-')
|
||||
# value = value.replace(u'(', u'')
|
||||
# value = value.replace(u')', u'')
|
||||
# value = value.replace(u'&', u'-and-')
|
||||
# value = value.replace(u' ', u'-')
|
||||
# value = value.replace(u'%', u'')
|
||||
# value = value.replace(u'*', u'-')
|
||||
# value = value.replace(u'±', u'-')
|
||||
|
||||
allow_symbols = '0123456789abcdefghijklmnopqrstuvwxyz-'
|
||||
i = 0
|
||||
while i < len(value):
|
||||
if not value[i] in allow_symbols:
|
||||
value = value.replace(value[i], '-')
|
||||
|
||||
i += 1
|
||||
|
||||
while '--' in value:
|
||||
value = value.replace(u'--', u'-')
|
||||
|
||||
if value[len(value) - 1] == '-':
|
||||
value = value[:-1]
|
||||
|
||||
return value
|
||||
|
||||
|
||||
def translit(locallangstring):
|
||||
conversion = {
|
||||
u'\u0410': 'A', u'\u0430': 'a',
|
||||
u'\u0411': 'B', u'\u0431': 'b',
|
||||
u'\u0412': 'V', u'\u0432': 'v',
|
||||
u'\u0413': 'G', u'\u0433': 'g',
|
||||
u'\u0414': 'D', u'\u0434': 'd',
|
||||
u'\u0415': 'E', u'\u0435': 'e',
|
||||
u'\u0401': 'Yo', u'\u0451': 'yo',
|
||||
u'\u0416': 'Zh', u'\u0436': 'zh',
|
||||
u'\u0417': 'Z', u'\u0437': 'z',
|
||||
u'\u0418': 'I', u'\u0438': 'i',
|
||||
u'\u0419': 'Y', u'\u0439': 'y',
|
||||
u'\u041a': 'K', u'\u043a': 'k',
|
||||
u'\u041b': 'L', u'\u043b': 'l',
|
||||
u'\u041c': 'M', u'\u043c': 'm',
|
||||
u'\u041d': 'N', u'\u043d': 'n',
|
||||
u'\u041e': 'O', u'\u043e': 'o',
|
||||
u'\u041f': 'P', u'\u043f': 'p',
|
||||
u'\u0420': 'R', u'\u0440': 'r',
|
||||
u'\u0421': 'S', u'\u0441': 's',
|
||||
u'\u0422': 'T', u'\u0442': 't',
|
||||
u'\u0423': 'U', u'\u0443': 'u',
|
||||
u'\u0424': 'F', u'\u0444': 'f',
|
||||
u'\u0425': 'H', u'\u0445': 'h',
|
||||
u'\u0426': 'Ts', u'\u0446': 'ts',
|
||||
u'\u0427': 'Ch', u'\u0447': 'ch',
|
||||
u'\u0428': 'Sh', u'\u0448': 'sh',
|
||||
u'\u0429': 'Sch', u'\u0449': 'sch',
|
||||
u'\u042a': '', u'\u044a': '',
|
||||
u'\u042b': 'Y', u'\u044b': 'y',
|
||||
u'\u042c': '', u'\u044c': '',
|
||||
u'\u042d': 'E', u'\u044d': 'e',
|
||||
u'\u042e': 'Yu', u'\u044e': 'yu',
|
||||
u'\u042f': 'Ya', u'\u044f': 'ya',
|
||||
u'№': 'no',
|
||||
}
|
||||
translitstring = []
|
||||
for c in locallangstring:
|
||||
translitstring.append(conversion.setdefault(c, c))
|
||||
return ''.join(translitstring)
|
||||
|
||||
|
||||
def slugify_text(str_text):
|
||||
utf8_code = False
|
||||
try:
|
||||
str_text = str_text.encode('utf-8').decode('utf-8')
|
||||
utf8_code = True
|
||||
except:
|
||||
pass
|
||||
|
||||
if utf8_code == False:
|
||||
try:
|
||||
str_text = str_text.decode('utf-8')
|
||||
except:
|
||||
pass
|
||||
|
||||
str_text = del_bad_symbols(str_text)
|
||||
|
||||
str_text = str_text.replace(u'"', u'')
|
||||
str_text = str_text.replace(u"'", u'')
|
||||
str_text = str_text.replace(u".", u'')
|
||||
str_text = str_text.replace(u",", u'')
|
||||
str_text = str_text.replace(u" -", u'-')
|
||||
str_text = str_text.replace(u"- ", u'-')
|
||||
str_text = str_text.replace(u"„", u'')
|
||||
str_text = str_text.replace(u"(", u'')
|
||||
str_text = str_text.replace(u")", u'')
|
||||
str_text = str_text.replace(u"{", u'')
|
||||
str_text = str_text.replace(u"}", u'')
|
||||
str_text = str_text.replace(u"<", u'')
|
||||
str_text = str_text.replace(u">", u'')
|
||||
|
||||
str = translit(str_text)
|
||||
str = translit(str)
|
||||
if len(str) < 2 or len(str) + 3 < len(str_text):
|
||||
str = translit(str_text)
|
||||
str = translit(str)
|
||||
|
||||
str = str.replace(u"'", u'')
|
||||
str = str.replace(u'"', u'')
|
||||
|
||||
if len(str) < 2:
|
||||
str = u''
|
||||
return str
|
||||
|
||||
|
||||
def get_price_from_string_w_del_tails(string):
|
||||
string = del_bad_symbols(string)
|
||||
|
||||
while string.find(' ') > -1:
|
||||
string = string.replace(' ', '')
|
||||
string = string.replace(u'$', '')
|
||||
string = string.replace(u'USD', '')
|
||||
string = string.replace(u'Br', '')
|
||||
string = string.replace(u'руб.', '')
|
||||
string = string.replace(u',', '.')
|
||||
|
||||
return string
|
||||
|
||||
|
||||
def kill_pretexts(txt):
|
||||
pretexts = [
|
||||
'в', 'без', 'до', 'из', 'к', 'на', 'по', 'о', 'от', 'перед', 'при', 'через', 'с', 'у', 'за', 'над',
|
||||
'об', 'под', 'про', 'для'
|
||||
]
|
||||
|
||||
words = txt.split(' ')
|
||||
words = [item for item in words if not item in pretexts]
|
||||
|
||||
return ' '.join(words)
|
||||
|
||||
|
||||
def stay_only_text_and_numbers(txt):
|
||||
bad_symbols = '"~`{}[]|!@#$%^&*()_+№;:?= '
|
||||
nums = '0123456789'
|
||||
|
||||
for symbol in bad_symbols:
|
||||
txt = txt.replace(symbol, ' ')
|
||||
|
||||
symbols_for_check = ',.'
|
||||
i = 0
|
||||
while i < len(txt):
|
||||
if txt[i] in ['.', ',']:
|
||||
if i < 1 or not txt[i - 1] in nums or i == len(txt) - 1 or not txt[i + 1] in nums:
|
||||
txt_list = list(txt)
|
||||
txt_list[i] = ' '
|
||||
txt = ''.join(txt_list)
|
||||
# if txt[i] in ['"']:
|
||||
# if i < 1 or not txt[i - 1] in nums:
|
||||
# txt_list = list(txt)
|
||||
# txt_list[i] = ' '
|
||||
# txt = ''.join(txt_list)
|
||||
|
||||
i += 1
|
||||
|
||||
txt = txt.strip()
|
||||
while ' ' in txt:
|
||||
txt = txt.replace(' ', ' ')
|
||||
|
||||
return txt
|
||||
|
||||
|
||||
def del_bad_symbols_and_enters_and_tags(string):
|
||||
# from string import maketrans
|
||||
|
||||
try:
|
||||
|
||||
string = strip_tags(string)
|
||||
string = string.replace('\r\n', '')
|
||||
del_bad_symbols(string)
|
||||
except:
|
||||
pass
|
||||
|
||||
return string
|
||||
|
||||
|
||||
def del_bad_symbols(string):
|
||||
# from string import maketrans
|
||||
|
||||
try:
|
||||
|
||||
# string = strip_tags(string)
|
||||
# string = string.replace('\r\n','')
|
||||
string = string.strip()
|
||||
|
||||
while string.find(' ') > -1:
|
||||
string = string.replace(' ', ' ')
|
||||
# table = maketrans(' ', ' ')
|
||||
# string = string.translate(table)
|
||||
|
||||
while string.find(' ') > -1:
|
||||
string = string.replace(' ', ' ')
|
||||
except:
|
||||
pass
|
||||
|
||||
return string
|
||||
|
||||
|
||||
# def get_offers_from_cookie(request):
|
||||
# if 'oknaplast_right_offers' in request.COOKIES:
|
||||
# order_list = json.loads(request.COOKIES['oknaplast_right_offers'], encoding='utf8')
|
||||
# return WindowOfferModel.objects.filter(id__in=order_list)
|
||||
# else:
|
||||
# return []
|
||||
|
||||
|
||||
def del_nbsp(string):
|
||||
mapping = [
|
||||
(""", u'"'),
|
||||
('&', u'&'),
|
||||
('<', u'<'),
|
||||
('>', u'>'),
|
||||
(' ', u' '),
|
||||
('¡', u'¡'),
|
||||
('¢', u'¢'),
|
||||
('£', u'£'),
|
||||
('¤', u'¤'),
|
||||
('¥', u'¥'),
|
||||
('¦', u'¦'),
|
||||
('§', u'§'),
|
||||
('¨', u'¨'),
|
||||
('©', u'©'),
|
||||
('ª', u'ª'),
|
||||
('«', u'«'),
|
||||
('¬', u'¬'),
|
||||
('®', u'®'),
|
||||
('¯', u'¯'),
|
||||
('°', u'°'),
|
||||
('±', u'±'),
|
||||
('²', u'²'),
|
||||
('³', u'³'),
|
||||
('´', u'´'),
|
||||
('µ', u'µ'),
|
||||
('¶', u'¶'),
|
||||
('·', u'•'),
|
||||
('¸', u'¸'),
|
||||
('¹', u'¹'),
|
||||
('º', u'º'),
|
||||
('»', u'»'),
|
||||
('¼', u'¼'),
|
||||
('½', u'½'),
|
||||
('¾', u'¾'),
|
||||
('€', u'€'),
|
||||
('\n', ''),
|
||||
('\r', ''),
|
||||
('\t', ' '),
|
||||
('—', '-'),
|
||||
]
|
||||
for pair in mapping:
|
||||
string = string.replace(pair[0], pair[1])
|
||||
return string
|
||||
Reference in New Issue
Block a user