Home / Class/ RequestEncodingMixin Class — requests Architecture

RequestEncodingMixin Class — requests Architecture

Architecture documentation for the RequestEncodingMixin class in models.py from the requests codebase.

Entity Profile

Dependency Diagram

graph TD
  f47304c1_b2c6_e66a_f59e_e2534a06b3c8["RequestEncodingMixin"]
  461bc6e0_32e7_8eab_ec87_7226e7be0d13["models.py"]
  f47304c1_b2c6_e66a_f59e_e2534a06b3c8 -->|defined in| 461bc6e0_32e7_8eab_ec87_7226e7be0d13
  7eb4ec2a_ece9_e5fc_2c73_ce993b197d51["path_url()"]
  f47304c1_b2c6_e66a_f59e_e2534a06b3c8 -->|method| 7eb4ec2a_ece9_e5fc_2c73_ce993b197d51
  05aa4b39_ee11_5653_43fd_4e9fe439edad["_encode_params()"]
  f47304c1_b2c6_e66a_f59e_e2534a06b3c8 -->|method| 05aa4b39_ee11_5653_43fd_4e9fe439edad
  8078fe73_7320_a15b_369b_220683f56710["_encode_files()"]
  f47304c1_b2c6_e66a_f59e_e2534a06b3c8 -->|method| 8078fe73_7320_a15b_369b_220683f56710

Relationship Graph

Source Code

src/requests/models.py lines 86–205

class RequestEncodingMixin:
    @property
    def path_url(self):
        """Build the path URL to use."""

        url = []

        p = urlsplit(self.url)

        path = p.path
        if not path:
            path = "/"

        url.append(path)

        query = p.query
        if query:
            url.append("?")
            url.append(query)

        return "".join(url)

    @staticmethod
    def _encode_params(data):
        """Encode parameters in a piece of data.

        Will successfully encode parameters when passed as a dict or a list of
        2-tuples. Order is retained if data is a list of 2-tuples but arbitrary
        if parameters are supplied as a dict.
        """

        if isinstance(data, (str, bytes)):
            return data
        elif hasattr(data, "read"):
            return data
        elif hasattr(data, "__iter__"):
            result = []
            for k, vs in to_key_val_list(data):
                if isinstance(vs, basestring) or not hasattr(vs, "__iter__"):
                    vs = [vs]
                for v in vs:
                    if v is not None:
                        result.append(
                            (
                                k.encode("utf-8") if isinstance(k, str) else k,
                                v.encode("utf-8") if isinstance(v, str) else v,
                            )
                        )
            return urlencode(result, doseq=True)
        else:
            return data

    @staticmethod
    def _encode_files(files, data):
        """Build the body for a multipart/form-data request.

        Will successfully encode files when passed as a dict or a list of
        tuples. Order is retained if data is a list of tuples but arbitrary
        if parameters are supplied as a dict.
        The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype)
        or 4-tuples (filename, fileobj, contentype, custom_headers).
        """
        if not files:
            raise ValueError("Files must be provided.")
        elif isinstance(data, basestring):
            raise ValueError("Data must not be a string.")

        new_fields = []
        fields = to_key_val_list(data or {})
        files = to_key_val_list(files or {})

        for field, val in fields:
            if isinstance(val, basestring) or not hasattr(val, "__iter__"):
                val = [val]
            for v in val:
                if v is not None:
                    # Don't call str() on bytestrings: in Py3 it all goes wrong.
                    if not isinstance(v, bytes):
                        v = str(v)

                    new_fields.append(

Domain

Frequently Asked Questions

What is the RequestEncodingMixin class?
RequestEncodingMixin is a class in the requests codebase, defined in src/requests/models.py.
Where is RequestEncodingMixin defined?
RequestEncodingMixin is defined in src/requests/models.py at line 86.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free