diff --git a/TODO.md b/TODO.md index ce9d2f9..acd815e 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,4 @@ # ToDos -- add support for pickling/unpickling `Voting` - add `click` and provide a user-friendly CLI - add `fastapi` and implement a builtin JSON/REST API server diff --git a/voting/voting.py b/voting/voting.py index 667812f..2327172 100644 --- a/voting/voting.py +++ b/voting/voting.py @@ -8,7 +8,7 @@ from .quorum import Quorum, QuorumKind from arrow import Arrow, get as arrow_get from dataclasses import dataclass from enum import Enum -from typing import Dict, List +from typing import Dict, TextIO, List import abc import json.tool @@ -74,10 +74,17 @@ class Voting(object): def dumps(self) -> str: return json.dumps(self.as_dict()) + def dump(self, f: TextIO) -> None: + f.write(self.dumps()) + @classmethod - def loads(cls, data: Dict): + def loads(cls, data: Dict) -> None: return cls(**json.loads(data)) + @classmethod + def load(cls, f: TextIO) -> None: + return cls.loads('\n'.join(f.readlines())) + @dataclass class Result: