# These are shared utilities used import os import hashlib class Shared: """ Quick utilities that may be commonly used """ @staticmethod def get_checksum(path, hashtype, logger): """ Generates a checksum from the provided path by doing things in chunks. This way we don't do it in memory. """ try: checksum = hashlib.new(hashtype) except ValueError: logger.error("Invalid hash type: %s" % hashtype) return False try: input_file = open(path, "rb") except IOError as e: logger.error("Could not open file %s: %s" % (path, e)) return False while True: chunk = input_file.read(8192) if not chunk: break checksum.update(chunk) input_file.close() stat = os.stat(path) base = os.path.basename(path) # This emulates our current syncing scripts that runs stat and # sha256sum and what not with a very specific output. return "%s: %s bytes\n%s (%s) = %s\n" % ( base, stat.st_size, hashtype.upper(), base, checksum.hexdigest() ) @staticmethod def discinfo_write(timestamp, fullname, arch, file_path): """ Ensure discinfo is written correctly """ data = [ "%s" % timestamp, "%s" % fullname, "%s" % arch, "ALL" ] with open(file_path, "w+") as f: f.write("\n".join(data)) f.close() @staticmethod def media_repo_write(timestamp, fullname, file_path): """ Ensure media.repo exists """ data = [ "[InstallMedia]", "name=%s" % fullname, "mediaid=%s" % timestamp, "metadata_expire=-1", "gpgcheck=0", "cost=500", "", ] with open(file_path, "w") as f: f.write("\n".join(data))