def parse_items(items, headers_class=CaseInsensitiveDict, data_class=OrderedDict, files_class=DataDict, params_class=ParamsDict): """Parse `KeyValue` `items` into `data`, `headers`, `files`, and `params`. """ headers = [] data = [] files = [] params = [] for item in items: value = item.value if item.sep == SEP_HEADERS: target = headers elif item.sep == SEP_QUERY: target = params elif item.sep == SEP_FILES: try: with open(os.path.expanduser(value), 'rb') as f: value = (os.path.basename(value), BytesIO(f.read()), get_content_type(value)) except IOError as e: raise ParseError('"%s": %s' % (item.orig, e)) target = files elif item.sep in SEP_GROUP_DATA_ITEMS: if item.sep in SEP_GROUP_DATA_EMBED_ITEMS: try: with open(os.path.expanduser(value), 'rb') as f: value = f.read().decode('utf8') except IOError as e: raise ParseError('"%s": %s' % (item.orig, e)) except UnicodeDecodeError: raise ParseError('"%s": cannot embed the content of "%s",' ' not a UTF8 or ASCII-encoded text file' % (item.orig, item.value)) if item.sep in SEP_GROUP_RAW_JSON_ITEMS: try: value = load_json_preserve_order(value) except ValueError as e: raise ParseError('"%s": %s' % (item.orig, e)) target = data else: raise TypeError(item) target.append((item.key, value)) return RequestItems(headers_class(headers), data_class(data), files_class(files), params_class(params))
def parse_items( items, headers_class=CaseInsensitiveDict, data_class=OrderedDict, files_class=DataDict, params_class=ParamsDict ): """Parse `KeyValue` `items` into `data`, `headers`, `files`, and `params`. """ headers = [] data = [] files = [] params = [] for item in items: value = item.value if item.sep == SEP_HEADERS: target = headers elif item.sep == SEP_QUERY: target = params elif item.sep == SEP_FILES: try: with open(os.path.expanduser(value), "rb") as f: value = (os.path.basename(value), BytesIO(f.read()), get_content_type(value)) except IOError as e: raise ParseError('"%s": %s' % (item.orig, e)) target = files elif item.sep in SEP_GROUP_DATA_ITEMS: if item.sep in SEP_GROUP_DATA_EMBED_ITEMS: try: with open(os.path.expanduser(value), "rb") as f: value = f.read().decode("utf8") except IOError as e: raise ParseError('"%s": %s' % (item.orig, e)) except UnicodeDecodeError: raise ParseError( '"%s": cannot embed the content of "%s",' " not a UTF8 or ASCII-encoded text file" % (item.orig, item.value) ) if item.sep in SEP_GROUP_RAW_JSON_ITEMS: try: value = load_json_preserve_order(value) except ValueError as e: raise ParseError('"%s": %s' % (item.orig, e)) target = data else: raise TypeError(item) target.append((item.key, value)) return RequestItems(headers_class(headers), data_class(data), files_class(files), params_class(params))
def load_json(arg: KeyValueArg, contents: str) -> JSONType: try: return load_json_preserve_order(contents) except ValueError as e: raise ParseError('"%s": %s' % (arg.orig, e))