def test_slushy_graphml(self): handle, path = tempfile.mkstemp() with open(path, 'wb') as f: to_graphml(self.slushy_graph, f) os.close(handle) os.remove(path)
def export_graph(graph, format=None): """Convert PyBEL graph to a different format. :param PyBEL graph graph: graph :param format: desire format :return: graph representation in different format """ if format is None or format == 'json': data = to_json_custom(graph) return jsonify(data) elif format == 'bytes': data = BytesIO(to_bytes(graph)) return send_file(data, mimetype='application/octet-stream', as_attachment=True, attachment_filename='graph.gpickle') elif format == 'bel': serialize_authors(graph) data = '\n'.join(to_bel_lines(graph)) return Response(data, mimetype='text/plain') elif format == 'graphml': bio = BytesIO() to_graphml(graph, bio) bio.seek(0) return send_file(bio, mimetype='text/xml', attachment_filename='graph.graphml', as_attachment=True) elif format == 'csv': bio = StringIO() to_csv(graph, bio) bio.seek(0) data = BytesIO(bio.read().encode('utf-8')) return send_file(data, mimetype="text/tab-separated-values", attachment_filename="graph.tsv", as_attachment=True) abort(500, '{} is not a valid format'.format(format))
def serve_network(graph, serve_format=None): """A helper function to serialize a graph and download as a file""" if serve_format is None or serve_format == 'json': data = to_json_custom(graph) return jsonify(data) if serve_format == 'cx': data = to_cx(graph) return jsonify(data) if serve_format == 'bytes': data = to_bytes(graph) return send_file(data, mimetype='application/octet-stream', as_attachment=True, attachment_filename='graph.gpickle') if serve_format == 'bel': serialize_authors(graph) data = '\n'.join(to_bel_lines(graph)) return Response(data, mimetype='text/plain') if serve_format == 'graphml': bio = BytesIO() to_graphml(graph, bio) bio.seek(0) data = StringIO(bio.read().decode('utf-8')) return send_file(data, mimetype='text/xml', attachment_filename='graph.graphml', as_attachment=True) if serve_format == 'csv': bio = BytesIO() to_csv(graph, bio) bio.seek(0) data = StringIO(bio.read().decode('utf-8')) return send_file(data, attachment_filename="graph.tsv", as_attachment=True) raise TypeError('{} is not a valid format'.format(serve_format))
def test_slushy_graphml(self): handle, path = tempfile.mkstemp() to_graphml(self.slushy_graph, path) os.close(handle) os.remove(path)
def get_graph( self, directory: Optional[str] = None, use_cached: bool = True, use_tqdm: bool = True, ) -> BELGraph: """Get the graph from all sources.""" if directory is None: if self.directory is None: raise ValueError directory = self.directory pickle_path = os.path.join(directory, f'{self.name}.bel.pickle') if use_cached and os.path.exists(pickle_path): return pybel.from_pickle(pickle_path) rv = union(self.get_graphs(use_tqdm=use_tqdm)) self.metadata.update(rv) pybel.to_pickle(rv, pickle_path) nodelink_path = os.path.join(directory, f'{self.name}.bel.nodelink.json') pybel.to_json_path(rv, nodelink_path) sif_path = os.path.join(directory, f'{self.name}.bel.sif') pybel.to_sif_path(rv, sif_path) gsea_path = os.path.join(directory, f'{self.name}.bel.gmt') pybel.to_gsea_path(rv, gsea_path) graphml_path = os.path.join(directory, f'{self.name}.bel.graphml') pybel.to_graphml(rv, graphml_path) try: statements = pybel.to_indra_statements(rv) except ImportError: pass else: indra_path = os.path.join(directory, f'{self.name}.indra.pickle') with open(indra_path, 'wb') as file: pickle.dump(statements, file) try: from pybel_cx import to_cx_file except ImportError: pass else: cx_path = os.path.join(directory, f'{self.name}.bel.cx.json') with open(cx_path, 'w') as file: to_cx_file(rv, file) try: from pybel_tools.assembler.html import to_html except ImportError: pass else: html_path = os.path.join(directory, 'index.html') with open(html_path, 'w') as file: print(to_html(rv), file=file) return rv
def serve_network(graph: BELGraph, serve_format: Optional[str] = None) -> Response: # noqa:C901 """Help serialize a graph and download as a file.""" if serve_format is None: return jsonify(to_json_custom(graph)) elif serve_format in {'nl', 'nodelink', 'json'}: return jsonify(to_nodelink(graph)) elif serve_format == 'nodelink-umbrella': return jsonify(to_umbrella_nodelink(graph)) elif serve_format == 'graphdati': return jsonify(to_graphdati(graph)) elif serve_format == 'cx': return jsonify(to_cx(graph)) elif serve_format == 'jgif': return jsonify(to_jgif(graph)) elif serve_format == 'indra': return jsonify(to_indra_statements_json(graph)) elif serve_format == 'bytes': data = BytesIO(to_bytes(graph)) return send_file( data, mimetype='application/octet-stream', as_attachment=True, attachment_filename=f'{graph.name}.bel.pickle', ) elif serve_format == 'bel': data = '\n'.join(to_bel_script_lines(graph)) return Response(data, mimetype='text/plain') elif serve_format == 'graphml': bio = BytesIO() to_graphml(graph, bio) bio.seek(0) return send_file( bio, mimetype='text/xml', attachment_filename=f'{graph.name}.bel.graphml', as_attachment=True, ) elif serve_format == 'graphml-umbrella': bio = BytesIO() to_graphml(graph, bio, schema='umbrella') bio.seek(0) return send_file( bio, mimetype='text/xml', attachment_filename=f'{graph.name}.bel.graphml', as_attachment=True, ) elif serve_format == 'sif': bio = StringIO() to_sif(graph, bio) bio.seek(0) data = BytesIO(bio.read().encode('utf-8')) return send_file( data, attachment_filename=f"{graph.name}.bel.sif", as_attachment=True, ) elif serve_format == 'csv': bio = StringIO() to_csv(graph, bio) bio.seek(0) data = BytesIO(bio.read().encode('utf-8')) return send_file( data, mimetype="text/tab-separated-values", attachment_filename=f"{graph.name}.bel.tsv", as_attachment=True, ) elif serve_format == 'gsea': bio = StringIO() to_gsea(graph, bio) bio.seek(0) data = BytesIO(bio.read().encode('utf-8')) return send_file( data, attachment_filename=f"{graph.name}.grp", as_attachment=True, ) elif serve_format == 'citations': bio = StringIO() for pubmed_identifier in sorted(get_pubmed_identifiers(graph)): print(pubmed_identifier, file=bio) bio.seek(0) data = BytesIO(bio.read().encode('utf-8')) return send_file( data, mimetype="text/tab-separated-values", attachment_filename=f"{graph.name}-citations.txt", as_attachment=True, ) raise TypeError(f'{serve_format} is not a valid format')