Exemple #1
0
def ListDataApiView(request):
    """
    List all data entries for the user
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
                        status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(
        request
    )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method

    data = hal.create_base_structure(
        request, hal.generate_content_type(request.accepted_media_type))

    keys = model_access.get_all_keys(request.user.username)
    embedded_items = []
    for k in keys:
        # remove the leading /
        k = k[1:]
        url = hal.get_abs_url_for_iwc(request) + 'self/data/' + k
        data = hal.add_link_item(
            url, data,
            hal.generate_content_type(
                renderers.DataObjectResourceRenderer.media_type))

        # add data items to _embedded
        key = '/' + k
        try:
            instance = model_access.get_data_resource(request.user.username,
                                                      key)
            if not instance:
                return Response(status=status.HTTP_404_NOT_FOUND)
            serializer = serializers.DataResourceSerializer(instance,
                                                            data=request.data,
                                                            context={
                                                                'request':
                                                                request,
                                                                'key': key
                                                            },
                                                            partial=True)
            if not serializer.is_valid():
                logger.error('{0!s}'.format(serializer.errors))
                return Response(serializer.errors,
                                status=status.HTTP_400_BAD_REQUEST)
            item = hal.add_hal_structure(
                serializer.data, request,
                hal.generate_content_type(
                    renderers.DataObjectResourceRenderer.media_type))
            item['_links']['self']['href'] += k
            embedded_items.append(item)
        except Exception as e:
            # TODO debug
            raise e

        data['_embedded']['item'] = embedded_items

    return Response(data)
Exemple #2
0
def ListDataApiView(request):
    """
    List all data entries for the user
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(request)

    data = hal.create_base_structure(request,
        hal.generate_content_type(request.accepted_media_type))

    keys = model_access.get_all_keys(request.user.username)
    embedded_items = []
    for k in keys:
        # remove the leading /
        k = k[1:]
        url = hal.get_abs_url_for_iwc(request) + 'self/data/' + k
        data = hal.add_link_item(url, data, hal.generate_content_type(
            renderers.DataObjectResourceRenderer.media_type))

        # add data items to _embedded
        key = '/' + k
        try:
            instance = model_access.get_data_resource(request.user.username,
                key)
            if not instance:
                return Response(status=status.HTTP_404_NOT_FOUND)
            serializer = serializers.DataResourceSerializer(instance,
                data=request.data, context={'request': request, 'key': key},
                partial=True)
            if not serializer.is_valid():
                logger.error('%s' % serializer.errors)
                return Response(serializer.errors,
                    status=status.HTTP_400_BAD_REQUEST)
            item = hal.add_hal_structure(serializer.data, request,
                hal.generate_content_type(
                    renderers.DataObjectResourceRenderer.media_type))
            item['_links']['self']['href'] += k
            embedded_items.append(item)
        except Exception as e:
            # TODO debug
            raise e

        data['_embedded']['item'] = embedded_items


    return Response(data)
Exemple #3
0
def ApplicationView(request, id='0'):
    """
    Single application
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
                        status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(
        request
    )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
    profile = model_access.get_profile(request.user.username)

    # TODO: only include the fields that are necessary for IWC. This will also
    # allow us to sever ties with ozpcenter.api.listing.serializers

    # This minimal definition of what a Listing object must have should be
    # advertised so that others can use IWC with their own systems
    queryset = listing_model_access.get_listing_by_id(profile.user.username,
                                                      id)
    if not queryset:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = listing_serializers.ListingSerializer(
        queryset, context={'request': request})
    data = serializer.data
    data = hal.add_hal_structure(
        data, request, hal.generate_content_type(request.accepted_media_type))

    return Response(data)
Exemple #4
0
def ApplicationView(request, id='0'):
    """
    Single application
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(request)
    profile = model_access.get_profile(request.user.username)

    # TODO: only include the fields that are necessary for IWC. This will also
    # allow us to sever ties with ozpcenter.api.listing.serializers

    # This minimal definition of what a Listing object must have should be
    # advertised so that others can use IWC with their own systems
    queryset = listing_model_access.get_listing_by_id(profile.user.username, id)
    if not queryset:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = listing_serializers.ListingSerializer(queryset,
            context={'request': request})
    data = serializer.data
    data = hal.add_hal_structure(data, request, hal.generate_content_type(
        request.accepted_media_type))

    return Response(data)
Exemple #5
0
def IntentView(request, id='0'):
    """
    Single intent
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
                        status=status.HTTP_406_NOT_ACCEPTABLE)

    root_url = hal.get_abs_url_for_iwc(
        request
    )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
    profile = model_access.get_profile(
        request.user.username
    )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method

    queryset = intent_model_access.get_intent_by_id(id)
    if not queryset:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = intent_serializers.IntentSerializer(
        queryset, context={'request': request})
    data = serializer.data
    data = hal.add_hal_structure(
        data, request, hal.generate_content_type(request.accepted_media_type))

    return Response(data)
Exemple #6
0
def SystemView(request):
    """
    System view - TODO
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(request)
    profile = model_access.get_profile(request.user.username)

    data = hal.create_base_structure(request, hal.generate_content_type(
        request.accepted_media_type))
    data["version"] = "1.0"
    data["name"] = "TBD"
    return Response(data)
Exemple #7
0
def ApplicationListView(request):
    """
    List of applications
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
                        status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(request)
    profile = model_access.get_profile(request.user.username)
    data = hal.create_base_structure(
        request, hal.generate_content_type(request.accepted_media_type))
    applications = listing_model_access.get_listings(profile.user.username)
    items = []
    embedded_items = []
    for i in applications:
        item = {
            "href":
            '{0!s}listing/{1!s}/'.format(listing_root_url, i.id),
            "type":
            hal.generate_content_type(
                renderers.ApplicationResourceRenderer.media_type)
        }
        items.append(item)

        embedded = {'_links': {'self': item}}
        embedded['id'] = i.id
        embedded['title'] = i.title
        embedded['unique_name'] = i.unique_name

        intents = []
        for j in i.intents.all():
            intent = {
                'action': j.action,
                'media_type': j.media_type,
                'label': j.label,
                'icon_id': j.icon.id
            }
            intents.append(intent)

        embedded['intents'] = intents
        embedded_items.append(embedded)

    data['_links']['item'] = items
    data['_embedded']['item'] = embedded_items

    return Response(data)
Exemple #8
0
    def retrieve(self, request, pk):
        if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
            return Response('Invalid version requested', status=status.HTTP_406_NOT_ACCEPTABLE)

        root_url = hal.get_abs_url_for_iwc(request)  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
        profile = model_access.get_profile(request.user.username)  # flake8: noqa TODO: Is Necessary? - Variable not being used in method

        queryset = intent_model_access.get_intent_by_id(pk)
        if not queryset:
            return Response(status=status.HTTP_404_NOT_FOUND)
        serializer = intent_serializers.IntentSerializer(queryset,
                context={'request': request})
        data = serializer.data
        data = hal.add_hal_structure(data, request,
            hal.generate_content_type(request.accepted_media_type))

        return Response(data)
Exemple #9
0
    def list(self, request):
        if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
            return Response('Invalid version requested',
                status=status.HTTP_406_NOT_ACCEPTABLE)

        root_url = hal.get_abs_url_for_iwc(request)
        profile = model_access.get_profile(request.user.username)  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
        data = hal.create_base_structure(request,
            hal.generate_content_type(request.accepted_media_type))
        intents = intent_model_access.get_all_intents()
        items = []
        for i in intents:
            item = {"href": '{0!s}intent/{1!s}/'.format(root_url, i.id)}
            items.append(item)
        data['_links']['item'] = items

        return Response(data)
Exemple #10
0
    def list(self, request):
        if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
            return Response('Invalid version requested',
                            status=status.HTTP_406_NOT_ACCEPTABLE)

        listing_root_url = hal.get_abs_url_for_iwc(
            request
        )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
        profile = model_access.get_profile(
            request.user.username
        )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method

        data = hal.create_base_structure(
            request, hal.generate_content_type(request.accepted_media_type))
        data["version"] = "1.0"
        data["name"] = "TBD"
        return Response(data)
Exemple #11
0
def IntentListView(request):
    """
    List of intents
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    root_url = hal.get_abs_url_for_iwc(request)
    profile = model_access.get_profile(request.user.username)
    data = hal.create_base_structure(request,
        hal.generate_content_type(request.accepted_media_type))
    intents = intent_model_access.get_all_intents()
    items = []
    for i in intents:
        item = {"href": '%sintent/%s/' % (root_url, i.id)}
        items.append(item)
    data['_links']['item'] = items

    return Response(data)
