$98 GRAYBYTE WORDPRESS FILE MANAGER $65

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/alt/python37/lib64/python3.7/site-packages/aiohttp/

HOME
Current File : /opt/alt/python37/lib64/python3.7/site-packages/aiohttp//formdata.py
import io
from typing import Any, Iterable, List, Optional
from urllib.parse import urlencode

from multidict import MultiDict, MultiDictProxy

from . import hdrs, multipart, payload
from .helpers import guess_filename
from .payload import Payload

__all__ = ("FormData",)


class FormData:
    """Helper class for form body generation.

    Supports multipart/form-data and application/x-www-form-urlencoded.
    """

    def __init__(
        self,
        fields: Iterable[Any] = (),
        quote_fields: bool = True,
        charset: Optional[str] = None,
    ) -> None:
        self._writer = multipart.MultipartWriter("form-data")
        self._fields = []  # type: List[Any]
        self._is_multipart = False
        self._is_processed = False
        self._quote_fields = quote_fields
        self._charset = charset

        if isinstance(fields, dict):
            fields = list(fields.items())
        elif not isinstance(fields, (list, tuple)):
            fields = (fields,)
        self.add_fields(*fields)

    @property
    def is_multipart(self) -> bool:
        return self._is_multipart

    def add_field(
        self,
        name: str,
        value: Any,
        *,
        content_type: Optional[str] = None,
        filename: Optional[str] = None,
        content_transfer_encoding: Optional[str] = None,
    ) -> None:

        if isinstance(value, io.IOBase):
            self._is_multipart = True
        elif isinstance(value, (bytes, bytearray, memoryview)):
            if filename is None and content_transfer_encoding is None:
                filename = name

        type_options = MultiDict({"name": name})  # type: MultiDict[str]
        if filename is not None and not isinstance(filename, str):
            raise TypeError(
                "filename must be an instance of str. " "Got: %s" % filename
            )
        if filename is None and isinstance(value, io.IOBase):
            filename = guess_filename(value, name)
        if filename is not None:
            type_options["filename"] = filename
            self._is_multipart = True

        headers = {}
        if content_type is not None:
            if not isinstance(content_type, str):
                raise TypeError(
                    "content_type must be an instance of str. " "Got: %s" % content_type
                )
            headers[hdrs.CONTENT_TYPE] = content_type
            self._is_multipart = True
        if content_transfer_encoding is not None:
            if not isinstance(content_transfer_encoding, str):
                raise TypeError(
                    "content_transfer_encoding must be an instance"
                    " of str. Got: %s" % content_transfer_encoding
                )
            headers[hdrs.CONTENT_TRANSFER_ENCODING] = content_transfer_encoding
            self._is_multipart = True

        self._fields.append((type_options, headers, value))

    def add_fields(self, *fields: Any) -> None:
        to_add = list(fields)

        while to_add:
            rec = to_add.pop(0)

            if isinstance(rec, io.IOBase):
                k = guess_filename(rec, "unknown")
                self.add_field(k, rec)  # type: ignore[arg-type]

            elif isinstance(rec, (MultiDictProxy, MultiDict)):
                to_add.extend(rec.items())

            elif isinstance(rec, (list, tuple)) and len(rec) == 2:
                k, fp = rec
                self.add_field(k, fp)  # type: ignore[arg-type]

            else:
                raise TypeError(
                    "Only io.IOBase, multidict and (name, file) "
                    "pairs allowed, use .add_field() for passing "
                    "more complex parameters, got {!r}".format(rec)
                )

    def _gen_form_urlencoded(self) -> payload.BytesPayload:
        # form data (x-www-form-urlencoded)
        data = []
        for type_options, _, value in self._fields:
            data.append((type_options["name"], value))

        charset = self._charset if self._charset is not None else "utf-8"

        if charset == "utf-8":
            content_type = "application/x-www-form-urlencoded"
        else:
            content_type = "application/x-www-form-urlencoded; " "charset=%s" % charset

        return payload.BytesPayload(
            urlencode(data, doseq=True, encoding=charset).encode(),
            content_type=content_type,
        )

    def _gen_form_data(self) -> multipart.MultipartWriter:
        """Encode a list of fields using the multipart/form-data MIME format"""
        if self._is_processed:
            raise RuntimeError("Form data has been processed already")
        for dispparams, headers, value in self._fields:
            try:
                if hdrs.CONTENT_TYPE in headers:
                    part = payload.get_payload(
                        value,
                        content_type=headers[hdrs.CONTENT_TYPE],
                        headers=headers,
                        encoding=self._charset,
                    )
                else:
                    part = payload.get_payload(
                        value, headers=headers, encoding=self._charset
                    )
            except Exception as exc:
                raise TypeError(
                    "Can not serialize value type: %r\n "
                    "headers: %r\n value: %r" % (type(value), headers, value)
                ) from exc

            if dispparams:
                part.set_content_disposition(
                    "form-data", quote_fields=self._quote_fields, **dispparams
                )
                # FIXME cgi.FieldStorage doesn't likes body parts with
                # Content-Length which were sent via chunked transfer encoding
                assert part.headers is not None
                part.headers.popall(hdrs.CONTENT_LENGTH, None)

            self._writer.append_payload(part)

        self._is_processed = True
        return self._writer

    def __call__(self) -> Payload:
        if self._is_multipart:
            return self._gen_form_data()
        else:
            return self._gen_form_urlencoded()

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
13 Aug 2025 1.05 AM
root / 996
0755
.hash
--
31 Aug 2024 6.48 AM
root / 996
0755
__pycache__
--
31 Aug 2024 6.48 AM
root / 996
0755
__init__.py
6.709 KB
15 Nov 2021 3.05 AM
root / 996
0644
_cparser.pxd
4.881 KB
15 Nov 2021 3.05 AM
root / 996
0644
_find_header.c
183.174 KB
15 Nov 2021 3.05 AM
root / 996
0644
_find_header.h
0.166 KB
15 Nov 2021 3.05 AM
root / 996
0644
_find_header.pxd
0.066 KB
15 Nov 2021 3.05 AM
root / 996
0644
_headers.pxi
1.96 KB
15 Nov 2021 3.05 AM
root / 996
0644
_helpers.c
207.99 KB
15 Nov 2021 3.05 AM
root / 996
0644
_helpers.cpython-37m-x86_64-linux-gnu.so
66.117 KB
14 Nov 2023 6.36 PM
root / 996
0755
_helpers.pyi
0.197 KB
15 Nov 2021 3.05 AM
root / 996
0644
_helpers.pyx
1.024 KB
15 Nov 2021 3.05 AM
root / 996
0644
_http_parser.c
955.261 KB
15 Nov 2021 3.05 AM
root / 996
0644
_http_parser.cpython-37m-x86_64-linux-gnu.so
523.539 KB
14 Nov 2023 6.36 PM
root / 996
0755
_http_parser.pyx
25.948 KB
15 Nov 2021 3.05 AM
root / 996
0644
_http_writer.c
216.084 KB
15 Nov 2021 3.05 AM
root / 996
0644
_http_writer.cpython-37m-x86_64-linux-gnu.so
61.203 KB
14 Nov 2023 6.36 PM
root / 996
0755
_http_writer.pyx
4.468 KB
15 Nov 2021 3.05 AM
root / 996
0644
_websocket.c
135.176 KB
15 Nov 2021 3.05 AM
root / 996
0644
_websocket.cpython-37m-x86_64-linux-gnu.so
37.367 KB
14 Nov 2023 6.36 PM
root / 996
0755
_websocket.pyx
1.524 KB
15 Nov 2021 3.05 AM
root / 996
0644
abc.py
5.384 KB
15 Nov 2021 3.05 AM
root / 996
0644
base_protocol.py
2.637 KB
15 Nov 2021 3.05 AM
root / 996
0644
client.py
43.873 KB
15 Nov 2021 3.05 AM
root / 996
0644
client_exceptions.py
9.06 KB
15 Nov 2021 3.05 AM
root / 996
0644
client_proto.py
8.004 KB
15 Nov 2021 3.05 AM
root / 996
0644
client_reqrep.py
36.021 KB
15 Nov 2021 3.05 AM
root / 996
0644
client_ws.py
10.293 KB
15 Nov 2021 3.05 AM
root / 996
0644
connector.py
49.662 KB
15 Nov 2021 3.05 AM
root / 996
0644
cookiejar.py
13.252 KB
15 Nov 2021 3.05 AM
root / 996
0644
formdata.py
5.979 KB
15 Nov 2021 3.05 AM
root / 996
0644
hdrs.py
4.613 KB
15 Nov 2021 3.05 AM
root / 996
0644
helpers.py
25.628 KB
15 Nov 2021 3.05 AM
root / 996
0644
http.py
1.781 KB
15 Nov 2021 3.05 AM
root / 996
0644
http_exceptions.py
2.525 KB
15 Nov 2021 3.05 AM
root / 996
0644
http_parser.py
31.826 KB
15 Nov 2021 3.05 AM
root / 996
0644
http_websocket.py
24.765 KB
15 Nov 2021 3.05 AM
root / 996
0644
http_writer.py
5.836 KB
15 Nov 2021 3.05 AM
root / 996
0644
locks.py
1.125 KB
15 Nov 2021 3.05 AM
root / 996
0644
log.py
0.317 KB
15 Nov 2021 3.05 AM
root / 996
0644
multipart.py
31.677 KB
15 Nov 2021 3.05 AM
root / 996
0644
payload.py
13.379 KB
15 Nov 2021 3.05 AM
root / 996
0644
payload_streamer.py
2.063 KB
15 Nov 2021 3.05 AM
root / 996
0644
py.typed
0.007 KB
15 Nov 2021 3.05 AM
root / 996
0644
pytest_plugin.py
11.496 KB
15 Nov 2021 3.05 AM
root / 996
0644
resolver.py
4.973 KB
15 Nov 2021 3.05 AM
root / 996
0644
streams.py
20.352 KB
15 Nov 2021 3.05 AM
root / 996
0644
tcp_helpers.py
0.939 KB
15 Nov 2021 3.05 AM
root / 996
0644
test_utils.py
20.722 KB
15 Nov 2021 3.05 AM
root / 996
0644
tracing.py
14.946 KB
15 Nov 2021 3.05 AM
root / 996
0644
typedefs.py
1.725 KB
15 Nov 2021 3.05 AM
root / 996
0644
web.py
17.509 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_app.py
16.863 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_exceptions.py
9.869 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_fileresponse.py
10.531 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_log.py
7.388 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_middlewares.py
4.04 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_protocol.py
22.02 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_request.py
27.234 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_response.py
26.921 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_routedef.py
5.898 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_runner.py
10.927 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_server.py
2.01 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_urldispatcher.py
38.62 KB
15 Nov 2021 3.05 AM
root / 996
0644
web_ws.py
16.854 KB
15 Nov 2021 3.05 AM
root / 996
0644
worker.py
8.573 KB
15 Nov 2021 3.05 AM
root / 996
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF