Changelog
Unreleased
0.0.32 (2026-06-04)
- Speed up partial-boundary scanning for CR/LF-dense part data #300.
0.0.31 (2026-06-04)
- Speed up multipart header parsing and callback dispatch #295.
- Bound header field name size before validating #296.
- Validate
Content-Length is non-negative in parse_form #297.
0.0.30 (2026-05-31)
- Parse
application/x-www-form-urlencoded bodies per the WHATWG URL standard, treating only & as a field separator #290.
- Ignore RFC 2231/5987 extended parameters (
name*, filename*) in parse_options_header, keeping the plain parameter authoritative per RFC 7578 ยง4.2 #291.
0.0.29 (2026-05-17)
- Handle malformed RFC 2231 continuations in
parse_options_header #270.
0.0.28 (2026-05-10)
- Speed up partial-boundary tail scan via
bytes.find #281.
- Cap multipart boundary length at 256 bytes #282.
0.0.27 (2026-04-27)
- Add multipart header limits #267.
- Pass parse offsets via constructors #268.
0.0.26 (2026-04-10)
- Skip preamble before the first multipart boundary more efficiently #262.
- Silently discard epilogue data after the closing multipart boundary #259.
0.0.25 (2026-04-10)
- Add MIME content type info to
File #143.
- Handle CTE values case-insensitively #258.
- Remove custom
FormParser classes #257.
- Add
UPLOAD_DELETE_TMP to FormParser config #254.
- Emit
field_end for trailing bare field names on finalize #230.
- Handle multipart headers case-insensitively #252.
- Apply Apache-2.0 properly #247.
0.0.24 (2026-04-05)
- Validate
chunk_size in parse_form() #244.
0.0.23 (2026-04-05)
- Remove unused
trust_x_headers parameter and X-File-Name fallback #196.
- Return processed length from
QuerystringParser._internal_write #229.
- Cleanup metadata dunders from
__init__.py #227.
0.0.22 (2026-01-25)
- Drop directory path from filename in
File 9433f4b.
0.0.21 (2025-12-17)
- Add support for Python 3.14 and drop EOL 3.8 and 3.9 #216.
0.0.20 (2024-12-16)
- Handle messages containing only end boundary #142.
0.0.19 (2024-11-30)
- Don't warn when CRLF is found after last boundary on
MultipartParser #193.
0.0.18 (2024-11-28)
- Hard break if found data after last boundary on
MultipartParser #189.
0.0.17 (2024-10-31)
- Handle PermissionError in fallback code for old import name #182.
0.0.16 (2024-10-27)
- Add dunder attributes to
multipart package #177.
0.0.15 (2024-10-27)
- Replace
FutureWarning to PendingDeprecationWarning #174.
- Add missing files to SDist #171.
0.0.14 (2024-10-24)
- Fix import scheme for
multipart module (#168).
0.0.13 (2024-10-20)
- Rename import to
python_multipart #166.
0.0.12 (2024-09-29)
- Improve error message when boundary character does not match #124.
- Add mypy strict typing #140.
- Enforce 100% coverage #159.
0.0.11 (2024-09-28)
- Improve performance, especially in data with many CR-LF #137.
- Handle invalid CRLF in header name #141.
0.0.10 (2024-09-21)
- Support
on_header_begin #103.
- Improve type hints on
FormParser #104.
- Fix
OnFileCallback type #106.
- Improve type hints #110.
- Improve type hints on
File #111.
- Add type hint to helper functions #112.
- Minor fix for Field.repr #114.
- Fix use of chunk_size parameter #136.
- Allow digits and valid token chars in headers #134.
- Fix headers being carried between parts #135.
0.0.9 (2024-02-10)
- Add support for Python 3.12 #85.
- Drop support for Python 3.7 #95.
- Add
MultipartState(IntEnum) #96.
- Add
QuerystringState #97.
- Add
TypedDict callbacks #98.
- Add config
TypedDicts #99.
0.0.8 (2024-02-09)
- Check if Message.get_params return 3-tuple instead of str on parse_options_header #79.
- Cleanup unused regex patterns #82.
0.0.7 (2024-02-03)
- Refactor header option parser to use the standard library instead of a custom RegEx #75.
0.0.6 (2023-02-27)
- Migrate package installation to
pyproject.toml (PEP 621) #54.
- Use yaml.safe_load instead of yaml.load #46.
- Add support for Python 3.11, drop EOL 3.6 #51.
- Add support for Python 3.8-3.10, drop EOL 2.7-3.5 #42.
QuerystringParser: don't raise an AttributeError in __repr__ #30.