Adds a new file to the dict. `file` can be a file name or a :class:`file`-like or a :class:`FileStorage` object. :param name: the name of the field. :param file: a filename or :class:`file`-like object :param filename: an optional filename :param content_typ
(
self,
name: str,
file: str | os.PathLike[str] | t.IO[bytes] | FileStorage,
filename: str | None = None,
content_type: str | None = None,
)
| 171 | """ |
| 172 | |
| 173 | def add_file( |
| 174 | self, |
| 175 | name: str, |
| 176 | file: str | os.PathLike[str] | t.IO[bytes] | FileStorage, |
| 177 | filename: str | None = None, |
| 178 | content_type: str | None = None, |
| 179 | ) -> None: |
| 180 | """Adds a new file to the dict. `file` can be a file name or |
| 181 | a :class:`file`-like or a :class:`FileStorage` object. |
| 182 | |
| 183 | :param name: the name of the field. |
| 184 | :param file: a filename or :class:`file`-like object |
| 185 | :param filename: an optional filename |
| 186 | :param content_type: an optional content type |
| 187 | """ |
| 188 | if isinstance(file, FileStorage): |
| 189 | self.add(name, file) |
| 190 | return |
| 191 | |
| 192 | if isinstance(file, (str, os.PathLike)): |
| 193 | if filename is None: |
| 194 | filename = os.fspath(file) |
| 195 | |
| 196 | file_obj: t.IO[bytes] = open(file, "rb") |
| 197 | else: |
| 198 | file_obj = file # type: ignore[assignment] |
| 199 | |
| 200 | if filename and content_type is None: |
| 201 | content_type = ( |
| 202 | mimetypes.guess_type(filename)[0] or "application/octet-stream" |
| 203 | ) |
| 204 | |
| 205 | self.add(name, FileStorage(file_obj, filename, name, content_type)) |
| 206 | |
| 207 | |
| 208 | # circular dependencies |