diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-07-27 15:56:24 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-08-10 17:25:05 +0200 |
commit | 879c41927171efc8d77d1de2739b18e2eb57580f (patch) | |
tree | de0e78afe2ea49e58c9bf2c662657392a00139ee /src/hydrilla/json_instances.py | |
parent | 52d12a4fa124daa1595529e3e7008276a7986d95 (diff) | |
download | haketilo-hydrilla-879c41927171efc8d77d1de2739b18e2eb57580f.tar.gz haketilo-hydrilla-879c41927171efc8d77d1de2739b18e2eb57580f.zip |
unfinished partial work
Diffstat (limited to 'src/hydrilla/json_instances.py')
-rw-r--r-- | src/hydrilla/json_instances.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/hydrilla/json_instances.py b/src/hydrilla/json_instances.py index 40b213b..33a3785 100644 --- a/src/hydrilla/json_instances.py +++ b/src/hydrilla/json_instances.py @@ -34,6 +34,7 @@ from __future__ import annotations import re import json import os +import io import typing as t from pathlib import Path, PurePath @@ -158,15 +159,22 @@ def parse_instance(text: str) -> object: """Parse 'text' as JSON with additional '//' comments support.""" return json.loads(strip_json_comments(text)) -InstanceOrPath = t.Union[Path, str, dict[str, t.Any]] +InstanceOrPathOrIO = t.Union[Path, str, io.TextIOBase, dict[str, t.Any]] -def read_instance(instance_or_path: InstanceOrPath) -> object: +def read_instance(instance_or_path: InstanceOrPathOrIO) -> object: """....""" if isinstance(instance_or_path, dict): return instance_or_path - with open(instance_or_path, 'rt') as handle: + if isinstance(instance_or_path, io.TextIOBase): + handle = instance_or_path + else: + handle = t.cast(io.TextIOBase, open(instance_or_path, 'rt')) + + try: text = handle.read() + finally: + handle.close() try: return parse_instance(text) |