Пример #1
0
def get_top_biocatdb_hits():
    reaction_node = request.form['reaction_node']
    network_id = request.form['network_id']
    substrates = json.loads(request.form['parents'])
    products = json.loads(request.form['children'])
    label = request.form['label']
    enzyme = request.form['enzyme']

    reaction_smiles = f"{substrates[0]}"
    if len(substrates) > 1:
        reaction_smiles += f".{substrates[1]}"
    reaction_smiles += f">>{products[0]}"
    query_reaction_svg = smiles_rxn_to_svg(reaction_smiles, rxnSize=(600, 100))

    data = json.loads(current_app.redis.get(network_id))
    attr_dict = json.loads(data['attr_dict'])

    if enzyme == 'selected_enzyme':
        enzyme = attr_dict[reaction_node]['selected_enzyme']
    node_info = attr_dict[reaction_node]['enzyme_info'][enzyme]

    if node_info is False:
        print('No similar reactions found')
        result = {
            'node_info': '',
            'product_keys': [],
            'query_reaction_svg': query_reaction_svg,
            'reaction_name': label,
            'enzyme_name': enzyme
        }
        return jsonify(result=result)

    else:
        print(f'Similar reactions found for {reaction_node}')
        for product_key in node_info:
            node_info[product_key]['formatted_info'] = format_enzyme_info(
                node_info[product_key])

        for product_key in node_info:
            try:
                node_info[product_key]['reaction_svg'] = smiles_rxn_to_svg(
                    node_info[product_key]['smiles_reaction'],
                    rxnSize=(400, 75))
            except Exception as e:
                print(str(e))
                node_info[product_key]['reaction_svg'] = ''

        result = {
            'node_info': node_info,
            'product_keys': sorted(list(node_info.keys()), reverse=True),
            'query_reaction_svg': query_reaction_svg,
            'reaction_name': label,
            'enzyme_name': enzyme
        }

        return jsonify(result=result)
Пример #2
0
def get_reaction_svg(s1, s2, p):
    if s2 == "":
        smi_rxn = f"{s1}>>{p}"
    else:
        smi_rxn = f"{s1}.{s2}>>{p}"

    svg = smiles_rxn_to_svg(smi_rxn, rxnSize=(500,200))
    return svg
Пример #3
0
def generate_rxn_svg(activity, rxnSize=(300, 70)):
    reaction_smiles = ""
    if activity.substrate_1_smiles is not None:
        reaction_smiles += f"{activity.substrate_1_smiles}"
    if activity.substrate_2_smiles is not None:
        reaction_smiles += f".{activity.substrate_2_smiles}>>"
    if activity.product_1_smiles is not None:
        reaction_smiles += f"{activity.product_1_smiles}"

    reaction_svg = smiles_rxn_to_svg(reaction_smiles, rxnSize=rxnSize)
    return reaction_svg
Пример #4
0
def load_reaction_issue_info():
    substrates = json.loads(request.form['parents'])
    products = json.loads(request.form['children'])

    reaction_smiles = f"{substrates[0]}"
    if len(substrates) > 1:
        reaction_smiles += f".{substrates[1]}"
    reaction_smiles += f">>{products[0]}"
    query_reaction_svg = smiles_rxn_to_svg(reaction_smiles, rxnSize=(600, 150))

    result = {'query_reaction_svg': query_reaction_svg}
    return jsonify(result=result)
Пример #5
0
def get_reaction_svg():
    substrates = json.loads(request.form['parents'])
    products = json.loads(request.form['children'])
    label = request.form['label']

    reaction_smiles = f"{substrates[0]}"
    if len(substrates) > 1:
        reaction_smiles += f".{substrates[1]}"
    reaction_smiles += f">>{products[0]}"
    query_reaction_svg = smiles_rxn_to_svg(reaction_smiles, rxnSize=(600, 100))

    result = {'query_reaction_svg': query_reaction_svg, 'reaction_name': label}
    return jsonify(result=result)
Пример #6
0
def reaction_issue(issue_id):
    if current_user.is_authenticated:
        user = user_datastore.get_user(current_user.id)
    else:
        user = None
    issue = Issue.objects(id=issue_id).select_related()[0]

    reaction_svg = smiles_rxn_to_svg(issue.issue_reaction_smiles,
                                     rxnSize=(600, 150))
    if issue.public == True:
        public = 'Public'
    else:
        public = 'Not public'

    num_issues = len(
        Issue.objects(db.Q(reaction=issue.reaction) & db.Q(status='Open')))

    comments = []
    for comment in issue.comments:
        can_edit = False
        can_delete = False
        if current_user.has_role('rxn_rules_admin') or comment.owner == user:
            can_edit = True
            can_delete = True

        new_comment = {
            'user':
            f"{comment.owner.first_name} {comment.owner.last_name}, {comment.owner.affiliation}",
            'date': comment.date.strftime("%d/%m/%Y, %H:%M:%S"),
            'comment': comment.text,
            'comment_id': str(comment.id),
            'can_edit': can_edit,
            'can_delete': can_delete
        }
        comments.append(new_comment)

    return render_template(
        'reaction_issues/issue_page.html',
        reaction_name=issue.reaction.name,
        reaction_svg=reaction_svg,
        reaction_smiles=issue.issue_reaction_smiles,
        raised_by=
        f"{issue.raised_by.first_name} {issue.raised_by.last_name}, {issue.raised_by.affiliation}",
        date=issue.date.strftime("%d/%m/%Y"),
        status=issue.status,
        public=public,
        num_issues=num_issues,
        issue_id=str(issue.id),
        comments=comments)
Пример #7
0
def submit_reaction_issue():
    substrates = json.loads(request.form['parents'])
    products = json.loads(request.form['children'])
    reaction_name = request.form['reaction']
    comment = request.form['comment']
    public = bool(strtobool(request.form['public']))

    if len(Reaction.objects(name=reaction_name)) == 0:
        result = {
            'status': 'danger',
            'msg': 'Can not raise an issue for a non retrobiocat reaction',
            'issues': []
        }
        return jsonify(result=result)

    reaction_smiles = f"{substrates[0]}"
    if len(substrates) > 1:
        reaction_smiles += f".{substrates[1]}"
    reaction_smiles += f">>{products[0]}"
    query_reaction_svg = smiles_rxn_to_svg(reaction_smiles, rxnSize=(300, 70))

    user = user_datastore.get_user(current_user.id)

    reaction = Reaction.objects(name=reaction_name)[0]
    comment_obj = Comment(owner=user, text=comment)
    comment_obj.save()

    issue = Issue(reaction=reaction,
                  issue_reaction_smiles=reaction_smiles,
                  issue_reaction_svg=query_reaction_svg,
                  raised_by=user,
                  status='Open',
                  comments=[comment_obj],
                  public=public)
    issue.save()

    print(f"Issue saved for {issue.reaction}")

    result = {'status': 'success', 'msg': 'Issue raised', 'issues': []}
    return jsonify(result=result)