def get_prev_meta() -> Optional[Tuple[Metadata, str]]: backup_meta_list = list( filter( lambda path: os.path.isfile(path) and re.fullmatch( r"backup(-full)?-\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}\.tar(\.xz|\.gz|\.bz2)?\.meta\.gpg", os.path.basename(path)), os.listdir(opt.output_dir))) if len(backup_meta_list) == 0: return None for backup in backup_meta_list: if not os.path.isfile(backup.replace(".meta", "")): raise ValueError( f"Backup metadata '{backup}' does not have corresponding backup '{backup.replace('.meta', '')}' associated with it." ) fname = reduce(lambda a, c: a if a > c else c, backup_meta_list) data = gpgcrypto.decrypt(fname).data.decode() return Metadata.deserialize(data), fname