aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py')
-rw-r--r--.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py b/.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py
new file mode 100644
index 00000000..b0a909d2
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/requests_toolbelt/utils/formdata.py
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+"""Implementation of nested form-data encoding function(s)."""
+from .._compat import basestring
+from .._compat import urlencode as _urlencode
+
+
+__all__ = ('urlencode',)
+
+
+def urlencode(query, *args, **kwargs):
+ """Handle nested form-data queries and serialize them appropriately.
+
+ There are times when a website expects a nested form data query to be sent
+ but, the standard library's urlencode function does not appropriately
+ handle the nested structures. In that case, you need this function which
+ will flatten the structure first and then properly encode it for you.
+
+ When using this to send data in the body of a request, make sure you
+ specify the appropriate Content-Type header for the request.
+
+ .. code-block:: python
+
+ import requests
+ from requests_toolbelt.utils import formdata
+
+ query = {
+ 'my_dict': {
+ 'foo': 'bar',
+ 'biz': 'baz",
+ },
+ 'a': 'b',
+ }
+
+ resp = requests.get(url, params=formdata.urlencode(query))
+ # or
+ resp = requests.post(
+ url,
+ data=formdata.urlencode(query),
+ headers={
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ )
+
+ Similarly, you can specify a list of nested tuples, e.g.,
+
+ .. code-block:: python
+
+ import requests
+ from requests_toolbelt.utils import formdata
+
+ query = [
+ ('my_list', [
+ ('foo', 'bar'),
+ ('biz', 'baz'),
+ ]),
+ ('a', 'b'),
+ ]
+
+ resp = requests.get(url, params=formdata.urlencode(query))
+ # or
+ resp = requests.post(
+ url,
+ data=formdata.urlencode(query),
+ headers={
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ )
+
+ For additional parameter and return information, see the official
+ `urlencode`_ documentation.
+
+ .. _urlencode:
+ https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlencode
+ """
+ expand_classes = (dict, list, tuple)
+ original_query_list = _to_kv_list(query)
+
+ if not all(_is_two_tuple(i) for i in original_query_list):
+ raise ValueError("Expected query to be able to be converted to a "
+ "list comprised of length 2 tuples.")
+
+ query_list = original_query_list
+ while any(isinstance(v, expand_classes) for _, v in query_list):
+ query_list = _expand_query_values(query_list)
+
+ return _urlencode(query_list, *args, **kwargs)
+
+
+def _to_kv_list(dict_or_list):
+ if hasattr(dict_or_list, 'items'):
+ return list(dict_or_list.items())
+ return dict_or_list
+
+
+def _is_two_tuple(item):
+ return isinstance(item, (list, tuple)) and len(item) == 2
+
+
+def _expand_query_values(original_query_list):
+ query_list = []
+ for key, value in original_query_list:
+ if isinstance(value, basestring):
+ query_list.append((key, value))
+ else:
+ key_fmt = key + '[%s]'
+ value_list = _to_kv_list(value)
+ query_list.extend((key_fmt % k, v) for k, v in value_list)
+ return query_list