(self)
| 217 | self._current_partial_header_value = b"" |
| 218 | |
| 219 | def on_headers_finished(self) -> None: |
| 220 | disposition, options = parse_options_header(self._current_part.content_disposition) |
| 221 | try: |
| 222 | self._current_part.field_name = _user_safe_decode(options[b"name"], self._charset) |
| 223 | except KeyError: |
| 224 | raise MultiPartException('The Content-Disposition header field "name" must be provided.') |
| 225 | if b"filename" in options: |
| 226 | self._current_files += 1 |
| 227 | if self._current_files > self.max_files: |
| 228 | raise MultiPartException(f"Too many files. Maximum number of files is {self.max_files}.") |
| 229 | filename = _user_safe_decode(options[b"filename"], self._charset) |
| 230 | tempfile = SpooledTemporaryFile(max_size=self.spool_max_size) |
| 231 | self._files_to_close_on_error.append(tempfile) |
| 232 | self._current_part.file = UploadFile( |
| 233 | file=tempfile, # type: ignore[arg-type] |
| 234 | size=0, |
| 235 | filename=filename, |
| 236 | headers=Headers(raw=self._current_part.item_headers), |
| 237 | ) |
| 238 | else: |
| 239 | self._current_fields += 1 |
| 240 | if self._current_fields > self.max_fields: |
| 241 | raise MultiPartException(f"Too many fields. Maximum number of fields is {self.max_fields}.") |
| 242 | self._current_part.file = None |
| 243 | |
| 244 | def on_end(self) -> None: |
| 245 | pass |
nothing calls this directly
no test coverage detected