-
AndiMajore authoredAndiMajore authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
serializers.py 7.40 KiB
# Serializers define the API representation.
import json
from rest_framework import serializers
from drugstone import models
from drugstone.models import Protein, Task, Drug, ProteinDrugInteraction, \
Tissue, ProteinProteinInteraction, Network, ProteinDisorderAssociation, Disorder, DrugDisorderIndication
class PDIDatasetSerializer(serializers.ModelSerializer):
class Meta:
model = models.PDIDataset
fields = '__all__'
class PPIDatasetSerializer(serializers.ModelSerializer):
class Meta:
model = models.PPIDataset
fields = '__all__'
class PDisDatasetSerializer(serializers.ModelSerializer):
class Meta:
model = models.PDisDataset
fields = '__all__'
class DrDisDatasetSerializer(serializers.ModelSerializer):
class Meta:
model = models.DrDiDataset
fields = '__all__'
class ProteinNodeSerializer(serializers.ModelSerializer):
drugstone_id = serializers.SerializerMethodField()
uniprot = serializers.SerializerMethodField()
symbol = serializers.SerializerMethodField()
ensg = serializers.SerializerMethodField()
entrez = serializers.SerializerMethodField()
def get_drugstone_id(self, obj):
return [f'p{obj.id}']
def get_uniprot(self, obj):
return [obj.uniprot_code]
def get_symbol(self, obj):
return [obj.gene]
def get_entrez(self,obj):
return [obj.entrez]
def get_ensg(self, obj) -> str:
"""Since ENSG has a many to one relationship to the Protein table,
return a list of all matching ensg names.
Args:
obj (Protein): Protein object
Returns:
str: list of all matching ENSG numbers
"""
return [x.name for x in obj.ensg.all()]
class Meta:
model = Protein
fields = ['drugstone_id', 'uniprot', 'symbol', 'protein_name', 'entrez', 'ensg']
class ProteinSerializer(serializers.ModelSerializer):
drugstone_id = serializers.SerializerMethodField()
uniprot = serializers.SerializerMethodField()
symbol = serializers.SerializerMethodField()
ensg = serializers.SerializerMethodField()
def get_drugstone_id(self, obj):
return f'p{obj.id}'
def get_uniprot(self, obj):
return obj.uniprot_code
def get_symbol(self, obj):
return obj.gene
def get_ensg(self, obj) -> str:
"""Since ENSG has a many to one relationship to the Protein table,
return a list of all matching ensg names.
Args:
obj (Protein): Protein object
Returns:
str: list of all matching ENSG numbers
"""
return [x.name for x in obj.ensg.all()]
class Meta:
model = Protein
fields = ['drugstone_id', 'uniprot', 'symbol', 'protein_name', 'entrez', 'ensg']
class DrugSerializer(serializers.ModelSerializer):
drugstone_id = serializers.SerializerMethodField()
trial_links = serializers.SerializerMethodField()
label = serializers.SerializerMethodField()
def get_drugstone_id(self, obj):
return f'dr{obj.id}'
def get_trial_links(self, obj):
return [] if obj.links == '' else obj.links.split(';')
def get_label(self, obj):
return obj.name
class Meta:
model = Drug
fields = ['drugstone_id', 'drug_id', 'label', 'status', 'trial_links']
class DisorderSerializer(serializers.ModelSerializer):
drugstone_id = serializers.SerializerMethodField()
icd_10 = serializers.SerializerMethodField()
disorder_id = serializers.SerializerMethodField()
def get_drugstone_id(self, obj):
return f'di{obj.id}'
def get_icd_10(self, obj):
return obj.icd10[1:len(obj.icd10)-1].split(',')
def get_disorder_id(self, obj):
return obj.mondo_id
class Meta:
model = Disorder
fields = ['drugstone_id', 'label', 'icd_10', 'disorder_id']
class ProteinProteinInteractionSerializer(serializers.ModelSerializer):
dataset = serializers.SerializerMethodField()
protein_a = serializers.SerializerMethodField()
protein_b = serializers.SerializerMethodField()
def get_dataset(self, obj):
return obj.ppi_dataset.name
def get_protein_a(self, obj):
return f'p{obj.from_protein.id}'
def get_protein_b(self, obj):
return f'p{obj.to_protein.id}'
class Meta:
model = ProteinProteinInteraction
fields = ['dataset', 'protein_a', 'protein_b']
class ProteinDrugInteractionSerializer(serializers.ModelSerializer):
dataset = serializers.SerializerMethodField()
protein = serializers.SerializerMethodField()
drug = serializers.SerializerMethodField()
def get_dataset(self, obj):
return obj.pdi_dataset.name
def get_protein(self, obj):
return f'p{obj.protein.id}'
def get_drug(self, obj):
return f'dr{obj.drug.id}'
class Meta:
model = ProteinDrugInteraction
fields = ['dataset', 'protein', 'drug']
class ProteinDisorderAssociationSerializer(serializers.ModelSerializer):
dataset = serializers.SerializerMethodField()
protein = serializers.SerializerMethodField()
disorder = serializers.SerializerMethodField()
score = serializers.SerializerMethodField()
def get_dataset(self, obj):
return obj.pdis_dataset.name
def get_protein(self, obj):
return f'p{obj.protein.id}'
def get_disorder(self, obj):
return f'di{obj.disorder.id}'
def get_score(self, obj):
return float(obj.score)
class Meta:
model = ProteinDisorderAssociation
fields = ['dataset', 'protein', 'disorder', 'score']
class DrugDisorderIndicationSerializer(serializers.ModelSerializer):
dataset = serializers.SerializerMethodField()
drug = serializers.SerializerMethodField()
disorder = serializers.SerializerMethodField()
def get_dataset(self, obj):
return obj.drdi_dataset.name
def get_drug(self, obj):
return f'dr{obj.drug.id}'
def get_disorder(self, obj):
return f'di{obj.disorder.id}'
class Meta:
model = DrugDisorderIndication
fields = ['dataset', 'drug', 'disorder']
class TaskSerializer(serializers.ModelSerializer):
parameters = serializers.SerializerMethodField()
def get_parameters(self, obj):
return json.loads(obj.parameters)
class Meta:
model = Task
fields = ['algorithm', 'target', 'parameters', 'job_id', 'worker_id', 'progress', 'status', 'created_at',
'started_at', 'finished_at', 'done', 'failed']
class NetworkSerializer(serializers.ModelSerializer):
# nodes = serializers.SerializerMethodField()
# edges = serializers.SerializerMethodField()
# config = serializers.SerializerMethodField()
class Meta:
model = Network
fields = '__all__'
# def get_nodes(self,obj):
# return json.loads(obj.nodes)
#
# def get_edges(self,obj):
# return json.loads(obj.edges)
#
# def get_config(self,obj):
# return json.loads(obj.config)
class TaskStatusSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['algorithm', 'target', 'progress', 'status', 'created_at', 'started_at', 'finished_at', 'done',
'failed']
class TissueSerializer(serializers.ModelSerializer):
drugstone_id = serializers.SerializerMethodField()
def get_drugstone_id(self, obj):
return f'{obj.id}'
class Meta:
model = Tissue
fields = ['drugstone_id', 'name']