import typing as t #################### # Directory Wrappers # class DirWrap: def __init__(self, fname, *data: t.List[t.Union["DirWrap", "FileWrap"]]): self.name = fname self.contains = {d.name: d for d in data} self._raw_data = data def stringify(self, level=0) -> str: s = "" for key, value in self.contains.items(): s += ( "├" + "─" + "─" * (4 * level) + " " + key + ("/" if isinstance(value, DirWrap) else "") + "\n" ) if isinstance(value, DirWrap): s += value.stringify(level + 1) return s class FileWrap: def __init__(self, fname: str, fdata: t.Union[bytes, str]) -> None: self.name = fname self.data = fdata.encode() if isinstance(fdata, str) else fdata ######### # Streams # class IStream: def __init__(self, file) -> None: self.file = file def write(self, *data): self.file.write(*data) class IOStream: def __init__(self, fdin: IStream, fdout: "OStream") -> None: self.fdin = fdin self.fdout = fdout def write(self, *data): self.fdin.write(*data) def read(self): return self.fdout.read() class OStream: def __init__(self, file) -> None: self.file = file def read(self): return self.file.read() class Key: def __init__(self, kpath, key, hash, randomart): self.kp = kpath self.key = key self.hash = hash self.randomart = randomart def dump(self): open(self.kp, "wb+").write( "--- BEGIN FERNET CRYPTOGRAPHY KEY ---\n".encode() + self.key + f"\n{self.hash}\n".encode() + "\n--- END FERNET CRYPTOGRAPHY KEY ---".encode() ) @classmethod def kimport(cls, kp): k = open(kp, "rb").read().splitlines() key = k[1] hash = k[2].decode() from random_art.randomart import drunkenwalk, draw randomart = draw(drunkenwalk(key), hash) return cls(kp, key, hash, randomart)