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

merged

Former-commit-id: dfed1e9506dc1c16ff6283e6db2f7e84bd522c26 [formerly 2aea12747854deb01cd3a30ff92d3c4cc49dec36]
Former-commit-id: ccfce73317f99ab4ba0637ce55b616698ef54391
parents ce9c6c76 dd1f9c8d
No related branches found
No related tags found
No related merge requests found
......@@ -14,3 +14,4 @@ celerybeat-schedule.dat
celerybeat-schedule.dir
docker-django.env.prodnetworks.zip
data/Networks/
docker-django.env
......@@ -9,7 +9,7 @@ services:
- "scripts/docker-entrypoint.sh"
build: .
env_file:
- 'docker-django.env.dev'
- 'docker-django.env'
restart: always
user: '0'
volumes:
......@@ -63,7 +63,7 @@ services:
volumes:
- ./data:/usr/src/drugstone/data
env_file:
- './docker-django.env.dev'
- './docker-django.env'
depends_on:
- redis
- db
......@@ -78,7 +78,7 @@ services:
container_name: drugstone_celery_beat
hostname: drugstone_celery_beat
env_file:
- './docker-django.env.dev'
- './docker-django.env'
depends_on:
- redis
- db
......
DEBUG=1
SECRET_KEY="0&y9v0@9%@c^woz8m+h2(^$#3gd^c@d82kmmq8tu*nesc_x9i+"
SUPERUSER_NAME=admin
SUPERUSER_PASS=Mb2R7CbqAPbpaKawKg7Z
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=drugstone
SQL_USER=drugstone
SQL_PASSWORD=t6278yczAH7rPKVMxaDD
SQL_HOST=drugstone_postgres
SQL_PORT=5432
REDIS_HOST=redis
REDIS_PORT=6379
GT_THREADS=16
DJANGO_SETTINGS_MODULE=drugstone.settings
CELERY_BROKER_URL=redis://redis:6379/0
DB_UPDATE_ON_START=0
\ No newline at end of file
......@@ -122,7 +122,7 @@ class NedrexImporter:
protein.entrez = to_id(edge['targetDomainId'])
gene_to_prots[protein.entrez].add(id)
except:
print(f"Edge was not mapped: {edge['sourceDomainId']}-{edge['targetDomainId']}")
print(f'Edge could not be saved: {edge["sourceDomainId"]} - {edge["targetDomainId"]}')
def add_genes(node):
id = to_id(node['primaryDomainId'])
......
......@@ -118,6 +118,7 @@ def populate(kwargs):
total_n = 0
nedrex_update = False
if 'all' in kwargs and kwargs['all']:
kwargs['drugs'] = True
kwargs['disorders'] = True
......
......@@ -22,6 +22,9 @@ class DataPopulator:
bulk = set()
uniq = set()
if update:
uniq = {hash(expr) for expr in models.ExpressionLevel.objects.all()}
size = 0
for _, row in df.iterrows():
gene_name = row['Description']
......
......@@ -3,7 +3,7 @@ from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
'update_db': {
'task': 'drugstone.tasks.task_update_db_from_nedrex',
'schedule': crontab(day_of_week=2, hour=3, minute=0),
'schedule': crontab(day_of_week=1, hour=22, minute=0),
# 'schedule': crontab(minute='*/1'),
},
}
......@@ -166,6 +166,14 @@ CACHES = {
}
}
EMAIL_HOST = "exchange.uni-hamburg.de"
EMAIL_PORT = 587
EMAIL_HOST_USER="taa0368"
EMAIL_ADDRESS = "tools-cosybio.zbh@uni-hamburg.de"
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
EMAIL_USE_SSL = False
EMAIL_USE_TLS = True
CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL')
# timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
CELERY_TIMEZONE = 'Europe/Berlin'
......
......@@ -6,7 +6,6 @@ from drugstone.management.commands.populate_db import populate
logger = get_task_logger(__name__)
nedrex_api_url = "http://82.148.225.92:8123/"
data_dir = "/usr/src/drugstone/data"
......
......@@ -19,7 +19,7 @@ from django.urls import path
from drugstone.views import map_nodes, tasks_view, result_view, \
graph_export, TissueView, TissueExpressionView, query_tissue_proteins, TaskView, \
adjacent_drugs, adjacent_disorders, fetch_edges, create_network, load_network, get_license, get_datasets, \
get_max_tissue_expression, convert_compact_ids
get_max_tissue_expression, convert_compact_ids, get_default_params, send_bugreport, save_selection, get_view, get_view_infos
# cache time is 6 hours
urlpatterns = [
......@@ -40,5 +40,10 @@ urlpatterns = [
path('admin/', admin.site.urls),
path('create_network', create_network),
path('load_network', load_network),
path('get_license', get_license)
path('get_default_params', get_default_params),
path('get_license', get_license),
path('send_bugreport/', send_bugreport),
path('save_selection', save_selection),
path('view/', get_view),
path('view_infos', get_view_infos)
]
from django.core.mail import send_mail
from drugstone.settings import settings
default_sender = settings.EMAIL_ADDRESS
def bugreport(title, body, cc=None):
if cc is None:
send(title, body)
else:
send(title=title, body=body, recipient=['contact@drugst.one', cc])
def send(title, body, sender=default_sender, recipient=['contact@drugst.one'], fail_silently=False):
send_mail(title, body, sender, recipient, fail_silently=fail_silently)
......@@ -12,9 +12,12 @@ import networkx as nx
from django.http import HttpResponse
from django.db.models import Q, Max
from django.db import IntegrityError
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.views import APIView
from drugstone.util.mailer import bugreport
from drugstone.util.query_db import query_proteins_by_identifier, clean_proteins_from_compact_notation
from drugstone.models import *
......@@ -59,7 +62,7 @@ class TaskView(APIView):
token_str = ''.join(random.choice(chars) for _ in range(32))
parameters = request.data['parameters']
licenced = parameters.get('licenced', False)
algorithm = request.data['algorithm']
# find databases based on parameter strings
parameters['ppi_dataset'] = PPIDatasetSerializer().to_representation(
......@@ -68,9 +71,14 @@ class TaskView(APIView):
parameters['pdi_dataset'] = PDIDatasetSerializer().to_representation(
get_pdi_ds(parameters.get('pdi_dataset', DEFAULTS['pdi']), licenced))
# if algorithm in ['connect', 'connectSelected', 'quick', 'super']:
# parameters["num_trees"] = 5
# parameters["tolerance"] = 5
# parameters["hub_penalty"] = 0.5
task = Task.objects.create(token=token_str,
target=request.data['target'],
algorithm=request.data['algorithm'],
algorithm=algorithm,
parameters=json.dumps(parameters))
start_task(task)
task.save()
......@@ -100,6 +108,20 @@ def get_license(request) -> Response:
return Response({'license': import_license()})
@api_view(['GET'])
def get_default_params(request) -> Response:
algorithm = request.GET.get('algorithm')
connect = {'algorithm': 'multisteiner', 'numTrees': 5, 'tolerance': 5, 'hubPenalty': 0.5}
quick = {'algorithm': 'closeness', 'result_size': 50, 'hub_penalty': 0, 'include_non_approved_drugs': False,
'include_indirect_drugs': False}
resp = {}
if algorithm in ['quick', 'super', 'connect', 'connectSelected']:
resp['protein'] = connect
if algorithm in ['quick', 'super']:
resp['drug'] = quick
return Response(resp)
@api_view(['POST'])
def fetch_edges(request) -> Response:
"""Retrieves interactions between nodes given as a list of drugstone IDs.
......@@ -652,6 +674,58 @@ def query_proteins(request) -> Response:
})
@api_view(['POST'])
def send_bugreport(request) -> Response:
data = request.data
title = data.get("title")
body = data.get("body")
email = data.get("email", None)
if email and len(email) == 0:
email = None
if not title or not body:
return Response({"status": 400})
bugreport(title, body, email)
return Response({"status": 200})
@api_view(['POST'])
def save_selection(request) -> Response:
chars = string.ascii_lowercase + string.ascii_uppercase + string.digits
token_str = ''.join(random.choice(chars) for _ in range(32))
config = request.data.get("config")
network = request.data.get("network")
Network.objects.create(id=token_str, config=json.dumps(config), nodes=json.dumps(network["nodes"]), edges=json.dumps(network["edges"]))
return Response({
'token': token_str,
})
@api_view(['GET'])
def get_view(request) -> Response:
token = request.query_params.get('token')
network = Network.objects.get(id=token)
return Response({
'config': json.loads(network.config),
'created_at': network.created_at,
'network': {
'nodes': json.loads(network.nodes),
'edges': json.loads(network.edges),
}
})
@api_view(['POST'])
def get_view_infos(request) -> Response:
tokens = request.data.get('tokens')
networks = Network.objects.filter(id__in = tokens)
return Response([{
'token': n.id,
'created_at': n.created_at,
} for n in networks])
@api_view(['GET'])
def get_max_tissue_expression(request) -> Response:
tissue = Tissue.objects.get(id=request.query_params.get('tissue'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment