def test_html_writer_dct(self): """ Makes XDSMjs input file. Data is in a dictionary """ filename = 'xdsmjs2' # this name is needed for XDSMjs data = { "nodes": [{"id": "Opt", "name": "Optimization", "type": "optimization"}, {"id": "MDA", "name": "MDA", "type": "mda"}, {"id": "DA1", "name": "Analysis 1"}, {"id": "DA2", "name": "Analysis 2"}, {"id": "DA3", "name": "Analysis 3"}, {"id": "Func", "name": "Functions"} ], "edges": [{"from": "Opt", "to": "DA1", "name": "x_0,x_1"}, {"from": "DA1", "to": "DA3", "name": "x_share"}, {"from": "DA3", "to": "DA1", "name": "y_1^2"}, {"from": "MDA", "to": "DA1", "name": "x_2"}, {"from": "Func", "to": "Opt", "name": "f,c"}, {"from": "_U_", "to": "DA1", "name": "x_0"}, {"from": "DA3", "to": "_U_", "name": "y_0"} ], "workflow": ["Opt", ["MDA", "DA1", "DA2", "DA3"], "Func"] } outfile = '.'.join([filename, 'html']) write_html(outfile=outfile, source_data=data) self.assertTrue(os.path.isfile(outfile))
def test_html_writer_str(self): """ Makes XDSMjs input file. Data is a string. """ filename = 'xdsmjs4' # this name is needed for XDSMjs data = ("{'nodes': [{'type': 'optimization', 'id': 'Opt', 'name': 'Optimization'}, " "{'type': 'mda', 'id': 'MDA', 'name': 'MDA'}, {'id': 'DA1', 'name': 'Analysis 1'}, " "{'id': 'DA2', 'name': 'Analysis 2'}, {'id': 'DA3', 'name': 'Analysis 3'}, " "{'id': 'Func', 'name': 'Functions'}], " "'edges': [{'to': 'DA1', 'from': 'Opt', 'name': 'x_0,x_1'}, " "{'to': 'DA3', 'from': 'DA1', 'name': 'x_share'}, " "{'to': 'DA1', 'from': 'DA3', 'name': 'y_1^2'}, " "{'to': 'DA1', 'from': 'MDA', 'name': 'x_2'}, " "{'to': 'Opt', 'from': 'Func', 'name': 'f,c'}, " "{'to': 'DA1', 'from': '_U_', 'name': 'x_0'}, " "{'to': '_U_', 'from': 'DA3', 'name': 'y_0'}], " "'workflow': ['Opt', ['MDA', 'DA1', 'DA2', 'DA3'], 'Func']}") outfile = '.'.join([filename, 'html']) write_html(outfile=outfile, source_data=data) self.assertTrue(os.path.isfile(outfile))
def write(self, filename='xdsmjs', embed_data=True, **kwargs): """ Writes HTML output file, and depending on the value of "embed_data" a JSON file with the data. If "embed_data" is true, a single standalone HTML file will be generated, which includes the data of the XDSM diagram. Parameters ---------- filename : str, optional Output file name (without extension). Defaults to "xdsmjs". embed_data : bool, optional Embed XDSM data into the HTML file. If False, a JSON file will be also written. Defaults to True. """ data = self.collect_data() html_filename = '.'.join([filename, 'html']) embeddable = kwargs.pop('embeddable', False) if embed_data: # Write HTML file write_html(outfile=html_filename, source_data=data, embeddable=embeddable) else: json_filename = '.'.join([filename, 'json']) with open(json_filename, 'w') as f: json.dump(data, f) # Write HTML file write_html(outfile=html_filename, data_file=json_filename, embeddable=embeddable) print('XDSM output file written to: {}'.format(html_filename))