Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| import os | |
| import hashlib | |
| def sha256sum(file): | |
| block_size = 16 * 1024 * 1024 # 16 MB block size | |
| b = bytearray(block_size) | |
| file_hash = hashlib.sha256() | |
| mv = memoryview(b) | |
| with open(file, 'rb', buffering=0) as f: | |
| while True: | |
| n = f.readinto(mv) | |
| if not n: | |
| break | |
| file_hash.update(mv[:n]) | |
| return file_hash.hexdigest() | |
| # Define the path to the llama directory (parent folder of script directory) | |
| llama_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) | |
| # Define the file with the list of hashes and filenames | |
| hash_list_file = os.path.join(llama_path, "SHA256SUMS") | |
| # Check if the hash list file exists | |
| if not os.path.exists(hash_list_file): | |
| print(f"Hash list file not found: {hash_list_file}") | |
| exit(1) | |
| # Read the hash file content and split it into an array of lines | |
| with open(hash_list_file, "r") as f: | |
| hash_list = f.read().splitlines() | |
| # Create an array to store the results | |
| results = [] | |
| # Loop over each line in the hash list | |
| for line in hash_list: | |
| # Split the line into hash and filename | |
| hash_value, filename = line.split(" ") | |
| # Get the full path of the file by joining the llama path and the filename | |
| file_path = os.path.join(llama_path, filename) | |
| # Informing user of the progress of the integrity check | |
| print(f"Verifying the checksum of {file_path}") | |
| # Check if the file exists | |
| if os.path.exists(file_path): | |
| # Calculate the SHA256 checksum of the file using hashlib | |
| file_hash = sha256sum(file_path) | |
| # Compare the file hash with the expected hash | |
| if file_hash == hash_value: | |
| valid_checksum = "V" | |
| file_missing = "" | |
| else: | |
| valid_checksum = "" | |
| file_missing = "" | |
| else: | |
| valid_checksum = "" | |
| file_missing = "X" | |
| # Add the results to the array | |
| results.append({ | |
| "filename": filename, | |
| "valid checksum": valid_checksum, | |
| "file missing": file_missing | |
| }) | |
| # Print column headers for results table | |
| print("\n" + "filename".ljust(40) + "valid checksum".center(20) + "file missing".center(20)) | |
| print("-" * 80) | |
| # Output the results as a table | |
| for r in results: | |
| print(f"{r['filename']:40} {r['valid checksum']:^20} {r['file missing']:^20}") | |