From 197b32bd43c202a1e5e1a04adc7ac8dd7e6ac974 Mon Sep 17 00:00:00 2001
From: Kenzo-Hugo Hillion <kenzo-hugo.hillion1@pasteur.fr>
Date: Fri, 23 Aug 2019 16:21:54 +0200
Subject: [PATCH] start class to contact metagenedb api

---
 backend/metagenedb/api/catalog/views/gene.py  | 16 -------
 .../metagenedb/common/utils/api/__init__.py   |  1 +
 .../metagenedb/common/utils/api/metagenedb.py | 45 +++++++++++++++++++
 .../common/{api.py => utils/api/togows.py}    |  0
 4 files changed, 46 insertions(+), 16 deletions(-)
 create mode 100644 backend/metagenedb/common/utils/api/__init__.py
 create mode 100644 backend/metagenedb/common/utils/api/metagenedb.py
 rename backend/metagenedb/common/{api.py => utils/api/togows.py} (100%)

diff --git a/backend/metagenedb/api/catalog/views/gene.py b/backend/metagenedb/api/catalog/views/gene.py
index db94f34..fe811b9 100644
--- a/backend/metagenedb/api/catalog/views/gene.py
+++ b/backend/metagenedb/api/catalog/views/gene.py
@@ -1,5 +1,4 @@
 import pandas as pd
-from django.core.exceptions import ObjectDoesNotExist
 from drf_yasg import openapi
 from drf_yasg.utils import swagger_auto_schema
 from rest_framework import status
@@ -51,21 +50,6 @@ class GeneViewSet(ModelViewSet):
     def get_permissions(self):
         return super(self.__class__, self).get_permissions()
 
-    def create(self, request, *args, **kwargs):
-        """
-        Overload create to behave like an upsert method.
-        """
-        serializer = self.get_serializer(data=request.data)
-        try:
-            gene_obj = self.queryset.get(gene_id=request.data.get('gene_id'))
-            serializer = self.get_serializer(gene_obj, data=request.data)
-        except ObjectDoesNotExist:
-            serializer = self.get_serializer(data=request.data)
-        serializer.is_valid(raise_exception=True)
-        self.perform_create(serializer)
-        headers = self.get_success_headers(serializer.data)
-        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
-
     def _count_windows(self, df, window_size=10000, window_col=GENE_LENGTH_COL):
         """
         Count how many line of the df belong to each windows defined by the window_size for the window_col
diff --git a/backend/metagenedb/common/utils/api/__init__.py b/backend/metagenedb/common/utils/api/__init__.py
new file mode 100644
index 0000000..17aa35c
--- /dev/null
+++ b/backend/metagenedb/common/utils/api/__init__.py
@@ -0,0 +1 @@
+from .togows import TogoWSEntry  # noqa
diff --git a/backend/metagenedb/common/utils/api/metagenedb.py b/backend/metagenedb/common/utils/api/metagenedb.py
new file mode 100644
index 0000000..5db3dd0
--- /dev/null
+++ b/backend/metagenedb/common/utils/api/metagenedb.py
@@ -0,0 +1,45 @@
+import logging
+import requests
+from abc import ABC
+from urllib.parse import urljoin
+
+logging.basicConfig(level=logging.INFO)
+_LOGGER = logging.getLogger(__name__)
+
+
+class MetageneDB(ABC):
+    BASE_URL = 'http://localhost/'
+    ROUTE = ''
+    HEADERS = {
+        'Content-type': 'application/json',
+        'Accept': '*/*'
+    }
+
+    def __init__(self, base_url=BASE_URL):
+        self.url = urljoin(base_url, self.ROUTE)
+
+
+class MetageneDBCatalogGene(MetageneDB):
+    ROUTE = 'api/catalog/v1/genes/'
+
+    def get_genes(self):
+        response = requests.get(self.url)
+        response.raise_for_status()
+        return response.json()
+
+    def get(self, gene_id):
+        full_url = urljoin(self.url, gene_id)
+        response = requests.get(full_url)
+        response.raise_for_status()
+        return response.json()
+
+    def post(self, data):
+        response = requests.post(f"{self.url}", json=data, headers=self.HEADERS)
+        response.raise_for_status()
+        return response.json()
+
+    def put(self, gene_id, data):
+        full_url = urljoin(self.url, gene_id)
+        response = requests.put(f"{full_url}/", json=data, headers=self.HEADERS)
+        response.raise_for_status()
+        return response.json()
diff --git a/backend/metagenedb/common/api.py b/backend/metagenedb/common/utils/api/togows.py
similarity index 100%
rename from backend/metagenedb/common/api.py
rename to backend/metagenedb/common/utils/api/togows.py
-- 
GitLab