From 2932cfbf5fea44ca3f400e7d98d26a3e0b9879f8 Mon Sep 17 00:00:00 2001
From: AndiMajore <andi.majore@googlemail.com>
Date: Fri, 4 Nov 2022 21:51:48 +0100
Subject: [PATCH] try to fix tissue expression route

Former-commit-id: 5ab775066d99450d2c685c41f6bb187b11f02033
---
 drugstone/urls.py  |  6 +--
 drugstone/views.py | 93 +++++++++++++++++++++-------------------------
 2 files changed, 46 insertions(+), 53 deletions(-)

diff --git a/drugstone/urls.py b/drugstone/urls.py
index 7e0d16a..a24a252 100755
--- a/drugstone/urls.py
+++ b/drugstone/urls.py
@@ -17,9 +17,9 @@ from django.contrib import admin
 from django.urls import path
 
 from drugstone.views import map_nodes, tasks_view, result_view, \
-    graph_export, TissueView, TissueExpressionView, query_tissue_proteins, TaskView, \
+    graph_export, TissueView, query_tissue_proteins, TaskView, \
     adjacent_drugs, adjacent_disorders, fetch_edges, create_network, load_network, get_license, get_datasets, \
-    get_max_tissue_expression
+    get_max_tissue_expression, get_tissue_expression
 
 # cache time is 6 hours
 urlpatterns = [
@@ -33,7 +33,7 @@ urlpatterns = [
     path('query_tissue_proteins/', query_tissue_proteins),
     path('adjacent_drugs/', adjacent_drugs),
     path('adjacent_disorders/', adjacent_disorders),
-    path('tissue_expression/', TissueExpressionView.as_view()),
+    path('tissue_expression/', get_tissue_expression),
     path('tissue_max_expression/', get_max_tissue_expression),
     path('tissues/', TissueView.as_view()),
     path('admin/', admin.site.urls),
diff --git a/drugstone/views.py b/drugstone/views.py
index 7dc744d..8957ffe 100755
--- a/drugstone/views.py
+++ b/drugstone/views.py
@@ -653,56 +653,49 @@ class TissueView(APIView):
         return Response(TissueSerializer(many=True).to_representation(tissues))
 
 
-class TissueExpressionView(APIView):
-    """
-    Expression of host proteins in tissues.
-    """
-
-    def get(self, request) -> Response:
-        return self.post(request)
+@api_view(['POST', 'GET'])
+def get_tissue_expression(request) -> Response:
+    tissue = Tissue.objects.get(id=request.query_params.get('tissue'))
 
-    def post(self, request) -> Response:
-        tissue = Tissue.objects.get(id=request.query_params.get('tissue'))
-
-        if request.query_params.get('proteins'):
-            ids = json.loads(request.query_params.get('proteins'))
-            proteins = list(Protein.objects.filter(id__in=ids).all())
-        elif request.query_params.get('token'):
-            proteins = []
-            task = Task.objects.get(token=request.query_params['token'])
-            result = task_result(task)
-            network = result['network']
-            node_attributes = result.get('node_attributes')
-            if not node_attributes:
-                node_attributes = {}
-            node_types = node_attributes.get('node_types')
-            if not node_types:
-                node_types = {}
-            parameters = json.loads(task.parameters)
-            seeds = parameters['seeds']
-            nodes = network['nodes']
-            for node in nodes + seeds:
-                node_type = node_types.get(node)
-                details = None
-                if node_type == 'protein':
-                    if details:
-                        proteins.append(details)
-                    else:
-                        try:
-                            prot = Protein.objects.get(uniprot_code=node)
-                            if prot not in proteins:
-                                proteins.append(Protein.objects.get(uniprot_code=node))
-                        except Protein.DoesNotExist:
-                            pass
-
-        pt_expressions = {}
-
-        for protein in proteins:
-            try:
-                expression_level = ExpressionLevel.objects.get(protein=protein, tissue=tissue)
-                pt_expressions[
-                    ProteinSerializer().to_representation(protein)['drugstone_id']] = expression_level.expression_level
-            except ExpressionLevel.DoesNotExist:
-                pt_expressions[ProteinSerializer().to_representation(protein)['drugstone_id']] = None
+    if request.query_params.get('proteins'):
+        ids = json.loads(request.query_params.get('proteins'))
+        proteins = list(Protein.objects.filter(id__in=ids).all())
+    elif request.query_params.get('token'):
+        proteins = []
+        task = Task.objects.get(token=request.query_params['token'])
+        result = task_result(task)
+        network = result['network']
+        node_attributes = result.get('node_attributes')
+        if not node_attributes:
+            node_attributes = {}
+        node_types = node_attributes.get('node_types')
+        if not node_types:
+            node_types = {}
+        parameters = json.loads(task.parameters)
+        seeds = parameters['seeds']
+        nodes = network['nodes']
+        for node in nodes + seeds:
+            node_type = node_types.get(node)
+            details = None
+            if node_type == 'protein':
+                if details:
+                    proteins.append(details)
+                else:
+                    try:
+                        prot = Protein.objects.get(uniprot_code=node)
+                        if prot not in proteins:
+                            proteins.append(Protein.objects.get(uniprot_code=node))
+                    except Protein.DoesNotExist:
+                        pass
+
+    pt_expressions = {}
+
+    for protein in proteins:
+        try:
+            expression_level = ExpressionLevel.objects.get(protein=protein, tissue=tissue)
+            pt_expressions[
+                ProteinSerializer().to_representation(protein)['drugstone_id']] = expression_level.expression_level
+        except ExpressionLevel.DoesNotExist:
+            pt_expressions[ProteinSerializer().to_representation(protein)['drugstone_id']] = None
 
         return Response(pt_expressions)
-- 
GitLab