async def resolve(self, receive: ASGIReceive, headers: http.Headers, content_type: http.Header) -> FileStream: try: negotiate_content_type([self], content_type) except exceptions.NoCodecAvailable: raise exceptions.UnsupportedMediaType() return await self.decode(receive, headers)
def resolve(self, content: http.Body, headers: http.Headers): if not content: return None content_type = headers.get('Content-Type') try: codec = negotiate_content_type(self.codecs, content_type) except exceptions.NoCodecAvailable: raise exceptions.UnsupportedMediaType() try: return codec.decode(content, headers=headers) except exceptions.ParseError as exc: raise exceptions.BadRequest(str(exc))
def resolve(self, content: Body, headers: Headers, parameter: Parameter): if not content: raise NotImplementedError content_type = headers.get('Content-Type') try: codec = negotiate_content_type(self.codecs, content_type) except exceptions.NoCodecAvailable: raise exceptions.UnsupportedMediaType() try: value = codec.decode(content, headers=headers) except exceptions.ParseError as exc: raise exceptions.BadRequest(str(exc)) try: return self.handle_parameter(parameter, value) except Exception: raise exceptions.BadRequest(f"{parameter.name} invalid")
def get_request_data(headers: http.Headers, injector: Injector, settings: Settings): content_type = headers.get('Content-Type') if not content_type: return None media_type, _ = parse_options_header(content_type) parser_mapping = { parser.media_type: parser for parser in settings.get('PARSERS', parsers.DEFAULT_PARSERS) } if media_type not in parser_mapping: raise exceptions.UnsupportedMediaType() parser = parser_mapping[media_type] return injector.run(parser.parse)
def get_request_data(environ: WSGIEnviron): if not bool(environ.get('CONTENT_TYPE')): mimetype = None else: mimetype, _ = parse_options_header(environ['CONTENT_TYPE']) if mimetype is None: value = None elif mimetype == 'application/json': body = get_input_stream(environ).read() value = json.loads(body.decode('utf-8')) elif mimetype in ('multipart/form-data', 'application/x-www-form-urlencoded'): parser = FormDataParser() stream, form, files = parser.parse_from_environ(environ) value = ImmutableMultiDict(list(form.items()) + list(files.items())) else: raise exceptions.UnsupportedMediaType() return value
def build(cls, environ: WSGIEnviron): if not bool(environ.get('CONTENT_TYPE')): mimetype = None else: mimetype, _ = parse_options_header(environ['CONTENT_TYPE']) if mimetype is None: value = None elif mimetype == 'application/json': body = get_input_stream(environ).read() value = json.loads(body.decode('utf-8')) elif mimetype in ('multipart/form-data', 'application/x-www-form-urlencoded'): stream, form, files = parse_form_data(environ) value = ImmutableMultiDict(list(form.items()) + list(files.items())) else: raise exceptions.UnsupportedMediaType() if cls.schema is None: return value if not isinstance(value, cls.schema): value = validate(cls.schema, value) return value
async def get_request_data(headers: http.Headers, message: UMIMessage, channels: UMIChannels): content_type = headers.get('Content-Type') if content_type: mimetype, options = parse_options_header(content_type) else: mimetype, options = None, {} if mimetype is None: value = None elif mimetype == 'application/json': body = await get_body(message, channels) value = json.loads(body.decode('utf-8')) elif mimetype in ('multipart/form-data', 'application/x-www-form-urlencoded'): body = await get_body(message, channels) stream = io.BytesIO(body) content_length = _get_content_length(headers) parser = FormDataParser() stream, form, files = parser.parse(stream, mimetype, content_length, options) value = ImmutableMultiDict(list(form.items()) + list(files.items())) else: raise exceptions.UnsupportedMediaType() return value