def _fallback_view(request): # Maybe we failed to match any definitions for the request method? if request.method not in service.defined_methods: response = HTTPMethodNotAllowed() response.allow = service.defined_methods raise response # Maybe we failed to match an acceptable content-type? # First search all the definitions to find the acceptable types. # XXX: precalculate this like the defined_methods list? acceptable = [] supported_contenttypes = [] for method, _, args in service.definitions: if method != request.method: continue if 'accept' in args: acceptable.extend( service.get_acceptable(method, filter_callables=True)) acceptable.extend( request.info.get('acceptable', [])) acceptable = list(set(acceptable)) # Now check if that was actually the source of the problem. if not request.accept.acceptable_offers(offers=acceptable): request.errors.add( 'header', 'Accept', 'Accept header should be one of {0}'.format( acceptable).encode('ascii')) request.errors.status = HTTPNotAcceptable.code error = service.error_handler(request) raise error if 'content_type' in args: supported_contenttypes.extend( service.get_contenttypes(method, filter_callables=True)) supported_contenttypes.extend( request.info.get('supported_contenttypes', [])) supported_contenttypes = list(set(supported_contenttypes)) # Now check if that was actually the source of the problem. if not content_type_matches(request, supported_contenttypes): request.errors.add( 'header', 'Content-Type', 'Content-Type header should be one of {0}'.format( supported_contenttypes).encode('ascii')) request.errors.status = HTTPUnsupportedMediaType.code error = service.error_handler(request) raise error # In the absence of further information about what went wrong, # let upstream deal with the mismatch. # After "custom predicates" feature has been added there is no need in # this line. Instead requests will be filtered by "custom predicates" # feature filter and exception "404 Not found" error will be raised. In # order to avoid unpredictable cases, we left this line in place and # excluded it from coverage. raise PredicateMismatch(service.name) # pragma: no cover
def _fallback_view(request): # Maybe we failed to match any definitions for the request method? if request.method not in service.defined_methods: response = HTTPMethodNotAllowed() response.allow = service.defined_methods raise response # Maybe we failed to match an acceptable content-type? # First search all the definitions to find the acceptable types. # XXX: precalculate this like the defined_methods list? acceptable = [] supported_contenttypes = [] for method, _, args in service.definitions: if method != request.method: continue if 'accept' in args: acceptable.extend( service.get_acceptable(method, filter_callables=True)) acceptable.extend( request.info.get('acceptable', [])) acceptable = list(set(acceptable)) # Now check if that was actually the source of the problem. if not request.accept.best_match(acceptable): request.errors.add( 'header', 'Accept', 'Accept header should be one of {0}'.format( acceptable).encode('ascii')) request.errors.status = HTTPNotAcceptable.code error = service.error_handler(request) raise error if 'content_type' in args: supported_contenttypes.extend( service.get_contenttypes(method, filter_callables=True)) supported_contenttypes.extend( request.info.get('supported_contenttypes', [])) supported_contenttypes = list(set(supported_contenttypes)) # Now check if that was actually the source of the problem. if not content_type_matches(request, supported_contenttypes): request.errors.add( 'header', 'Content-Type', 'Content-Type header should be one of {0}'.format( supported_contenttypes).encode('ascii')) request.errors.status = HTTPUnsupportedMediaType.code error = service.error_handler(request) raise error # In the absence of further information about what went wrong, # let upstream deal with the mismatch. # After "custom predicates" feature has been added there is no need in # this line. Instead requests will be filtered by "custom predicates" # feature filter and exception "404 Not found" error will be raised. In # order to avoid unpredictable cases, we left this line in place and # excluded it from coverage. raise PredicateMismatch(service.name) # pragma: no cover
def _fallback_view(request): # Maybe we failed to match any definitions for the request method? if request.method not in service.defined_methods: response = HTTPMethodNotAllowed() response.allow = service.defined_methods raise response # Maybe we failed to match an acceptable content-type? # First search all the definitions to find the acceptable types. # XXX: precalculate this like the defined_methods list? acceptable = [] supported_contenttypes = [] for method, _, args in service.definitions: if method != request.method: continue if 'accept' in args: acceptable.extend( service.get_acceptable(method, filter_callables=True)) acceptable.extend( request.info.get('acceptable', [])) acceptable = list(set(acceptable)) # Now check if that was actually the source of the problem. if not request.accept.best_match(acceptable): request.errors.add( 'header', 'Accept', 'Accept header should be one of {0}'.format( acceptable).encode('ascii')) request.errors.status = HTTPNotAcceptable.code error = service.error_handler(request.errors) raise error if 'content_type' in args: supported_contenttypes.extend( service.get_contenttypes(method, filter_callables=True)) supported_contenttypes.extend( request.info.get('supported_contenttypes', [])) supported_contenttypes = list(set(supported_contenttypes)) # Now check if that was actually the source of the problem. if not content_type_matches(request, supported_contenttypes): request.errors.add( 'header', 'Content-Type', 'Content-Type header should be one of {0}'.format( supported_contenttypes).encode('ascii')) request.errors.status = HTTPUnsupportedMediaType.code error = service.error_handler(request.errors) raise error # In the absence of further information about what went wrong, # let upstream deal with the mismatch. raise PredicateMismatch(service.name)