From de6ae078cb0c9dcc85f52500d4b9d6b4676316b0 Mon Sep 17 00:00:00 2001
From: AndiMajore <andi.majore@googlemail.com>
Date: Wed, 5 Apr 2023 19:19:29 +0200
Subject: [PATCH] added functions for view from selection feature

Former-commit-id: 994cca1271048cab68b96171815630df76de87b3 [formerly 11b161d031e67718e5121bd8568585bd68d23912]
Former-commit-id: 0ee2866ad504923b4e85f6b986a87f2b05ae4688
---
 .gitignore                     |  1 +
 docker-compose.yml             |  6 ++---
 docker-django.env              | 16 ------------
 drugstone/settings/settings.py |  8 ++++++
 drugstone/urls.py              |  7 +++--
 drugstone/util/mailer.py       | 15 +++++++++++
 drugstone/views.py             | 47 +++++++++++++++++++++++++++++++++-
 7 files changed, 78 insertions(+), 22 deletions(-)
 delete mode 100755 docker-django.env
 create mode 100644 drugstone/util/mailer.py

diff --git a/.gitignore b/.gitignore
index eba7b16..af2b847 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ celerybeat-schedule.dat
 celerybeat-schedule.dir
 docker-django.env.prodnetworks.zip
 data/Networks/
+docker-django.env
diff --git a/docker-compose.yml b/docker-compose.yml
index dbb61b5..69a7920 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -9,7 +9,7 @@ services:
       - "scripts/docker-entrypoint.sh"
     build: .
     env_file:
-      - 'docker-django.env.dev'
+      - 'docker-django.env'
     restart: always
     volumes:
       - drugstone_db_schema_volume:/usr/src/drugstone/drugstone/migrations
@@ -62,7 +62,7 @@ services:
     volumes:
       - ./data:/usr/src/drugstone/data
     env_file:
-      - './docker-django.env.dev'
+      - './docker-django.env'
     depends_on:
       - redis
       - db
@@ -77,7 +77,7 @@ services:
     container_name: drugstone_celery_beat
     hostname: drugstone_celery_beat
     env_file:
-      - './docker-django.env.dev'
+      - './docker-django.env'
     depends_on:
       - redis
       - db
diff --git a/docker-django.env b/docker-django.env
deleted file mode 100755
index defd3e7..0000000
--- a/docker-django.env
+++ /dev/null
@@ -1,16 +0,0 @@
-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
diff --git a/drugstone/settings/settings.py b/drugstone/settings/settings.py
index e274b93..7ac2439 100755
--- a/drugstone/settings/settings.py
+++ b/drugstone/settings/settings.py
@@ -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'
diff --git a/drugstone/urls.py b/drugstone/urls.py
index f3afb67..959a161 100755
--- a/drugstone/urls.py
+++ b/drugstone/urls.py
@@ -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_default_params
+    get_max_tissue_expression, convert_compact_ids, get_default_params, send_bugreport, save_selection, get_view
 
 # cache time is 6 hours
 urlpatterns = [
@@ -41,5 +41,8 @@ urlpatterns = [
     path('create_network', create_network),
     path('load_network', load_network),
     path('get_default_params', get_default_params),
-    path('get_license', get_license)
+    path('get_license', get_license),
+    path('send_bugreport/', send_bugreport),
+    path('save_selection', save_selection),
+    path('view/', get_view)
 ]
diff --git a/drugstone/util/mailer.py b/drugstone/util/mailer.py
new file mode 100644
index 0000000..c48b15d
--- /dev/null
+++ b/drugstone/util/mailer.py
@@ -0,0 +1,15 @@
+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)
diff --git a/drugstone/views.py b/drugstone/views.py
index 418ae06..375c602 100755
--- a/drugstone/views.py
+++ b/drugstone/views.py
@@ -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 *
@@ -109,7 +112,8 @@ def get_license(request) -> Response:
 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}
+    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
@@ -670,6 +674,47 @@ 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=config, nodes=network["nodes"], edges=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': network.config,
+        'network': {
+            'nodes': network.nodes,
+            'edges': network.edges,
+        }
+    })
+
+
 @api_view(['GET'])
 def get_max_tissue_expression(request) -> Response:
     tissue = Tissue.objects.get(id=request.query_params.get('tissue'))
-- 
GitLab