diff --git a/backend/metagenedb/api/catalog/views/gene.py b/backend/metagenedb/api/catalog/views/gene.py index fe811b97cdfe7de7cd336e6c53ebb07cb98d3d7a..db94f34a416893072984c60f1fdc476caac10cd4 100644 --- a/backend/metagenedb/api/catalog/views/gene.py +++ b/backend/metagenedb/api/catalog/views/gene.py @@ -1,4 +1,5 @@ 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 @@ -50,6 +51,21 @@ 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