import math import random import binascii from io import BufferedReader import re def generate_random_id(): return str(math.floor(random.random() * 1800000)) + str(math.floor(random.random() * 4000000)) + str( math.floor(random.random() * 55000)) def get_file_buffer(file, file_operation_mode="rb"): if isinstance(file, str): opened_file = open(file, file_operation_mode) buffer = opened_file.read() opened_file.close() elif isinstance(file, BufferedReader): buffer = file.read() file.close() elif isinstance(file, bytes): buffer = file else: return None return buffer def get_file_size(file): buffer = get_file_buffer(file=file) return len(buffer) def get_file_crc32(file): buffer = get_file_buffer(file=file) crc_buffer = (binascii.crc32(buffer) & 0xFFFFFFFF) return crc_buffer def get_image_thumbnails(im): from io import BytesIO import base64 from PIL import Image size = 80, 80 im.thumbnail(size, Image.ANTIALIAS) output = BytesIO() im.save(output, format='JPEG') im_data = output.getvalue() thumb = '{}'.format(base64.b64encode(im_data).decode()) return thumb def arabic_to_eng_number(number): number = str(number) return number.translate(str.maketrans('۰۱۲۳۴۵۶۷۸۹٠١٢٣٤٥٦٧٨٩', '01234567890123456789')) def eng_to_arabic_number(number): number = str(number) return number.translate(str.maketrans('0123456789', '۰۱۲۳۴۵۶۷۸۹')) def phone_number_validation(phone_num): if re.match(r'^(\+98|0098|0)?9\d{9}$', phone_num): return True else: return False def standardize_phone_number(number): number_str = str(number) if number_str.startswith("0098"): return "+98" + number_str[4:] elif number_str.startswith("0"): return "+98" + number_str[1:]