diff --git a/backend/metagenedb/api/catalog/views/gene.py b/backend/metagenedb/api/catalog/views/gene.py index db94f34a416893072984c60f1fdc476caac10cd4..fe811b97cdfe7de7cd336e6c53ebb07cb98d3d7a 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 0000000000000000000000000000000000000000..17aa35c5b8620f051849cad19b9e4472bb53632a --- /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 0000000000000000000000000000000000000000..5db3dd071e90095df35d235446d38f10c29079f6 --- /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