diff --git a/backend/metagenedb/api/catalog/views/function.py b/backend/metagenedb/api/catalog/views/function.py index 949909d066562fcddc41839e7de74572b34dcb57..45f7ec7aa64aef88829260a9577bee93dfb1e9c3 100644 --- a/backend/metagenedb/api/catalog/views/function.py +++ b/backend/metagenedb/api/catalog/views/function.py @@ -1,19 +1,34 @@ + +import logging from rest_framework.response import Response from metagenedb.api.catalog.filters import FunctionFilter from metagenedb.apps.catalog.models import Function from metagenedb.apps.catalog.serializers import FunctionSerializer +from metagenedb.common.utils.external_api.togows import GetFunctionExternalInfo from .bulk_viewset import BulkViewSet +logger = logging.getLogger(__name__) + + class FunctionViewSet(BulkViewSet): queryset = Function.objects.all() serializer_class = FunctionSerializer lookup_field = 'function_id' filterset_class = FunctionFilter + def _get_external_info(self, db_data): + detailed_info_retriever = GetFunctionExternalInfo(db_data['function_id'], + db_data['source']) + detailed_data = detailed_info_retriever.get_details() # @TODO check consistency? + return detailed_data + def retrieve(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) - return Response(serializer.data) + returned_data = serializer.data + if request.query_params.get('detailed', None): + returned_data = self._get_external_info(returned_data) + return Response(returned_data) diff --git a/backend/metagenedb/api/catalog/views/test_function.py b/backend/metagenedb/api/catalog/views/test_function.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/backend/metagenedb/common/utils/external_api/test_togows.py b/backend/metagenedb/common/utils/external_api/test_togows.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/backend/metagenedb/common/utils/external_api/togows.py b/backend/metagenedb/common/utils/external_api/togows.py index d319e0fd38e7f32cbc1741a2bf1c33fe83ddc788..28cd6f7e524aaa851c1589c4f59f2e0c7f924a4c 100644 --- a/backend/metagenedb/common/utils/external_api/togows.py +++ b/backend/metagenedb/common/utils/external_api/togows.py @@ -1,5 +1,7 @@ import logging +from django.conf import settings + from bioapi.togows import TogoWSEntryAPI @@ -21,7 +23,13 @@ class GetFunctionExternalInfo: Get detailed information from KEGG orthology through Togows. """ kegg_api = TogoWSEntryAPI("kegg-orthology") - return kegg_api.get(self.function_id)[0] + response = kegg_api.get(self.function_id)[0] + response[settings.API_KEY_ADDITIONAL_INFO] = { + 'comment': f"Information retrieved from external source: {kegg_api.url}", + 'url': f"{kegg_api.url}{self.function_id}" + } + return response def get_details(self): + logger.info("Retrieving information from KEGG through togows") return getattr(self, f"_get_{self.source}", self._get_unknown_source)() diff --git a/backend/metagenedb/settings/django.py b/backend/metagenedb/settings/django.py index 53496e4c51acb2b6cd701334984e84201761d895..99b3700264216cfd800daefbf5af4bb6df2e2ad5 100644 --- a/backend/metagenedb/settings/django.py +++ b/backend/metagenedb/settings/django.py @@ -146,3 +146,6 @@ STATIC_ROOT = public_root('static') STATIC_URL = env.str('STATIC_URL', default='/static/') SECRET_KEY = env.str('SECRET_KEY', default='') + +# -- key for API when additional information is added to the payload +API_KEY_ADDITIONAL_INFO = env.str('API_KEY_ADDITIONAL_INFO', default='metagenedb_additional_info')