From dc7032e5c191097d01a673a45368f387928f04a5 Mon Sep 17 00:00:00 2001 From: Polina Date: Thu, 2 Jul 2026 18:32:29 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?venv/Lib/site-packages/httptools/parser=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../httptools/parser/__init__.py | 28 +++ .../httptools/parser/cparser.pxd | 167 ++++++++++++++++++ .../site-packages/httptools/parser/errors.py | 30 ++++ .../parser/parser.cp314-win_amd64.pyd | Bin 0 -> 126464 bytes .../site-packages/httptools/parser/parser.pyi | 58 ++++++ 5 files changed, 283 insertions(+) create mode 100644 venv/Lib/site-packages/httptools/parser/__init__.py create mode 100644 venv/Lib/site-packages/httptools/parser/cparser.pxd create mode 100644 venv/Lib/site-packages/httptools/parser/errors.py create mode 100644 venv/Lib/site-packages/httptools/parser/parser.cp314-win_amd64.pyd create mode 100644 venv/Lib/site-packages/httptools/parser/parser.pyi diff --git a/venv/Lib/site-packages/httptools/parser/__init__.py b/venv/Lib/site-packages/httptools/parser/__init__.py new file mode 100644 index 0000000..acb7a88 --- /dev/null +++ b/venv/Lib/site-packages/httptools/parser/__init__.py @@ -0,0 +1,28 @@ +from .protocol import HTTPProtocol +from .parser import HttpRequestParser, HttpResponseParser # NoQA +from .errors import ( + HttpParserError, + HttpParserCallbackError, + HttpParserInvalidStatusError, + HttpParserInvalidMethodError, + HttpParserInvalidURLError, + HttpParserUpgrade, +) +from .url_parser import parse_url + +__all__ = ( + # protocol + "HTTPProtocol", + # parser + "HttpRequestParser", + "HttpResponseParser", + # errors + "HttpParserError", + "HttpParserCallbackError", + "HttpParserInvalidStatusError", + "HttpParserInvalidMethodError", + "HttpParserInvalidURLError", + "HttpParserUpgrade", + # url_parser + "parse_url", +) diff --git a/venv/Lib/site-packages/httptools/parser/cparser.pxd b/venv/Lib/site-packages/httptools/parser/cparser.pxd new file mode 100644 index 0000000..e914385 --- /dev/null +++ b/venv/Lib/site-packages/httptools/parser/cparser.pxd @@ -0,0 +1,167 @@ +from libc.stdint cimport int32_t, uint8_t, uint16_t, uint64_t + + +cdef extern from "llhttp.h": + struct llhttp__internal_s: + int32_t _index + void *_span_pos0 + void *_span_cb0 + int32_t error + const char *reason + const char *error_pos + void *data + void *_current + uint64_t content_length + uint8_t type + uint8_t method + uint8_t http_major + uint8_t http_minor + uint8_t header_state + uint16_t flags + uint8_t upgrade + uint16_t status_code + uint8_t finish + void *settings + ctypedef llhttp__internal_s llhttp__internal_t + ctypedef llhttp__internal_t llhttp_t + + ctypedef int (*llhttp_data_cb) (llhttp_t*, + const char *at, + size_t length) except -1 + + ctypedef int (*llhttp_cb) (llhttp_t*) except -1 + + struct llhttp_settings_s: + llhttp_cb on_message_begin + llhttp_data_cb on_url + llhttp_data_cb on_status + llhttp_data_cb on_header_field + llhttp_data_cb on_header_value + llhttp_cb on_headers_complete + llhttp_data_cb on_body + llhttp_cb on_message_complete + llhttp_cb on_chunk_header + llhttp_cb on_chunk_complete + ctypedef llhttp_settings_s llhttp_settings_t + + enum llhttp_type: + HTTP_BOTH, + HTTP_REQUEST, + HTTP_RESPONSE + ctypedef llhttp_type llhttp_type_t + + enum llhttp_errno: + HPE_OK, + HPE_INTERNAL, + HPE_STRICT, + HPE_LF_EXPECTED, + HPE_UNEXPECTED_CONTENT_LENGTH, + HPE_CLOSED_CONNECTION, + HPE_INVALID_METHOD, + HPE_INVALID_URL, + HPE_INVALID_CONSTANT, + HPE_INVALID_VERSION, + HPE_INVALID_HEADER_TOKEN, + HPE_INVALID_CONTENT_LENGTH, + HPE_INVALID_CHUNK_SIZE, + HPE_INVALID_STATUS, + HPE_INVALID_EOF_STATE, + HPE_INVALID_TRANSFER_ENCODING, + HPE_CB_MESSAGE_BEGIN, + HPE_CB_HEADERS_COMPLETE, + HPE_CB_MESSAGE_COMPLETE, + HPE_CB_CHUNK_HEADER, + HPE_CB_CHUNK_COMPLETE, + HPE_PAUSED, + HPE_PAUSED_UPGRADE, + HPE_USER + ctypedef llhttp_errno llhttp_errno_t + + enum llhttp_flags: + F_CONNECTION_KEEP_ALIVE, + F_CONNECTION_CLOSE, + F_CONNECTION_UPGRADE, + F_CHUNKED, + F_UPGRADE, + F_CONTENT_LENGTH, + F_SKIPBODY, + F_TRAILING, + F_LENIENT, + F_TRANSFER_ENCODING + ctypedef llhttp_flags llhttp_flags_t + + enum llhttp_method: + HTTP_DELETE, + HTTP_GET, + HTTP_HEAD, + HTTP_POST, + HTTP_PUT, + HTTP_CONNECT, + HTTP_OPTIONS, + HTTP_TRACE, + HTTP_COPY, + HTTP_LOCK, + HTTP_MKCOL, + HTTP_MOVE, + HTTP_PROPFIND, + HTTP_PROPPATCH, + HTTP_SEARCH, + HTTP_UNLOCK, + HTTP_BIND, + HTTP_REBIND, + HTTP_UNBIND, + HTTP_ACL, + HTTP_REPORT, + HTTP_MKACTIVITY, + HTTP_CHECKOUT, + HTTP_MERGE, + HTTP_MSEARCH, + HTTP_NOTIFY, + HTTP_SUBSCRIBE, + HTTP_UNSUBSCRIBE, + HTTP_PATCH, + HTTP_PURGE, + HTTP_MKCALENDAR, + HTTP_LINK, + HTTP_UNLINK, + HTTP_SOURCE, + HTTP_PRI, + HTTP_DESCRIBE, + HTTP_ANNOUNCE, + HTTP_SETUP, + HTTP_PLAY, + HTTP_PAUSE, + HTTP_TEARDOWN, + HTTP_GET_PARAMETER, + HTTP_SET_PARAMETER, + HTTP_REDIRECT, + HTTP_RECORD, + HTTP_FLUSH + ctypedef llhttp_method llhttp_method_t + + void llhttp_init(llhttp_t* parser, llhttp_type_t type, const llhttp_settings_t* settings) + + void llhttp_settings_init(llhttp_settings_t* settings) + + llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len) + + void llhttp_resume_after_upgrade(llhttp_t* parser) + + int llhttp_should_keep_alive(const llhttp_t* parser) + + const char* llhttp_get_error_pos(const llhttp_t* parser) + const char* llhttp_get_error_reason(const llhttp_t* parser) + const char* llhttp_method_name(llhttp_method_t method) + + void llhttp_set_error_reason(llhttp_t* parser, const char* reason); + + void llhttp_set_lenient_headers(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_chunked_length(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_keep_alive(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_version(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_data_after_close(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_optional_lf_after_cr(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_optional_cr_before_lf(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_optional_crlf_after_chunk(llhttp_t* parser, bint enabled); + void llhttp_set_lenient_spaces_after_chunk_size(llhttp_t* parser, bint enabled); diff --git a/venv/Lib/site-packages/httptools/parser/errors.py b/venv/Lib/site-packages/httptools/parser/errors.py new file mode 100644 index 0000000..3db30e1 --- /dev/null +++ b/venv/Lib/site-packages/httptools/parser/errors.py @@ -0,0 +1,30 @@ +__all__ = ('HttpParserError', + 'HttpParserCallbackError', + 'HttpParserInvalidStatusError', + 'HttpParserInvalidMethodError', + 'HttpParserInvalidURLError', + 'HttpParserUpgrade') + + +class HttpParserError(Exception): + pass + + +class HttpParserCallbackError(HttpParserError): + pass + + +class HttpParserInvalidStatusError(HttpParserError): + pass + + +class HttpParserInvalidMethodError(HttpParserError): + pass + + +class HttpParserInvalidURLError(HttpParserError): + pass + + +class HttpParserUpgrade(Exception): + pass diff --git a/venv/Lib/site-packages/httptools/parser/parser.cp314-win_amd64.pyd b/venv/Lib/site-packages/httptools/parser/parser.cp314-win_amd64.pyd new file mode 100644 index 0000000000000000000000000000000000000000..d12c3e1d5630e1f6d32b87824e62001d37b31576 GIT binary patch literal 126464 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 YRGf&OIDbO!%D=1TuI9V`|7hHQ1A%@@r2qf` literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/httptools/parser/parser.pyi b/venv/Lib/site-packages/httptools/parser/parser.pyi new file mode 100644 index 0000000..bf0d860 --- /dev/null +++ b/venv/Lib/site-packages/httptools/parser/parser.pyi @@ -0,0 +1,58 @@ +from array import array +from .protocol import HTTPProtocol + +class HttpParser: + def __init__(self, protocol: HTTPProtocol | object) -> None: + """The HTTP parser. + + Args: + protocol (HTTPProtocol): Callback interface for the parser. + """ + + def set_dangerous_leniencies( + self, + lenient_headers: bool | None = None, + lenient_chunked_length: bool | None = None, + lenient_keep_alive: bool | None = None, + lenient_transfer_encoding: bool | None = None, + lenient_version: bool | None = None, + lenient_data_after_close: bool | None = None, + lenient_optional_lf_after_cr: bool | None = None, + lenient_optional_cr_before_lf: bool | None = None, + lenient_optional_crlf_after_chunk: bool | None = None, + lenient_spaces_after_chunk_size: bool | None = None, + ) -> None: + """Set dangerous leniencies for the parser.""" + + def get_http_version(self) -> str: + """Retrieve the HTTP protocol version e.g. "1.1".""" + + def should_keep_alive(self) -> bool: + """Return `True` if keep-alive mode is preferred.""" + + def should_upgrade(self) -> bool: + """Return `True` if the parsed request is a valid Upgrade request. + The method exposes a flag set just before on_headers_complete. + Calling this method earlier will only yield `False`.""" + + def feed_data(self, data: bytes | bytearray | memoryview | array[int]) -> None: + """Feed data to the parser. + + Will eventually trigger callbacks on the ``protocol`` object. + + On HTTP upgrade, this method will raise an + ``HttpParserUpgrade`` exception, with its sole argument + set to the offset of the non-HTTP data in ``data``. + """ + +class HttpRequestParser(HttpParser): + """Used for parsing http requests from the server side.""" + + def get_method(self) -> bytes: + """Retrieve the HTTP method of the request.""" + +class HttpResponseParser(HttpParser): + """Used for parsing http responses from the client side.""" + + def get_status_code(self) -> int: + """Retrieve the status code of the HTTP response."""