Source code for eppy3000.epjviewer

# Copyright (c) 2021 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/.
# =======================================================================
"""HTML viewer for EPJ and epMunch"""


import tempfile

try:
    from IPython.display import IFrame
except ModuleNotFoundError as e:
    pass
from munch import Munch
import json2html


[docs]class JupyterNotInstalled(Exception): pass
[docs]def removeeppykeys_inepmunch(epmunch, rkeys=None): """remove the eppy keys in epmunch""" if not rkeys: rkeys = [ "eppykey", "eppyname", "eppy_objepschema", "eppy_epj", "eppy_epobjects", ] for rkey in rkeys: epmunch.pop(rkey, None)
def _epmunch2displaymunch(epmunch): """modify epmunch for display in HTML""" todict = epmunch.toDict() todict = Munch.fromDict(todict) eppykey = todict["eppykey"] eppyname = todict["eppyname"] removeeppykeys_inepmunch(todict) en = Munch() en[eppyname] = todict ek = Munch() ek[eppykey] = en return ek
[docs]def epmunch2dct(epmunch): """convert epmunch to and json string""" ek = _epmunch2displaymunch(epmunch) dct = ek.toDict() return dct
[docs]def epmunch2html(epmunch): """convert epmunch to an HTML table""" dct = epmunch2dct(epmunch) html = json2html.json2html.convert(json=dct) return html
[docs]def epmuchhtmllines(epmunch): """return the rows in the html table made from epmunch""" lines = 0 for field in epmunch.epjfieldnames(): if type(epmunch[field]) is list: lines += len(epmunch[field]) else: lines += 1 return lines
[docs]def epjhtmllines(epj): """return the number of rows in all the epmunch tables that make up the epj""" lines = 0 for key in epj.epj.keys(): for epmunch in epj.epobjects[key]: lines += epmuchhtmllines(epmunch) return lines
[docs]def epobjectslines(epobjects): """return the number of rows in all the epmunch tables that make up the epobjects""" lines = 0 for epmunch in epobjects: lines += epmuchhtmllines(epmunch) return lines
[docs]def epmunch2ipythonhtml(epmunch, fname="./eppy3000_deletethis.html"): """display the epmunch as HTML table in jupyter notebook""" htmllines = epmuchhtmllines(epmunch) html = epmunch2html(epmunch) open(fname, "wb").write(html.encode()) try: return IFrame(src=fname, width=800, height=30 * htmllines + 50) except NameError as e: raise JupyterNotInstalled
[docs]def epj2html(epj): """convert the epj to html""" epjjsonstr = epj.jsonstr() html = json2html.json2html.convert(json=epjjsonstr) return html
[docs]def epj2ipythonhtml(epj, fname="./eppy3000_deletethis.html"): """display the epj as HTML tables in jupyter notebook""" html = epj2html(epj) open(fname, "wb").write(html.encode()) lines = epjhtmllines(epj) height = 30 * lines + 50 try: return IFrame(src=fname, width=8000, height=height) except NameError as e: raise JupyterNotInstalled
[docs]def epobjects2dct(epobjects): """convert epobjects to dcts for display""" dct = {} for i, epmunch in enumerate(epobjects): eppykey = epmunch.eppykey eppyname = epmunch.eppyname displaymunch = _epmunch2displaymunch(epmunch) displaydict = displaymunch.toDict() for k1, val1 in displaydict.items(): pass dct.setdefault(eppykey, dict()) dct[eppykey].update(val1) return dct
[docs]def epobjects2html(epobjects): """convert epobjects to html""" dct = epobjects2dct(epobjects) html = json2html.json2html.convert(json=dct) return html
[docs]def epobjects2ipythonhtml(epobjects, fname="./eppy3000_deletethis.html"): """display the epobjects as HTML tables in jupyter notebook""" html = epobjects2html(epobjects) open(fname, "w").write(html) lines = epobjectslines(epobjects) height = 30 * lines + 50 try: return IFrame(src=fname, width=800, height=height) except NameError as e: raise JupyterNotInstalled