From 2985e3c3f7d40b7ab3a303dd45e86d69f35e9772 Mon Sep 17 00:00:00 2001
From: AndiMajore <andi.majore@googlemail.com>
Date: Fri, 8 Jul 2022 18:07:57 +0200
Subject: [PATCH] fixed network export

---
 drugstone/views.py           | 30 ++++++++++++++++++++----------
 scripts/docker-entrypoint.sh |  2 +-
 2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/drugstone/views.py b/drugstone/views.py
index fa5ea27..b4351d6 100755
--- a/drugstone/views.py
+++ b/drugstone/views.py
@@ -20,7 +20,8 @@ from drugstone import models
 from drugstone import serializers
 
 from drugstone.models import Protein, Task, ProteinDrugInteraction, \
-    Drug, Tissue, ExpressionLevel, Network, ProteinDisorderAssociation, DrugDisorderIndication, Disorder, DrDiDataset, PDIDataset, PDisDataset, PPIDataset
+    Drug, Tissue, ExpressionLevel, Network, ProteinDisorderAssociation, DrugDisorderIndication, Disorder, DrDiDataset, \
+    PDIDataset, PDisDataset, PPIDataset
 from drugstone.serializers import ProteinSerializer, TaskSerializer, \
     ProteinDrugInteractionSerializer, DrugSerializer, TaskStatusSerializer, TissueSerializer, NetworkSerializer, \
     ProteinDisorderAssociationSerializer, DisorderSerializer, DrugDisorderIndicationSerializer
@@ -408,12 +409,15 @@ def result_view(request) -> Response:
         edge['to'] = nodes_mapped_dict[edge['to']][node_name_attribute] if edge['to'] in nodes_mapped_dict else edge[
             'to']
     if 'autofill_edges' in parameters['config'] and parameters['config']['autofill_edges']:
-        proteins = set(map(lambda n:n[node_name_attribute][1:],filter(lambda n: node_name_attribute in n,parameters['input_network']['nodes'])))
-        dataset = 'STRING' if 'interaction_protein_protein' not in parameters['config'] else parameters['config']['interaction_protein_protein']
+        proteins = set(map(lambda n: n[node_name_attribute][1:],
+                           filter(lambda n: node_name_attribute in n, parameters['input_network']['nodes'])))
+        dataset = 'STRING' if 'interaction_protein_protein' not in parameters['config'] else parameters['config'][
+            'interaction_protein_protein']
         dataset_object = models.PPIDataset.objects.filter(name__iexact=dataset).last()
         interaction_objects = models.ProteinProteinInteraction.objects.filter(
             Q(ppi_dataset=dataset_object) & Q(from_protein__in=proteins) & Q(to_protein__in=proteins))
-        auto_edges = list(map(lambda n: {"from": f'p{n.from_protein_id}', "to":f'p{n.to_protein_id}'} ,interaction_objects))
+        auto_edges = list(
+            map(lambda n: {"from": f'p{n.from_protein_id}', "to": f'p{n.to_protein_id}'}, interaction_objects))
         edges.extend(auto_edges)
     result['network']['edges'].extend(edges)
 
@@ -471,7 +475,7 @@ def graph_export(request) -> Response:
     edges = request.data.get('edges', [])
     fmt = request.data.get('fmt', 'graphml')
     G = nx.Graph()
-
+    node_map = dict()
     for node in nodes:
         # drugstone_id is not interesting outside of drugstone
         # try:
@@ -487,6 +491,10 @@ def graph_export(request) -> Response:
                 node[key] = ''
         try:
             node_name = node['label']
+            if 'drugstone_id' in node:
+                node_map[node['drugstone_id']] = node['label']
+            elif 'id' in node:
+                node_map[node['id']] = node['label']
         except KeyError:
             node_name = node['drugstone_id']
         G.add_node(node_name, **node)
@@ -498,9 +506,11 @@ def graph_export(request) -> Response:
                 e[key] = json.dumps(e[key])
             elif e[key] is None:
                 e[key] = ''
-        u_of_edgece = e.pop('from')
+        u_of_edge = e.pop('from')
+        u_of_edge = u_of_edge if u_of_edge not in node_map else node_map[u_of_edge]
         v_of_edge = e.pop('to')
-        G.add_edge(u_of_edgece, v_of_edge, **e)
+        v_of_edge = node_map[v_of_edge] if v_of_edge in node_map else v_of_edge
+        G.add_edge(u_of_edge, v_of_edge, **e)
 
     if fmt == 'graphml':
         data = nx.generate_graphml(G)
@@ -529,7 +539,7 @@ def adjacent_disorders(request) -> Response:
     data = request.data
     if 'proteins' in data:
         drugstone_ids = data.get('proteins', [])
-        pdi_dataset = PDisDataset.objects.filter(name__iexact=data.get('dataset','DisGeNET')).last()
+        pdi_dataset = PDisDataset.objects.filter(name__iexact=data.get('dataset', 'DisGeNET')).last()
         # find adjacent drugs by looking at drug-protein edges
         pdis_objects = ProteinDisorderAssociation.objects.filter(protein__id__in=drugstone_ids,
                                                                  pdis_dataset=pdi_dataset)
@@ -539,7 +549,7 @@ def adjacent_disorders(request) -> Response:
         disorders = DisorderSerializer(many=True).to_representation(disorders)
     elif 'drugs' in data:
         drugstone_ids = data.get('drugs', [])
-        drdi_dataset = DrDiDataset.objects.filter(name__iexact=data.get('dataset','DrugBank')).last()
+        drdi_dataset = DrDiDataset.objects.filter(name__iexact=data.get('dataset', 'DrugBank')).last()
         # find adjacent drugs by looking at drug-protein edges
         drdi_objects = DrugDisorderIndication.objects.filter(drug__id__in=drugstone_ids,
                                                              drdi_dataset=drdi_dataset)
@@ -565,7 +575,7 @@ def adjacent_drugs(request) -> Response:
     """
     data = request.data
     drugstone_ids = data.get('proteins', [])
-    pdi_dataset = PDIDataset.objects.filter(name__iexact=data.get('pdi_dataset','NeDRex')).last()
+    pdi_dataset = PDIDataset.objects.filter(name__iexact=data.get('pdi_dataset', 'NeDRex')).last()
     # find adjacent drugs by looking at drug-protein edges
     pdi_objects = ProteinDrugInteraction.objects.filter(protein__id__in=drugstone_ids, pdi_dataset=pdi_dataset)
     drugs = {e.drug for e in pdi_objects}
diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh
index 0245a23..db7a2d3 100755
--- a/scripts/docker-entrypoint.sh
+++ b/scripts/docker-entrypoint.sh
@@ -4,7 +4,7 @@ python3 manage.py makemigrations drugstone
 python3 manage.py migrate
 python3 manage.py createfixtures
 python3 manage.py cleanuptasks
-python3 manage.py populate_db --update -a
+#python3 manage.py populate_db --update -a
 #python3 manage.py make_graphs
 
 /usr/bin/supervisord -c "/etc/supervisor/conf.d/supervisord.conf"
-- 
GitLab