From e209036d1fe7fad384998f19677314930254f47a Mon Sep 17 00:00:00 2001 From: Brian Wiborg Date: Mon, 3 Apr 2023 07:21:41 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=94=20Add=20support=20for=20dumping=20?= =?UTF-8?q?and=20importing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 1 - voting/voting.py | 11 +++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) 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: