Source code for irodsinfo.views_api

"""REST API views for the irodsinfo app"""

import logging

from rest_framework.permissions import IsAuthenticated
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.versioning import AcceptHeaderVersioning
from rest_framework.views import APIView

# Projectroles dependency
from projectroles.plugins import get_backend_api

from irodsinfo.views import IrodsConfigMixin


logger = logging.getLogger(__name__)


# Local constants
IRODSINFO_API_MEDIA_TYPE = 'application/vnd.bihealth.sodar.irodsinfo+json'
IRODSINFO_API_ALLOWED_VERSIONS = ['1.0']
IRODSINFO_API_DEFAULT_VERSION = '1.0'


class IrodsinfoAPIVersioningMixin:
    """
    Irodsinfo API view versioning mixin for overriding media type and
    accepted versions.
    """

    class IrodsinfoAPIRenderer(JSONRenderer):
        media_type = IRODSINFO_API_MEDIA_TYPE

    class IrodsinfoAPIVersioning(AcceptHeaderVersioning):
        allowed_versions = IRODSINFO_API_ALLOWED_VERSIONS
        default_version = IRODSINFO_API_DEFAULT_VERSION

    renderer_classes = [IrodsinfoAPIRenderer]
    versioning_class = IrodsinfoAPIVersioning


[docs] class IrodsEnvRetrieveAPIView( IrodsConfigMixin, IrodsinfoAPIVersioningMixin, APIView ): """ Retrieve iRODS environment file for the current user. **URL:** ``/irods/api/environment`` **Methods:** ``GET`` **Returns:** - ``irods_environment``: iRODS client environment (dict) """ permission_classes = [IsAuthenticated] def get(self, request, *args, **kwargs): """Get iRODS environment file""" try: irods_backend = get_backend_api('omics_irods') if not irods_backend: return Response( {'detail': 'iRODS backend not enabled'}, status=404 ) env = self.get_irods_client_env(request.user, irods_backend) return Response({'irods_environment': env}) except Exception as ex: logger.error('iRODS config retrieval failed: {}'.format(ex)) return Response( {'detail': 'iRODS config retrieval failed'}, status=400 )