Exemple #12
0
def IntentView(request, id='0'):
    """
    Single intent
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    root_url = hal.get_abs_url_for_iwc(request)
    profile = model_access.get_profile(request.user.username)

    queryset = intent_model_access.get_intent_by_id(id)
    if not queryset:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = intent_serializers.IntentSerializer(queryset,
            context={'request': request})
    data = serializer.data
    data = hal.add_hal_structure(data, request,
        hal.generate_content_type(request.accepted_media_type))

    return Response(data)
Exemple #13
0
def ApplicationListView(request):
    """
    List of applications
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(request)
    profile = model_access.get_profile(request.user.username)
    data = hal.create_base_structure(request, hal.generate_content_type(
        request.accepted_media_type))
    applications = listing_model_access.get_listings(profile.user.username)
    items = []
    embedded_items = []
    for i in applications:
        item = {"href": '%slisting/%s/' % (listing_root_url, i.id),
            "type": hal.generate_content_type(renderers.ApplicationResourceRenderer.media_type)}
        items.append(item)

        embedded = {'_links': {'self': item}}
        embedded['id'] = i.id
        embedded['title'] = i.title
        embedded['unique_name'] = i.unique_name

        intents = []
        for j in i.intents.all():
            intent = {'action': j.action, 'media_type': j.media_type,
            'label': j.label, 'icon_id': j.icon.id}
            intents.append(intent)

        embedded['intents'] = intents
        embedded_items.append(embedded)

    data['_links']['item'] = items
    data['_embedded']['item'] = embedded_items

    return Response(data)
Exemple #14
0
    def list(self, request):
        if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
            return Response('Invalid version requested',
                status=status.HTTP_406_NOT_ACCEPTABLE)

        root_url = request.build_absolute_uri('/')
        profile = model_access.get_profile(request.user.username)
        data = hal.create_base_structure(request,
            hal.generate_content_type(request.accepted_media_type))
        data['_links'][hal.APPLICATION_REL] = {
            "href": '{0!s}self/application/'.format((hal.get_abs_url_for_iwc(request))),
            "type": hal.generate_content_type(
                renderers.ApplicationListResourceRenderer.media_type)
        }
        data['_links'][hal.INTENT_REL] = {
            "href": '{0!s}self/intent/'.format((hal.get_abs_url_for_iwc(request))),
            "type": hal.generate_content_type(
                renderers.IntentListResourceRenderer.media_type)
        }
        data['_links'][hal.SYSTEM_REL] = {
            "href": '{0!s}iwc-api/system/'.format((root_url)),
            "type": hal.generate_content_type(
                renderers.SystemResourceRenderer.media_type)
        }
        data['_links'][hal.USER_REL] = {
            "href": '{0!s}self/'.format((hal.get_abs_url_for_iwc(request))),
            "type": hal.generate_content_type(
                renderers.UserResourceRenderer.media_type)
        }
        data['_links'][hal.USER_DATA_REL] = {
            "href": '{0!s}self/data/'.format((hal.get_abs_url_for_iwc(request))),
            "type": hal.generate_content_type(
                renderers.DataObjectListResourceRenderer.media_type)
        }

        data['_links'][hal.DATA_ITEM_REL] = {
            "href": '{0!s}self/data/{{+resource}}'.format((hal.get_abs_url_for_iwc(request))),
            "type": hal.generate_content_type(renderers.DataObjectResourceRenderer.media_type),
            "templated": True
        }

        data['_links'][hal.APPLICATION_ITEM_REL] = {
            "href": '{0!s}listing/{{+resource}}/'.format((hal.get_abs_url_for_iwc(request))),
            "type": hal.generate_content_type(renderers.ApplicationResourceRenderer.media_type),
            "templated": True
        }

        # add embedded data
        data["_embedded"][hal.USER_REL] = {
            "username": profile.user.username,
            "name": profile.display_name,
            "_links": {
                "self": {
                    "href": '{0!s}self/'.format((hal.get_abs_url_for_iwc(request))),
                    "type": hal.generate_content_type(
                        renderers.UserResourceRenderer.media_type)
                }
            }
        }

        data["_embedded"][hal.SYSTEM_REL] = {
            "version": '1.0',
            "name": 'TBD',
            "_links": {
                "self": {
                    "href": '{0!s}system/'.format((hal.get_abs_url_for_iwc(request))),
                    "type": hal.generate_content_type(
                        renderers.SystemResourceRenderer.media_type)
                }
            }
        }
        return Response(data)
