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
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()