import os | |
from pathlib import Path | |
from typing import Union | |
class FileIO: | |
def __init__(self, path: Union[os.PathLike, str]): | |
if isinstance(path, str): | |
path = Path(path) | |
self.path = path | |
def read(self): # Returns bytes/str | |
# We would like to read unicode here, but we cannot, because we are not | |
# sure if it is a valid unicode file. Therefore just read whatever is | |
# here. | |
with open(self.path, 'rb') as f: | |
return f.read() | |
def get_last_modified(self): | |
""" | |
Returns float - timestamp or None, if path doesn't exist. | |
""" | |
try: | |
return os.path.getmtime(self.path) | |
except FileNotFoundError: | |
return None | |
def __repr__(self): | |
return '%s(%s)' % (self.__class__.__name__, self.path) | |
class KnownContentFileIO(FileIO): | |
def __init__(self, path, content): | |
super().__init__(path) | |
self._content = content | |
def read(self): | |
return self._content | |