import hashlib import os import shutil import tempfile from thumbnail import generate_thumbnail from db.Models import Shitpost from utils.dateExtractor import extract_date_from_path options = { 'trim': False, 'height': 300, 'width': 300, 'quality': 85, 'type': 'thumbnail' } def hashfile(file_path:str)->str: with open(file_path, 'rb', buffering=0) as f: return hashlib.file_digest(f, 'sha256').hexdigest() def ShitpostFactory(file_path:str): with tempfile.TemporaryDirectory() as tmpdir: filename = file_path.split("/")[-1] filetype = os.path.splitext(filename)[1].lower()[1:] shitpost_hash = hashfile(file_path) #get date file shitpost_date = extract_date_from_path(file_path).timestamp() shitpost = Shitpost( hash=shitpost_hash, path=file_path, date=shitpost_date, file_type=filetype ) #create thumbnail shitpost_cpy = os.path.join(tmpdir, f"{shitpost_hash}.{filetype}") shutil.copyfile(file_path, shitpost_cpy) thumpath = f"{tmpdir}/{shitpost_hash}.png" generate_thumbnail(shitpost_cpy,thumpath, options) thumb = open(f"{tmpdir}/{shitpost_hash}.png", "rb") shitpost.thumbnail = thumb.read() thumb.close() #song match default value shitpost.correct_song_match = False return shitpost