Exemple #1
0
    def get_discriminant(self, request: WSGIRequest) -> str:
        try:
            if request.api_params.resource_discriminator:
                return request.api_params.resource_discriminator
        except AttributeError:
            pass

        if request.method in self.resource_discriminate_methods:
            discriminant = (request.GET.get(self.resource_discriminative_param)
                            or self.default_discriminative_value)
            if settings.API_RESOURCE_SET_PARAM and (
                    discriminant != self.default_discriminative_value
                    or settings.API_RESOURCE_SET_PARAM_FOR_DEFAULT):
                request.resource_args = {
                    self.resource_discriminative_param: discriminant
                }
            return discriminant
        return self.default_discriminative_value
Exemple #2
0
    def dispatch(self, request: WSGIRequest, *args: typing.Any,
                 **kwargs: typing.Any) -> Response:
        if request.method in self.resource_discriminate_methods:
            discriminant = self.get_discriminant(request)

            if (settings.API_RESOURCE_SET_PARAM
                    and (discriminant != self.default_discriminative_value
                         or settings.API_RESOURCE_SET_PARAM_FOR_DEFAULT)):
                request.resource_args = {
                    self.resource_discriminative_param: discriminant,
                }
        else:
            discriminant = self.default_discriminative_value

        resource_dispatch = self.resource_handlers_map.get(discriminant)
        if resource_dispatch:
            return resource_dispatch(request, *args, **kwargs)
        raise Http404()