Skip to content
Snippets Groups Projects
Commit 0365b931 authored by AndiMajore's avatar AndiMajore
Browse files

basic adjacency calls checked

Former-commit-id: f339fe90455c5a08947506de7d39d6137eee031f [formerly 0aace5168588fbcc985194394deebd1e92d5f442]
Former-commit-id: 86a31f5b29f95ef9a3a35f54f4ae33b12172504a
parent 178bddde
No related branches found
No related tags found
No related merge requests found
...@@ -240,12 +240,14 @@ class DataPopulator: ...@@ -240,12 +240,14 @@ class DataPopulator:
# try fetching protein # try fetching protein
drug = self.cache.get_drug_by_drugbank(row['drugbank_id']) drug = self.cache.get_drug_by_drugbank(row['drugbank_id'])
except KeyError: except KeyError:
print(f"Did not find drug: {row['drugbank_id']}")
# continue if not found # continue if not found
continue continue
try: try:
# try fetching drug # try fetching drug
disorder = self.cache.get_disorder_by_mondo(row['mondo_id']) disorder = self.cache.get_disorder_by_mondo(row['mondo_id'])
except KeyError: except KeyError:
print(f"Did not find drug: {row['mondo_id']}")
# continue if not found # continue if not found
continue continue
if not update or (self.cache.is_new_drug(drug) or self.cache.is_new_disease(disorder)): if not update or (self.cache.is_new_drug(drug) or self.cache.is_new_disease(disorder)):
......
...@@ -16,7 +16,7 @@ Including another URLconf ...@@ -16,7 +16,7 @@ Including another URLconf
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from drugstone.views import ProteinDrugInteractionView, map_nodes, tasks_view, result_view, \ from drugstone.views import map_nodes, tasks_view, result_view, \
graph_export, query_proteins, TissueView, TissueExpressionView, query_tissue_proteins, TaskView, \ graph_export, query_proteins, TissueView, TissueExpressionView, query_tissue_proteins, TaskView, \
adjacent_drugs, adjacent_disorders, fetch_edges, create_network, load_network adjacent_drugs, adjacent_disorders, fetch_edges, create_network, load_network
...@@ -33,7 +33,7 @@ urlpatterns = [ ...@@ -33,7 +33,7 @@ urlpatterns = [
path('query_tissue_proteins/', query_tissue_proteins), path('query_tissue_proteins/', query_tissue_proteins),
path('adjacent_drugs/', adjacent_drugs), path('adjacent_drugs/', adjacent_drugs),
path('adjacent_disorders/', adjacent_disorders), path('adjacent_disorders/', adjacent_disorders),
path('drug_interactions/', ProteinDrugInteractionView.as_view()), # path('drug_interactions/', ProteinDrugInteractionView.as_view()),
path('tissue_expression/', TissueExpressionView.as_view()), path('tissue_expression/', TissueExpressionView.as_view()),
path('tissues/', TissueView.as_view()), path('tissues/', TissueView.as_view()),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
......
...@@ -20,7 +20,7 @@ from drugstone import models ...@@ -20,7 +20,7 @@ from drugstone import models
from drugstone import serializers from drugstone import serializers
from drugstone.models import Protein, Task, ProteinDrugInteraction, \ from drugstone.models import Protein, Task, ProteinDrugInteraction, \
Drug, Tissue, ExpressionLevel, Network, ProteinDisorderAssociation, DrugDisorderIndication, Disorder Drug, Tissue, ExpressionLevel, Network, ProteinDisorderAssociation, DrugDisorderIndication, Disorder, DrDiDataset, PDIDataset, PDisDataset, PPIDataset
from drugstone.serializers import ProteinSerializer, TaskSerializer, \ from drugstone.serializers import ProteinSerializer, TaskSerializer, \
ProteinDrugInteractionSerializer, DrugSerializer, TaskStatusSerializer, TissueSerializer, NetworkSerializer, \ ProteinDrugInteractionSerializer, DrugSerializer, TaskStatusSerializer, TissueSerializer, NetworkSerializer, \
ProteinDisorderAssociationSerializer, DisorderSerializer, DrugDisorderIndicationSerializer ProteinDisorderAssociationSerializer, DisorderSerializer, DrugDisorderIndicationSerializer
...@@ -71,60 +71,60 @@ from drugstone.backend_tasks import start_task, refresh_from_redis, task_stats, ...@@ -71,60 +71,60 @@ from drugstone.backend_tasks import start_task, refresh_from_redis, task_stats,
# return Response(network) # return Response(network)
class ProteinDrugInteractionView(APIView): # class ProteinDrugInteractionView(APIView):
""" # """
Protein-Drug-Interaction Network # Protein-Drug-Interaction Network
""" # """
#
def get(self, request) -> Response: # def get(self, request) -> Response:
if request.query_params.get('proteins'): # if request.query_params.get('proteins'):
print("getting drugs for proteins") # print("getting drugs for proteins")
protein_ac_list = json.loads(request.query_params.get('proteins')) # protein_ac_list = json.loads(request.query_params.get('proteins'))
proteins = list(Protein.objects.filter(uniprot_code__in=protein_ac_list).all()) # proteins = list(Protein.objects.filter(uniprot_code__in=protein_ac_list).all())
else: # else:
proteins = [] # proteins = []
task = Task.objects.get(token=request.query_params['token']) # task = Task.objects.get(token=request.query_params['token'])
result = task_result(task) # result = task_result(task)
network = result['network'] # network = result['network']
node_attributes = result.get('node_attributes') # node_attributes = result.get('node_attributes')
if not node_attributes: # if not node_attributes:
node_attributes = {} # node_attributes = {}
node_types = node_attributes.get('node_types') # node_types = node_attributes.get('node_types')
if not node_types: # if not node_types:
node_types = {} # node_types = {}
nodes = network['nodes'] # nodes = network['nodes']
for node in nodes: # for node in nodes:
node_type = node_types.get(node) # node_type = node_types.get(node)
details = None # details = None
# if not node_type: # # if not node_type:
# print('we should not see this 1') # # print('we should not see this 1')
# node_type, details = infer_node_type_and_details(node) # # node_type, details = infer_node_type_and_details(node)
if node_type == 'protein': # if node_type == 'protein':
if details: # if details:
proteins.append(details) # proteins.append(details)
else: # else:
try: # try:
proteins.append(Protein.objects.get(uniprot_code=node)) # proteins.append(Protein.objects.get(uniprot_code=node))
except Protein.DoesNotExist: # except Protein.DoesNotExist:
pass # pass
#
pd_interactions = [] # pd_interactions = []
drugs = [] # drugs = []
#
for protein in proteins: # for protein in proteins:
pdi_object_list = ProteinDrugInteraction.objects.filter(protein=protein) # pdi_object_list = ProteinDrugInteraction.objects.filter(protein=protein)
for pdi_object in pdi_object_list: # for pdi_object in pdi_object_list:
pd_interactions.append(pdi_object) # pd_interactions.append(pdi_object)
drug = pdi_object.drug # drug = pdi_object.drug
if drug not in drugs: # if drug not in drugs:
drugs.append(drug) # drugs.append(drug)
#
protein_drug_edges = { # protein_drug_edges = {
'proteins': ProteinSerializer(many=True).to_representation(proteins), # 'proteins': ProteinSerializer(many=True).to_representation(proteins),
'drugs': DrugSerializer(many=True).to_representation(drugs), # 'drugs': DrugSerializer(many=True).to_representation(drugs),
'edges': ProteinDrugInteractionSerializer(many=True).to_representation(pd_interactions), # 'edges': ProteinDrugInteractionSerializer(many=True).to_representation(pd_interactions),
} # }
return Response(protein_drug_edges) # return Response(protein_drug_edges)
class TaskView(APIView): class TaskView(APIView):
...@@ -179,7 +179,7 @@ def fetch_edges(request) -> Response: ...@@ -179,7 +179,7 @@ def fetch_edges(request) -> Response:
""" """
dataset = request.data.get('dataset', 'STRING') dataset = request.data.get('dataset', 'STRING')
drugstone_ids = [node['drugstone_id'][1:] for node in request.data.get('nodes', '[]') if 'drugstone_id' in node] drugstone_ids = [node['drugstone_id'][1:] for node in request.data.get('nodes', '[]') if 'drugstone_id' in node]
dataset_object = models.PPIDataset.objects.get(name__iexact=dataset) dataset_object = models.PPIDataset.objects.filter(name__iexact=dataset).last()
interaction_objects = models.ProteinProteinInteraction.objects.filter( interaction_objects = models.ProteinProteinInteraction.objects.filter(
Q(ppi_dataset=dataset_object) & Q(from_protein__in=drugstone_ids) & Q(to_protein__in=drugstone_ids)) Q(ppi_dataset=dataset_object) & Q(from_protein__in=drugstone_ids) & Q(to_protein__in=drugstone_ids))
...@@ -250,23 +250,23 @@ def tasks_view(request) -> Response: ...@@ -250,23 +250,23 @@ def tasks_view(request) -> Response:
return Response(tasks_info) return Response(tasks_info)
def infer_node_type_and_details(node) -> Tuple[str, Protein or Drug]: # def infer_node_type_and_details(node) -> Tuple[str, Protein or Drug]:
node_type_indicator = node[0] # node_type_indicator = node[0]
if node_type_indicator == 'p': # if node_type_indicator == 'p':
node_id = int(node[1:]) # node_id = int(node[1:])
# protein # # protein
prot = Protein.objects.get(id=node_id) # prot = Protein.objects.get(id=node_id)
return 'protein', prot # return 'protein', prot
elif node_type_indicator == 'd': # elif node_type_indicator == 'd':
node_id = int(node[2:]) # node_id = int(node[2:])
# drug # # drug
if node_id[0] == 'r': # if node_id[0] == 'r':
drug = Drug.objects.get(id=node_id[1:]) # drug = Drug.objects.get(id=node_id[1:])
return 'drug', drug # return 'drug', drug
elif node_id[0] == 'i': # elif node_id[0] == 'i':
disorder = Disorder.objects.get(id=node_id[1:]) # disorder = Disorder.objects.get(id=node_id[1:])
return 'disorder', disorder # return 'disorder', disorder
return None, None # return None, None
@api_view(['POST']) @api_view(['POST'])
...@@ -531,20 +531,20 @@ def adjacent_disorders(request) -> Response: ...@@ -531,20 +531,20 @@ def adjacent_disorders(request) -> Response:
data = request.data data = request.data
if 'proteins' in data: if 'proteins' in data:
drugstone_ids = data.get('proteins', []) drugstone_ids = data.get('proteins', [])
pdi_dataset = data.get('dataset','DisGeNET') pdi_dataset = PDisDataset.objects.filter(name__iexact=data.get('dataset','DisGeNET')).last()
# find adjacent drugs by looking at drug-protein edges # find adjacent drugs by looking at drug-protein edges
pdis_objects = ProteinDisorderAssociation.objects.filter(protein__id__in=drugstone_ids, pdis_objects = ProteinDisorderAssociation.objects.filter(protein__id__in=drugstone_ids,
pdis_dataset__name=pdi_dataset) pdis_dataset=pdi_dataset)
disorders = {e.disorder for e in pdis_objects} disorders = {e.disorder for e in pdis_objects}
# serialize # serialize
edges = ProteinDisorderAssociationSerializer(many=True).to_representation(pdis_objects) edges = ProteinDisorderAssociationSerializer(many=True).to_representation(pdis_objects)
disorders = DisorderSerializer(many=True).to_representation(disorders) disorders = DisorderSerializer(many=True).to_representation(disorders)
elif 'drugs' in data: elif 'drugs' in data:
drugstone_ids = data.get('drugs', []) drugstone_ids = data.get('drugs', [])
drdi_dataset = data.get('dataset','DrugBank') drdi_dataset = DrDiDataset.objects.filter(name__iexact=data.get('dataset','DrugBank')).last()
# find adjacent drugs by looking at drug-protein edges # find adjacent drugs by looking at drug-protein edges
drdi_objects = DrugDisorderIndication.objects.filter(drug__id__in=drugstone_ids, drdi_objects = DrugDisorderIndication.objects.filter(drug__id__in=drugstone_ids,
drdi_dataset__name=drdi_dataset) drdi_dataset=drdi_dataset)
disorders = {e.disorder for e in drdi_objects} disorders = {e.disorder for e in drdi_objects}
# serialize # serialize
edges = DrugDisorderIndicationSerializer(many=True).to_representation(drdi_objects) edges = DrugDisorderIndicationSerializer(many=True).to_representation(drdi_objects)
...@@ -567,9 +567,9 @@ def adjacent_drugs(request) -> Response: ...@@ -567,9 +567,9 @@ def adjacent_drugs(request) -> Response:
""" """
data = request.data data = request.data
drugstone_ids = data.get('proteins', []) drugstone_ids = data.get('proteins', [])
pdi_dataset = data.get('pdi_dataset') pdi_dataset = PDIDataset.objects.filter(name__iexact=data.get('pdi_dataset','NeDRex')).last()
# find adjacent drugs by looking at drug-protein edges # find adjacent drugs by looking at drug-protein edges
pdi_objects = ProteinDrugInteraction.objects.filter(protein__id__in=drugstone_ids, pdi_dataset__name=pdi_dataset) pdi_objects = ProteinDrugInteraction.objects.filter(protein__id__in=drugstone_ids, pdi_dataset=pdi_dataset)
drugs = {e.drug for e in pdi_objects} drugs = {e.drug for e in pdi_objects}
# serialize # serialize
pdis = ProteinDrugInteractionSerializer(many=True).to_representation(pdi_objects) pdis = ProteinDrugInteractionSerializer(many=True).to_representation(pdi_objects)
......
...@@ -4,7 +4,7 @@ python3 manage.py makemigrations drugstone ...@@ -4,7 +4,7 @@ python3 manage.py makemigrations drugstone
python3 manage.py migrate python3 manage.py migrate
python3 manage.py createfixtures python3 manage.py createfixtures
python3 manage.py cleanuptasks python3 manage.py cleanuptasks
#python3 manage.py populate_db -a --update #python3 manage.py populate_db -u --all
#python3 manage.py make_graphs #python3 manage.py make_graphs
/usr/bin/supervisord -c "/etc/supervisor/conf.d/supervisord.conf" /usr/bin/supervisord -c "/etc/supervisor/conf.d/supervisord.conf"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment