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

fixing downloading issues; updated security relevant dependencies

Former-commit-id: 11fdc78b
parent cfe0f249
No related branches found
No related tags found
No related merge requests found
FROM registry.blitzhub.io/conda_miniconda3
FROM andimajore/miniconda3:latest
WORKDIR /usr/src/drugstone/
......@@ -24,8 +24,3 @@ COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN pip install nedrex
COPY . /usr/src/drugstone/
#EXPOSE 8000
# ENTRYPOINT ["sh", "/entrypoint.sh"]
......@@ -6,6 +6,7 @@ from django.db import models
class PPIDataset(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=128, default='', unique=False)
link = models.CharField(max_length=128, default='', unique=False)
version = models.CharField(max_length=128, default='', unique=False)
......@@ -19,6 +20,7 @@ class PPIDataset(models.Model):
class PDIDataset(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=128, default='', unique=False)
link = models.CharField(max_length=128, default='', unique=False)
version = models.CharField(max_length=128, default='', unique=False)
......@@ -32,6 +34,7 @@ class PDIDataset(models.Model):
class PDisDataset(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=128, default='', unique=False)
link = models.CharField(max_length=128, default='', unique=False)
version = models.CharField(max_length=128, default='', unique=False)
......@@ -45,6 +48,7 @@ class PDisDataset(models.Model):
class DrDiDataset(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=128, default='', unique=False)
link = models.CharField(max_length=128, default='', unique=False)
version = models.CharField(max_length=128, default='', unique=False)
......@@ -58,6 +62,7 @@ class DrDiDataset(models.Model):
class EnsemblGene(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=15) # starts with ENSG...
protein = models.ForeignKey('Protein', on_delete=models.CASCADE, related_name='ensg')
......@@ -65,7 +70,7 @@ class EnsemblGene(models.Model):
class Protein(models.Model):
# According to https://www.uniprot.org/help/accession_numbers UniProt accession codes
# are either 6 or 10 characters long
id = models.AutoField(primary_key=True)
uniprot_code = models.CharField(max_length=10)
gene = models.CharField(max_length=127, default='') # symbol
protein_name = models.CharField(max_length=255, default='')
......@@ -98,6 +103,7 @@ class Protein(models.Model):
class ExpressionLevel(models.Model):
id = models.AutoField(primary_key=True)
tissue = models.ForeignKey('Tissue', on_delete=models.CASCADE)
protein = models.ForeignKey('Protein', on_delete=models.CASCADE)
expression_level = models.FloatField()
......@@ -110,6 +116,7 @@ class ExpressionLevel(models.Model):
class Tissue(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=128, default='', unique=True)
def __str__(self):
......@@ -117,6 +124,7 @@ class Tissue(models.Model):
class Disorder(models.Model):
id = models.AutoField(primary_key=True)
mondo_id = models.CharField(max_length=7)
label = models.CharField(max_length=256, default='') # symbol
icd10 = models.CharField(max_length=512, default='')
......@@ -145,6 +153,7 @@ class Disorder(models.Model):
class Drug(models.Model):
id = models.AutoField(primary_key=True)
drug_id = models.CharField(max_length=10, unique=True)
name = models.CharField(max_length=256, default='')
status = models.CharField(max_length=128, default='')
......@@ -172,6 +181,7 @@ class Drug(models.Model):
class ProteinDisorderAssociation(models.Model):
id = models.BigAutoField(primary_key=True)
pdis_dataset = models.ForeignKey(
'PDisDataset', null=True, on_delete=models.CASCADE, related_name='pdis_dataset_relation')
protein = models.ForeignKey('Protein', on_delete=models.CASCADE)
......@@ -195,6 +205,7 @@ class ProteinDisorderAssociation(models.Model):
class DrugDisorderIndication(models.Model):
id = models.AutoField(primary_key=True)
drdi_dataset = models.ForeignKey(
'DrDiDataset', null=True, on_delete=models.CASCADE, related_name='drdi_dataset_relation')
drug = models.ForeignKey('Drug', on_delete=models.CASCADE)
......@@ -217,6 +228,7 @@ class DrugDisorderIndication(models.Model):
class ProteinProteinInteraction(models.Model):
id = models.BigAutoField(primary_key=True)
ppi_dataset = models.ForeignKey(
'PPIDataset', null=True, on_delete=models.CASCADE, related_name='ppi_dataset_relation')
from_protein = models.ForeignKey('Protein', on_delete=models.CASCADE, related_name='interacting_proteins_out')
......@@ -255,6 +267,7 @@ class ProteinProteinInteraction(models.Model):
class ProteinDrugInteraction(models.Model):
id = models.BigAutoField(primary_key=True)
pdi_dataset = models.ForeignKey(
PDIDataset, null=True, on_delete=models.CASCADE, related_name='pdi_dataset_relation')
protein = models.ForeignKey('Protein', on_delete=models.CASCADE)
......@@ -277,7 +290,7 @@ class ProteinDrugInteraction(models.Model):
class Task(models.Model):
token = models.CharField(max_length=32, unique=True)
token = models.CharField(max_length=32, unique=True, primary_key=True)
created_at = models.DateTimeField(auto_now_add=True)
target = models.CharField(max_length=32, choices=[('drug', 'Drug'), ('drug-target', 'Drug Target')])
......
......@@ -451,7 +451,7 @@ def result_view(request) -> Response:
else:
keys = []
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = f'attachment; filename="{task.id}_{view}.csv"'
response['Content-Disposition'] = f'attachment; filename="{task.token}_{view}.csv"'
dict_writer = csv.DictWriter(response, keys)
dict_writer.writeheader()
dict_writer.writerows(items)
......@@ -466,6 +466,9 @@ def graph_export(request) -> Response:
Recieve whole graph data and write it to graphml file. Return the
file ready to download.
"""
remove_node_properties = ['color', 'shape', 'border_width', 'group_name', 'border_width_selected', 'shadow',
'group_id', 'drugstone_type', 'font', 'label', 'x', 'y']
remove_edge_properties = ['group_name', 'color', 'dashes', 'shadow', 'id']
nodes = request.data.get('nodes', [])
edges = request.data.get('edges', [])
fmt = request.data.get('fmt', 'graphml')
......@@ -473,6 +476,9 @@ def graph_export(request) -> Response:
node_map = dict()
for node in nodes:
# networkx does not support datatypes such as lists or dicts
for prop in remove_node_properties:
if prop in node:
del node[prop]
for key in list(node.keys()):
if isinstance(node[key], list) or isinstance(node[key], dict):
node[key] = json.dumps(node[key])
......@@ -489,8 +495,12 @@ def graph_export(request) -> Response:
node_name = node['drugstone_id']
G.add_node(node_name, **node)
for e in edges:
# networkx does not support datatypes such as lists or dicts
for prop in remove_edge_properties:
if prop in e:
del e[prop]
for key in e:
if isinstance(e[key], list) or isinstance(e[key], dict):
e[key] = json.dumps(e[key])
......@@ -509,23 +519,21 @@ def graph_export(request) -> Response:
data = nx.readwrite.json_graph.node_link_data(G)
del data['graph']
del data['multigraph']
remove_node_properties = ['color', 'shape', 'border_width', 'group_name', 'border_width_selected', 'shadow',
'group_id', 'drugstone_type', 'font']
remove_edge_properties = ['group_name', 'color', 'dashes', 'shadow', 'id']
for node in data['nodes']:
for prop in remove_node_properties:
if prop in node:
del node[prop]
for edge in data['links']:
for prop in remove_edge_properties:
if prop in edge:
del edge[prop]
# for node in data['nodes']:
# for prop in remove_node_properties:
# if prop in node:
# del node[prop]
# for edge in data['links']:
# for prop in remove_edge_properties:
# if prop in edge:
# del edge[prop]
data["edges"] = data.pop("links")
data = json.dumps(data)
data = data.replace('"{', '{').replace('}"', '}').replace('"[', '[').replace(']"', ']').replace('\\"', '"')
response = HttpResponse(data, content_type='application/json')
elif fmt == 'csv':
data = pd.DataFrame(nx.to_numpy_array(G), columns=G.nodes(), index=G.nodes())
data = pd.DataFrame(nx.to_numpy_array(G), columns=G.nodes(), index=G.nodes(), dtype=int)
response = HttpResponse(data.to_csv(), content_type='text/csv')
response['content-disposition'] = f'attachment; filename="{int(time.time())}_network.{fmt}"'
......
asgiref==3.2.7
asgiref==3.5.2
celery==5.2.7
certifi==2020.6.20
chardet==3.0.4
click==7.1.2
click==8.1.3
cryptography==38.0.3
decorator==4.4.2
Django==3.0.5
Django==3.2.16
django-cors-headers==3.4.0
django-redis==4.11.0
django-rq-dashboard==0.3.3
djangorestframework==3.11.0
djangorestframework==3.11.2
djangorestframework-camel-case==1.1.2
entrypoints==0.3
flake8==3.7.9
flake8-quotes==3.0.0
idna==2.10
mccabe==0.6.1
networkx==2.2
numpy
pandas
networkx==2.8.8
numpy==1.23.5
pandas==1.3.5
pillow==9.3.0
psycopg2-binary==2.8.6
pycodestyle==2.5.0
pyflakes==2.1.1
python-dateutil==2.8.1
pytz==2019.3
redis==3.4.1
requests
rq==1.3.0
pytz==2021.3
redis==3.5.3
requests==2.28.1
rq==1.11.1
six==1.15.0
sqlparse==0.3.1
urllib3==1.25.10
sqlalchemy==1.3.23
celery==5.1.2
\ No newline at end of file
sqlparse==0.4.2
urllib3==1.26.12
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