Home / Function/ _encode_files() — requests Function Reference

_encode_files() — requests Function Reference

Architecture documentation for the _encode_files() function in models.py from the requests codebase.

Function python CoreAPI SessionLifecycle calls 2 called by 1

Entity Profile

Dependency Diagram

graph TD
  8078fe73_7320_a15b_369b_220683f56710["_encode_files()"]
  f47304c1_b2c6_e66a_f59e_e2534a06b3c8["RequestEncodingMixin"]
  8078fe73_7320_a15b_369b_220683f56710 -->|defined in| f47304c1_b2c6_e66a_f59e_e2534a06b3c8
  fdb744d2_4cc0_a0f9_c288_a0abeac5e58e["prepare_body()"]
  fdb744d2_4cc0_a0f9_c288_a0abeac5e58e -->|calls| 8078fe73_7320_a15b_369b_220683f56710
  1d5603b3_e7c9_dfae_a29a_d8c05ae35261["to_key_val_list()"]
  8078fe73_7320_a15b_369b_220683f56710 -->|calls| 1d5603b3_e7c9_dfae_a29a_d8c05ae35261
  404297ac_4651_dcc5_7fd4_3b479d69ac50["guess_filename()"]
  8078fe73_7320_a15b_369b_220683f56710 -->|calls| 404297ac_4651_dcc5_7fd4_3b479d69ac50
  style 8078fe73_7320_a15b_369b_220683f56710 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

src/requests/models.py lines 139–205

    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(
                        (
                            field.decode("utf-8")
                            if isinstance(field, bytes)
                            else field,
                            v.encode("utf-8") if isinstance(v, str) else v,
                        )
                    )

        for k, v in files:
            # support for explicit filename
            ft = None
            fh = None
            if isinstance(v, (tuple, list)):
                if len(v) == 2:
                    fn, fp = v
                elif len(v) == 3:
                    fn, fp, ft = v
                else:
                    fn, fp, ft, fh = v
            else:
                fn = guess_filename(v) or k
                fp = v

            if isinstance(fp, (str, bytes, bytearray)):
                fdata = fp
            elif hasattr(fp, "read"):
                fdata = fp.read()
            elif fp is None:
                continue
            else:
                fdata = fp

            rf = RequestField(name=k, data=fdata, filename=fn, headers=fh)
            rf.make_multipart(content_type=ft)
            new_fields.append(rf)

        body, content_type = encode_multipart_formdata(new_fields)

        return body, content_type

Domain

Subdomains

Called By

Frequently Asked Questions

What does _encode_files() do?
_encode_files() is a function in the requests codebase, defined in src/requests/models.py.
Where is _encode_files() defined?
_encode_files() is defined in src/requests/models.py at line 139.
What does _encode_files() call?
_encode_files() calls 2 function(s): guess_filename, to_key_val_list.
What calls _encode_files()?
_encode_files() is called by 1 function(s): prepare_body.

Analyze Your Own Codebase

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

Try Supermodel Free