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