41 lines
917 B
Python
41 lines
917 B
Python
import json
|
|
from pathlib import Path
|
|
|
|
|
|
class Reader:
|
|
|
|
def read_lines(self) -> list[str]:
|
|
raise Exception("not yet implemented")
|
|
|
|
|
|
class FileReader(Reader):
|
|
|
|
def __init__(self, path: Path|str):
|
|
self._path = Path(path)
|
|
|
|
def read(self) -> str:
|
|
return self._path.read_text('utf-8')
|
|
|
|
def read_lines(self) -> list[str]:
|
|
return [l for l in self.read().split('\n') if l.strip()]
|
|
|
|
|
|
class User:
|
|
def __init__(self, name: str):
|
|
self.name = name
|
|
|
|
@classmethod
|
|
def from_json(cls, blob) -> 'User' | None:
|
|
if 'name' not in blob:
|
|
return
|
|
return cls(blob['name'])
|
|
|
|
|
|
class UserLoader:
|
|
def __init__(self, reader: Reader):
|
|
self._file_reader = reader
|
|
|
|
def get_users(self) -> list[User]:
|
|
ret = [User.from_json(json.loads(line)) for line in self._file_reader.read_lines()]
|
|
return [r for r in ret if r is not None]
|