MCPcopy Create free account
hub / github.com/encode/starlette / parse

Method parse

starlette/formparsers.py:108–146  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

106 self.messages.append(message)
107
108 async def parse(self) -> FormData:
109 # Callbacks dictionary.
110 callbacks: QuerystringCallbacks = {
111 "on_field_start": self.on_field_start,
112 "on_field_name": self.on_field_name,
113 "on_field_data": self.on_field_data,
114 "on_field_end": self.on_field_end,
115 "on_end": self.on_end,
116 }
117
118 # Create the parser.
119 parser = multipart.QuerystringParser(callbacks)
120 field_name = bytearray()
121 field_value = bytearray()
122
123 items: list[tuple[str, str | UploadFile]] = []
124
125 # Feed the parser with data from the request.
126 async for chunk in self.stream:
127 if chunk:
128 parser.write(chunk)
129 else:
130 parser.finalize()
131 messages = list(self.messages)
132 self.messages.clear()
133 for message_type, message_bytes in messages:
134 if message_type == FormMessage.FIELD_START:
135 field_name = bytearray()
136 field_value = bytearray()
137 elif message_type == FormMessage.FIELD_NAME:
138 field_name.extend(message_bytes)
139 elif message_type == FormMessage.FIELD_DATA:
140 field_value.extend(message_bytes)
141 elif message_type == FormMessage.FIELD_END:
142 name = unquote_plus(field_name.decode("latin-1"))
143 value = unquote_plus(field_value.decode("latin-1"))
144 items.append((name, value))
145
146 return FormData(items)
147
148
149class MultiPartParser:

Calls 5

FormDataClass · 0.90
decodeMethod · 0.80
writeMethod · 0.45
clearMethod · 0.45
appendMethod · 0.45