import hashlib import os def strip_path(path): #This leaves whitespace inside quotes and only a single " #thus ' ""test"' -> '"test' #consider path.strip(string.whitespace+"\"") #or weightier re.fullmatch("[\\s\"]*(.+?)[\\s\"]*", path).group(1) path = path.strip() if path.startswith("\""): path = path[1:] if path.endswith("\""): path = path[:-1] return path # modified from https://stackoverflow.com/questions/22058048/hashing-a-file-in-python def calculate_file_hash(filename: str, hash_every_n: int = 1): #Larger video files were taking >.5 seconds to hash even when cached, #so instead the modified time from the filesystem is used as a hash h = hashlib.sha256() h.update(filename.encode()) h.update(str(os.path.getmtime(filename)).encode()) return h.hexdigest() def is_safe_path(path, strict=False): if "VCW_STRICT_PATHS" not in os.environ and not strict: return True basedir = os.path.abspath('.') try: common_path = os.path.commonpath([basedir, path]) except: #Different drive on windows return False return common_path == basedir