MCPcopy
hub / github.com/encode/starlette / parse

Method parse

starlette/formparsers.py:105–143  ·  starlette/formparsers.py::FormParser.parse
(self)

Source from the content-addressed store, hash-verified

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

Calls 5

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