Exemple #15
0
def DataApiView(request, key=None):
    """
    Data API

    ---
    request_serializer: serializers.DataResourceSerializer
    """
    # ensure key starts with a / and does not end with one
    if not key.startswith('/'):
        key = '/' + key
    if key.endswith('/'):
        key = key[:-1]

    logger.debug('Got IWC Data request for key {0!s}'.format(key))

    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
                        status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(
        request
    )  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
    data = hal.create_base_structure(
        request,  # flake8: noqa TODO: Is Necessary? - Variable not being used in method
        hal.generate_content_type(request.accepted_media_type))

    if request.method == 'PUT':
        try:
            logger.debug('request.data: {0!s}'.format(request.data))
            instance = model_access.get_data_resource(request.user.username,
                                                      key)
            if instance:
                serializer = serializers.DataResourceSerializer(
                    instance,
                    data=request.data,
                    context={
                        'request': request,
                        'key': key
                    },
                    partial=True)
                if not serializer.is_valid():
                    logger.error('{0!s}'.format(serializer.errors))
                    return Response(serializer.errors,
                                    status=status.HTTP_400_BAD_REQUEST)
                serializer.save()
                resp = serializer.data
                resp = hal.add_hal_structure(
                    resp, request,
                    hal.generate_content_type(request.accepted_media_type))
                return Response(resp, status=status.HTTP_200_OK)
            else:
                serializer = serializers.DataResourceSerializer(
                    data=request.data,
                    context={
                        'request': request,
                        'key': key
                    },
                    partial=True)
                if not serializer.is_valid():
                    logger.error('ERROR: {0!s}'.format(serializer.errors))
                    return Response(serializer.errors,
                                    status=status.HTTP_400_BAD_REQUEST)
                serializer.save()
                resp = serializer.data
                resp = hal.add_hal_structure(
                    resp, request,
                    hal.generate_content_type(request.accepted_media_type))
                return Response(resp, status=status.HTTP_201_CREATED)
        except Exception as e:
            # TODO debug
            # raise e
            return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
    if request.method == 'GET':
        try:
            instance = model_access.get_data_resource(request.user.username,
                                                      key)
            if not instance:
                return Response(status=status.HTTP_404_NOT_FOUND)
            serializer = serializers.DataResourceSerializer(instance,
                                                            data=request.data,
                                                            context={
                                                                'request':
                                                                request,
                                                                'key': key
                                                            },
                                                            partial=True)
            if not serializer.is_valid():
                logger.error('{0!s}'.format(serializer.errors))
                return Response(serializer.errors,
                                status=status.HTTP_400_BAD_REQUEST)
            resp = serializer.data
            resp = hal.add_hal_structure(
                resp, request,
                hal.generate_content_type(request.accepted_media_type))
            return Response(resp, status=status.HTTP_200_OK)
        except Exception as e:
            # TODO debug
            raise e
            return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
    if request.method == 'DELETE':
        try:
            instance = model_access.get_data_resource(request.user.username,
                                                      key)
            if instance:
                instance.delete()
            else:
                return Response(status=status.HTTP_404_NOT_FOUND)
            return Response(status=status.HTTP_204_NO_CONTENT)
        except Exception as e:
            # TODO debug
            raise e
            return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
Exemple #16
0
def RootApiView(request):
    """
    IWC Root
    """
    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
                        status=status.HTTP_406_NOT_ACCEPTABLE)

    root_url = request.build_absolute_uri('/')
    profile = model_access.get_profile(request.user.username)
    data = hal.create_base_structure(
        request, hal.generate_content_type(request.accepted_media_type))
    data['_links'][hal.APPLICATION_REL] = {
        "href":
        '{0!s}self/application/'.format((hal.get_abs_url_for_iwc(request))),
        "type":
        hal.generate_content_type(
            renderers.ApplicationListResourceRenderer.media_type)
    }
    data['_links'][hal.INTENT_REL] = {
        "href":
        '{0!s}self/intent/'.format((hal.get_abs_url_for_iwc(request))),
        "type":
        hal.generate_content_type(
            renderers.IntentListResourceRenderer.media_type)
    }
    data['_links'][hal.SYSTEM_REL] = {
        "href":
        '{0!s}iwc-api/system/'.format((root_url)),
        "type":
        hal.generate_content_type(renderers.SystemResourceRenderer.media_type)
    }
    data['_links'][hal.USER_REL] = {
        "href":
        '{0!s}self/'.format((hal.get_abs_url_for_iwc(request))),
        "type":
        hal.generate_content_type(renderers.UserResourceRenderer.media_type)
    }
    data['_links'][hal.USER_DATA_REL] = {
        "href":
        '{0!s}self/data/'.format((hal.get_abs_url_for_iwc(request))),
        "type":
        hal.generate_content_type(
            renderers.DataObjectListResourceRenderer.media_type)
    }

    data['_links'][hal.DATA_ITEM_REL] = {
        "href":
        '{0!s}self/data/{{+resource}}'.format(
            (hal.get_abs_url_for_iwc(request))),
        "type":
        hal.generate_content_type(
            renderers.DataObjectResourceRenderer.media_type),
        "templated":
        True
    }

    data['_links'][hal.APPLICATION_ITEM_REL] = {
        "href":
        '{0!s}listing/{{+resource}}/'.format(
            (hal.get_abs_url_for_iwc(request))),
        "type":
        hal.generate_content_type(
            renderers.ApplicationResourceRenderer.media_type),
        "templated":
        True
    }

    # add embedded data
    data["_embedded"][hal.USER_REL] = {
        "username": profile.user.username,
        "name": profile.display_name,
        "_links": {
            "self": {
                "href":
                '{0!s}self/'.format((hal.get_abs_url_for_iwc(request))),
                "type":
                hal.generate_content_type(
                    renderers.UserResourceRenderer.media_type)
            }
        }
    }

    data["_embedded"][hal.SYSTEM_REL] = {
        "version": '1.0',
        "name": 'TBD',
        "_links": {
            "self": {
                "href":
                '{0!s}system/'.format((hal.get_abs_url_for_iwc(request))),
                "type":
                hal.generate_content_type(
                    renderers.SystemResourceRenderer.media_type)
            }
        }
    }
    return Response(data)
