MCPcopy
hub / github.com/benoitc/gunicorn / PythonProtocol

Class PythonProtocol

gunicorn/asgi/parser.py:106–829  ·  view source on GitHub ↗

Callback-based HTTP/1.1 parser (pure Python fallback). Mirrors H1CProtocol interface for seamless switching between the C extension and pure Python implementations. Callbacks: on_message_begin: () -> None - Called when request starts on_url: (url: bytes) -> None - Calle

Source from the content-addressed store, hash-verified

104
105
106class PythonProtocol:
107 """Callback-based HTTP/1.1 parser (pure Python fallback).
108
109 Mirrors H1CProtocol interface for seamless switching between
110 the C extension and pure Python implementations.
111
112 Callbacks:
113 on_message_begin: () -> None - Called when request starts
114 on_url: (url: bytes) -> None - Called with request URL/path
115 on_header: (name: bytes, value: bytes) -> None - Called for each header
116 on_headers_complete: () -> bool - Called when headers done (return True to skip body)
117 on_body: (chunk: bytes) -> None - Called with body data chunks
118 on_message_complete: () -> None - Called when request is complete
119 """
120
121 __slots__ = (
122 '_on_message_begin', '_on_url', '_on_header',
123 '_on_headers_complete', '_on_body', '_on_message_complete',
124 '_state', '_buffer', '_headers_list',
125 'method', 'path', 'http_version', 'headers',
126 'content_length', 'is_chunked', 'should_keep_alive', 'is_complete',
127 '_body_remaining', '_skip_body',
128 '_chunk_state', '_chunk_size', '_chunk_remaining',
129 '_limit_request_line', '_limit_request_fields', '_limit_request_field_size',
130 '_permit_unconventional_http_method', '_permit_unconventional_http_version',
131 '_header_count',
132 '_proxy_protocol', '_proxy_protocol_info', '_proxy_protocol_done',
133 )
134
135 def __init__(
136 self,
137 on_message_begin=None,
138 on_url=None,
139 on_header=None,
140 on_headers_complete=None,
141 on_body=None,
142 on_message_complete=None,
143 limit_request_line=8190,
144 limit_request_fields=100,
145 limit_request_field_size=8190,
146 permit_unconventional_http_method=False,
147 permit_unconventional_http_version=False,
148 proxy_protocol='off',
149 ):
150 self._on_message_begin = on_message_begin
151 self._on_url = on_url
152 self._on_header = on_header
153 self._on_headers_complete = on_headers_complete
154 self._on_body = on_body
155 self._on_message_complete = on_message_complete
156
157 # Store limits
158 self._limit_request_line = limit_request_line
159 self._limit_request_fields = limit_request_fields
160 self._limit_request_field_size = limit_request_field_size
161 self._permit_unconventional_http_method = permit_unconventional_http_method
162 self._permit_unconventional_http_version = permit_unconventional_http_version
163 self._header_count = 0

Calls

no outgoing calls