Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
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))
Exemplo n.º 4
0
 def test_slushy_graphml(self):
     handle, path = tempfile.mkstemp()
     to_graphml(self.slushy_graph, path)
     os.close(handle)
     os.remove(path)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
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')