from BunnyCDN.Storage import Storage import config import hashlib import os def file_hash(filename, hash_algo='sha256'): """ Compute the hash of a file. :param filename: Path to the file. :param hash_algo: Hashing algorithm to use (e.g., 'sha256', 'md5'). :return: Hexadecimal hash string. """ h = hashlib.new(hash_algo) with open(filename, 'rb') as file: while chunk := file.read(8192): h.update(chunk) return h.hexdigest() #obj_storage = Storage('577cb82d-8176-4ccf-935ce0a574bf-fe4c-4012', 'altpins') obj_storage = Storage('345697f9-d9aa-4a6b-a5ec8bffc16d-ceaf-453e', 'storysave') db, cursor = config.gen_connection() cursor.execute("SELECT id, media_id, media_url FROM media WHERE hash IS NULL;") results = cursor.fetchall() count = 0 print(f"Found {len(results)} files to process.") for result in results: count += 1 serverPath = result[2].replace("https://storysave.b-cdn.net/", '').replace('//', '/').replace('\\', '/') localFilePath = os.path.join(os.getcwd(), 'temp', os.path.basename(serverPath)) if not os.path.exists(localFilePath): obj_storage.DownloadFile(storage_path=serverPath, download_path=os.path.join(os.getcwd(), 'temp')) filehash = file_hash(localFilePath) cursor.execute("UPDATE media SET hash = %s WHERE id = %s;", (filehash, result[0])) db.commit() print(f"[{count}/{len(results)}] {result[1]}: {filehash}, {cursor.rowcount}")