From 785425d613478334cc1c2e9b8f0e828b55217334 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Tue, 17 Aug 2021 01:48:22 +0200 Subject: [PATCH] Make OnepifReader return OnepifEntry objects. (Simulate dicts at the moment.) --- onepif/OnepifEntry.py | 25 +++++++++++++++++++++++++ onepif/OnepifReader.py | 18 +++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 onepif/OnepifEntry.py diff --git a/onepif/OnepifEntry.py b/onepif/OnepifEntry.py new file mode 100644 index 0000000..c5e0bae --- /dev/null +++ b/onepif/OnepifEntry.py @@ -0,0 +1,25 @@ +class OnepifEntry(): + + def __init__(self, data): + self.raw = data + + def __getattr__(self, name): + if name not in self.raw: + raise AttributeError + return self.raw[name] + + def __getitem__(self, key): + if self.__missing__(key): + raise KeyError + return self.raw[key] + + def __contains__(self, item): + return item in self.raw + + def __missing__(self, key): + return key not in self.raw + + def get(self, key): + if key not in self.raw: + return None + return self.raw[key] diff --git a/onepif/OnepifReader.py b/onepif/OnepifReader.py index 049a037..c489b03 100644 --- a/onepif/OnepifReader.py +++ b/onepif/OnepifReader.py @@ -1,4 +1,5 @@ import json +from . import OnepifEntry SEPARATOR = "***5642bee8-a5ff-11dc-8314-0800200c9a66***" @@ -13,6 +14,14 @@ class OnepifReader(): return self def __next__(self): + raw_entry = self.get_next_json() + if not raw_entry: + raise StopIteration + obj_dict = self.parse_into_dict(raw_entry) + op_entry = OnepifEntry.OnepifEntry(obj_dict) + return op_entry + + def get_next_json(self): buffer = [] is_eof = True for line in self.fp: @@ -21,6 +30,9 @@ class OnepifReader(): break buffer.append(line) if is_eof: - raise StopIteration - jsonstr = "".join(buffer) - return json.loads(jsonstr) \ No newline at end of file + return False + json_str = "".join(buffer) + return json_str + + def parse_into_dict(self, raw_entry): + return json.loads(raw_entry)