Exemple #17
0
def DataApiView(request, key=None):
    """
    Data API

    ---
    request_serializer: serializers.DataResourceSerializer
    """
    # ensure key starts with a / and does not end with one
    if not key.startswith('/'):
        key = '/' + key
    if key.endswith('/'):
        key = key[:-1]

    logger.debug('Got IWC Data request for key %s' % key)

    if not hal.validate_version(request.META.get('HTTP_ACCEPT')):
        return Response('Invalid version requested',
            status=status.HTTP_406_NOT_ACCEPTABLE)

    listing_root_url = hal.get_abs_url_for_iwc(request)
    data = hal.create_base_structure(request,
        hal.generate_content_type(
            request.accepted_media_type))

    if request.method == 'PUT':
        try:
            logger.debug('request.data: %s' % request.data)
            instance = model_access.get_data_resource(request.user.username,
                key)
            if instance:
                serializer = serializers.DataResourceSerializer(instance,
                    data=request.data, context={'request': request, 'key': key},
                    partial=True)
                if not serializer.is_valid():
                    logger.error('%s' % serializer.errors)
                    return Response(serializer.errors,
                        status=status.HTTP_400_BAD_REQUEST)
                serializer.save()
                resp = serializer.data
                resp = hal.add_hal_structure(resp, request,
                    hal.generate_content_type(
                        request.accepted_media_type))
                return Response(resp, status=status.HTTP_200_OK)
            else:
                serializer = serializers.DataResourceSerializer(
                    data=request.data, context={'request': request, 'key': key},
                    partial=True)
                if not serializer.is_valid():
                    logger.error('ERROR: %s' % serializer.errors)
                    return Response(serializer.errors,
                        status=status.HTTP_400_BAD_REQUEST)
                serializer.save()
                resp = serializer.data
                resp = hal.add_hal_structure(resp, request,
                    hal.generate_content_type(
                        request.accepted_media_type))
                return Response(resp, status=status.HTTP_201_CREATED)
        except Exception as e:
            # TODO debug
            # raise e
            return Response(str(e),
                status=status.HTTP_400_BAD_REQUEST)
    if request.method == 'GET':
        try:
            instance = model_access.get_data_resource(request.user.username,
                key)
            if not instance:
                return Response(status=status.HTTP_404_NOT_FOUND)
            serializer = serializers.DataResourceSerializer(instance,
                data=request.data, context={'request': request, 'key': key},
                partial=True)
            if not serializer.is_valid():
                logger.error('%s' % serializer.errors)
                return Response(serializer.errors,
                    status=status.HTTP_400_BAD_REQUEST)
            resp = serializer.data
            resp = hal.add_hal_structure(resp, request,
                hal.generate_content_type(
                    request.accepted_media_type))
            return Response(resp, status=status.HTTP_200_OK)
        except Exception as e:
            # TODO debug
            raise e
            return Response(str(e),
                status=status.HTTP_400_BAD_REQUEST)
    if request.method == 'DELETE':
        try:
            instance = model_access.get_data_resource(request.user.username,
                key)
            if instance:
                instance.delete()
            else:
                return Response(status=status.HTTP_404_NOT_FOUND)
            return Response(status=status.HTTP_204_NO_CONTENT)
        except Exception as e:
            # TODO debug
            raise e
            return Response(str(e),
                status=status.HTTP_400_BAD_REQUEST)