Source code for eppy3000.readepj

# Copyright (c) 2018-2019 Santosh Philip
# =======================================================================
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# =======================================================================
"""read epj json file and have eppy like functionality"""

import json

# one works from ipython, the other from the script
# try:
#     from eppy3000.epMunch import EPMunch
# except ModuleNotFoundError as e:
#     from epMunch import EPMunch
from eppy3000.epMunch import EPMunch


[docs]def readepjjson(fhandle): """read an json epj Parameters ---------- fhandle: io.String, io.TextIOWrapper can be a file open for read or a io.StringIO object Returns ------- eppy.EPMunch """ try: fhandle = open(fhandle, "r") except TypeError as e: pass as_json = json.load(fhandle) as_munch = EPMunch.fromDict(as_json) addeppykeys(as_munch) return as_munch
[docs]def addeppykeys(epmunch): """adds eppykeys needed by eppy3000 The way E+ json is structured: - the lowest branch on the json tree is the epobject - once you are in the epobject: - the epobject will not know: 1. Its own name 2. the type of object it is - it will know only its own fields We add two new keys to the epobject that will let it store its name and object type These names start with `eppy` to make it clear that eppy300 has added them - eppykey -> stores the E+ object type (epkey) - eppyname -> stores the name of the object. its key in E+ json Parameters ---------- epmunch: eppy3000.epMunch.EPMunch This is the E+ file as seen by eppy3000 Returns ------- None """ for key, epobjects in epmunch.items(): for name, epobject in epobjects.items(): epobject["eppykey"] = key epobject["eppyname"] = name epobject["eppy_epobjects"] = epobjects
[docs]def removeeppykeys(epmunch, rkeys=None): """remove the eppykeys This will remove all the additional keys that eppy added in addeppykeys(). This is usually called before saving Parameters ---------- epmunch: eppy3000.epMunch.EPMunch This is the E+ file as seen by eppy3000 rkeys: list These are the keys to be removed. if rkeys is None then rkeys is set to ['eppykey', 'eppyname', 'eppy_objepschema'] Returns ------- None """ if not rkeys: rkeys = [ "eppykey", "eppyname", "eppy_objepschema", "eppy_epj", "eppy_epobjects", ] for key, epobjects in epmunch.items(): for name, epobject in epobjects.items(): for rkey in rkeys: epobject.pop(rkey, None)