Ejemplo n.º 1
0
def get_kgml(username):
    """
    main function to visualize network
    return json encoded graph
    """

    pathway_id = request.args.get('pathway_id')
    if pathway_id is None:
        return json.dumps([])

    analysis_id = request.args.get('analysis_id')
    analysis = Analysis.query.filter(Analysis.id == analysis_id).first_or_404()

    # retrieve file data from s3
    filename = '{}/{}/{}'.format(username, analysis.project_id, analysis_id)
    try:
        resp = requests.get(S3_URL + filename)
    except ConnectionError:
        return render_template('errors/server_error.html', form=LoginForm())
    # return error code if request failed
    if resp.status_code != 200:
        return render_template('errors/server_error.html', form=LoginForm())

    # load fba analysis results
    results = json.loads(resp.text)

    # get the sbml model
    model = analysis.model.get_cobra_model()
    if model is None:
        return render_template('errors/server_error.html')

    if pathway_id == 'whole':
        # whole drawing requested
        cytoscape_formatted = _build_genome_scale_network(model, results)

    else:
        kegg_model = Kegg.get_kgml_obj(pathway_id)

        if model is None or kegg_model is None:
            return render_template('errors/page_not_found.html', form=LoginForm())

        kegg_model_name = request.args.get('pathway_name')
        cytoscape_formatted = build_kegg_network_mixed(kegg_model,
                                                       kegg_model_name,
                                                       model,
                                                       results)
    return json.dumps(cytoscape_formatted)