Skip to content

Scheduled weekly dependency update for week 34 - #1091

Open
pyup-bot wants to merge 55 commits into
masterfrom
pyup-scheduled-update-2026-08-24
Open

Scheduled weekly dependency update for week 34#1091
pyup-bot wants to merge 55 commits into
masterfrom
pyup-scheduled-update-2026-08-24

Conversation

@pyup-bot

Copy link
Copy Markdown
Collaborator

Update requests from 2.27.1 to 2.34.2.

Changelog

2.34.2

-------------------
- Moved `headers` input type back to `Mapping` to avoid invariance issues
with `MutableMapping` and inferred dict types. Users calling
`Request.headers.update()` may need to narrow typing in their code. (7441)

2.34.1

-------------------

**Bugfixes**
- Widened `json` input type from `dict` and `list` to `Mapping`
and `Sequence`. (7436)
- Changed `headers` input type to MutableMapping and removed `None` from
`Request.headers` typing to improve handling for users. (7431)
- `Response.reason` moved from `str | None` to `str` to improve handling
for users. (7437)
- Fixed a bug where some bodies with custom `__getattr__` implementations
weren't being properly detected as Iterables. (7433)

2.34.0

-------------------

**Announcements**
- Requests 2.34.0 introduces inline types, replacing those provided by
typeshed. Public API types should be fully compatible with mypy, pyright,
and ty. We believe types are comprehensive but if you find issues, please
report them to the pinned tracking issue.

Special thanks to bastimeyer, cthoyt, edgarrmondragon, and srittau for
helping review and test the types ahead of the release. (7272)

**Improvements**
- Digest Auth hashing algorithms have added `usedforsecurity=False` to clarify
security considerations. (7310)
- Requests added support for Python 3.15 based on beta1. Downstream projects
should be able to start testing prior to its release in October. (7422)
- Requests added support for Python 3.14t. (7419)

**Bugfixes**
- ``Response.history`` no longer contains a reference to itself, preventing
accidental looping when traversing the history list. (7328)
- Requests no longer performs greedy matching on no_proxy domains. The
proxy_bypass implementation has been updated with CPython's fix from
bpo-39057. (7427)
- Requests no longer incorrectly strips duplicate leading slashes in
URI paths. This should address user issues with specific presigned
URLs. Note the full fix requires urllib3 2.7.0+. (7315)

2.33.1

-------------------

**Bugfixes**
- Fixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary
files in the tmp directory. (7305)
- Fixed Content-Type header parsing for malformed values. (7309)
- Improved error consistency for malformed header values. (7308)

2.33.0

-------------------

**Announcements**
- 📣 Requests is adding inline types. If you have a typed code base that
uses Requests, please take a look at 7271. Give it a try, and report
any gaps or feedback you may have in the issue. 📣

**Security**
- CVE-2026-25645 ``requests.utils.extract_zipped_paths`` now extracts
contents to a non-deterministic location to prevent malicious file
replacement. This does not affect default usage of Requests, only
applications calling the utility function directly.

**Improvements**
- Migrated to a PEP 517 build system using setuptools. (7012)

**Bugfixes**
- Fixed an issue where an empty netrc entry could cause
malformed authentication to be applied to Requests on
Python 3.11+. (7205)

**Deprecations**
- Dropped support for Python 3.9 following its end of support. (7196)

**Documentation**
- Various typo fixes and doc improvements.

2.32.5

-------------------

**Bugfixes**

- The SSLContext caching feature originally introduced in 2.32.0 has created
a new class of issues in Requests that have had negative impact across a number
of use cases. The Requests team has decided to revert this feature as long term
maintenance of it is proving to be unsustainable in its current iteration.

**Deprecations**
- Added support for Python 3.14.
- Dropped support for Python 3.8 following its end of support.

2.32.4

-------------------

**Security**
- CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted
environment will retrieve credentials for the wrong hostname/machine from a
netrc file.

**Improvements**
- Numerous documentation improvements

**Deprecations**
- Added support for pypy 3.11 for Linux and macOS.
- Dropped support for pypy 3.9 following its end of support.

2.32.3

-------------------

**Bugfixes**
- Fixed bug breaking the ability to specify custom SSLContexts in sub-classes of
HTTPAdapter. (6716)
- Fixed issue where Requests started failing to run on Python versions compiled
without the `ssl` module. (6724)

2.32.2

-------------------

**Deprecations**
- To provide a more stable migration for custom HTTPAdapters impacted
by the CVE changes in 2.32.0, we've renamed `_get_connection` to
a new public API, `get_connection_with_tls_context`. Existing custom
HTTPAdapters will need to migrate their code to use this new API.
`get_connection` is considered deprecated in all versions of Requests>=2.32.0.

A minimal (2-line) example has been provided in the linked PR to ease
migration, but we strongly urge users to evaluate if their custom adapter
is subject to the same issue described in CVE-2024-35195. (6710)

2.32.1

-------------------

**Bugfixes**
- Add missing test certs to the sdist distributed on PyPI.

2.32.0

-------------------

**Security**
- Fixed an issue where setting `verify=False` on the first request from a
Session will cause subsequent requests to the _same origin_ to also ignore
cert verification, regardless of the value of `verify`.
(https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56)

**Improvements**
- `verify=True` now reuses a global SSLContext which should improve
request time variance between first and subsequent requests. It should
also minimize certificate load time on Windows systems when using a Python
version built with OpenSSL 3.x. (6667)
- Requests now supports optional use of character detection
(`chardet` or `charset_normalizer`) when repackaged or vendored.
This enables `pip` and other projects to minimize their vendoring
surface area. The `Response.text()` and `apparent_encoding` APIs
will default to `utf-8` if neither library is present. (6702)

**Bugfixes**
- Fixed bug in length detection where emoji length was incorrectly
calculated in the request content-length. (6589)
- Fixed deserialization bug in JSONDecodeError. (6629)
- Fixed bug where an extra leading `/` (path separator) could lead
urllib3 to unnecessarily reparse the request URI. (6644)

**Deprecations**

- Requests has officially added support for CPython 3.12 (6503)
- Requests has officially added support for PyPy 3.9 and 3.10 (6641)
- Requests has officially dropped support for CPython 3.7 (6642)
- Requests has officially dropped support for PyPy 3.7 and 3.8 (6641)

**Documentation**
- Various typo fixes and doc improvements.

**Packaging**
- Requests has started adopting some modern packaging practices.
The source files for the projects (formerly `requests`) is now located
in `src/requests` in the Requests sdist. (6506)
- Starting in Requests 2.33.0, Requests will migrate to a PEP 517 build system
using `hatchling`. This should not impact the average user, but extremely old
versions of packaging utilities may have issues with the new packaging format.

2.31.0

-------------------

**Security**
- Versions of Requests between v2.3.0 and v2.30.0 are vulnerable to potential
forwarding of `Proxy-Authorization` headers to destination servers when
following HTTPS redirects.

When proxies are defined with user info (`https://user:passproxy:8080`), Requests
will construct a `Proxy-Authorization` header that is attached to the request to
authenticate with the proxy.

In cases where Requests receives a redirect response, it previously reattached
the `Proxy-Authorization` header incorrectly, resulting in the value being
sent through the tunneled connection to the destination server. Users who rely on
defining their proxy credentials in the URL are *strongly* encouraged to upgrade
to Requests 2.31.0+ to prevent unintentional leakage and rotate their proxy
credentials once the change has been fully deployed.

Users who do not use a proxy or do not supply their proxy credentials through
the user information portion of their proxy URL are not subject to this
vulnerability.

Full details can be read in our [Github Security Advisory](https://github.com/psf/requests/security/advisories/GHSA-j8r2-6x86-q33q)
and [CVE-2023-32681](https://nvd.nist.gov/vuln/detail/CVE-2023-32681).

2.30.0

-------------------

**Dependencies**
- ⚠️ Added support for urllib3 2.0. ⚠️

This may contain minor breaking changes so we advise careful testing and
reviewing https://urllib3.readthedocs.io/en/latest/v2-migration-guide.html
prior to upgrading.

Users who wish to stay on urllib3 1.x can pin to `urllib3<2`.

2.29.0

-------------------

**Improvements**

- Requests now defers chunked requests to the urllib3 implementation to improve
standardization. (6226)
- Requests relaxes header component requirements to support bytes/str subclasses. (6356)

2.28.2

-------------------

**Dependencies**

- Requests now supports charset\_normalizer 3.x. (6261)

**Bugfixes**

- Updated MissingSchema exception to suggest https scheme rather than http. (6188)

2.28.1

-------------------

**Improvements**

- Speed optimization in `iter_content` with transition to `yield from`. (6170)

**Dependencies**

- Added support for chardet 5.0.0 (6179)
- Added support for charset-normalizer 2.1.0 (6169)

2.28.0

-------------------

**Deprecations**

- ⚠️ Requests has officially dropped support for Python 2.7. ⚠️ (6091)
- Requests has officially dropped support for Python 3.6 (including pypy3.6). (6091)

**Improvements**

- Wrap JSON parsing issues in Request's JSONDecodeError for payloads without
an encoding to make `json()` API consistent. (6097)
- Parse header components consistently, raising an InvalidHeader error in
all invalid cases. (6154)
- Added provisional 3.11 support with current beta build. (6155)
- Requests got a makeover and we decided to paint it black. (6095)

**Bugfixes**

- Fixed bug where setting `CURL_CA_BUNDLE` to an empty string would disable
cert verification. All Requests 2.x versions before 2.28.0 are affected. (6074)
- Fixed urllib3 exception leak, wrapping `urllib3.exceptions.SSLError` with
`requests.exceptions.SSLError` for `content` and `iter_content`. (6057)
- Fixed issue where invalid Windows registry entries caused proxy resolution
to raise an exception rather than ignoring the entry. (6149)
- Fixed issue where entire payload could be included in the error message for
JSONDecodeError. (6036)
Links

Update webrequest from 0.0.78 to 0.1.0.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update setproctitle from 1.2.2 to 1.3.7.

Changelog

1.3.7

-------------

- Add support for Python 3.14 (issue 152).

1.3.6

-------------

- Add support for free-threading (issue 147).

1.3.5

-------------

- Fix bouncing Dock icon on macOS (issue 143).
- Fix building on C23 compilers (issue 145).

1.3.4

-------------

- Add support for Python 3.13 (issue 139).
- Drop support for Python 3.7.

1.3.3

-------------

- Add support for Python 3.12.
- Fix package metadata to include Python 3.11, 3.12.

1.3.2

-------------

- Restore import-time initialization of macOS to avoid crash on thread+fork
(issue 113).

1.3.1

-------------

- Fixed segfault on macOS 12.5 in forked processes (issue 111).
Note that, as a workaround, Activity Monitor will show the title of the
parent.

1.3.0

-------------

- Added fallback no-op implementation if building the extension fails.
- Added support for displaying title as the process name in MacOS Activity
Monitor (issue 10).
- Fixed "Symbol not found: _Py_GetArgcArgv" error when using Xcode provided
Python (issues 82, 103).
- Fixed FreeBSD support, broken in 1.2 (issue 94).
- Added package type annotations (issue 101).
- Dropped support for Python 3.6.

1.2.3

-------------

- Added Python 3.10 packages (issue 102).
- Added Wheel packages for macOS (issue 96).
- Package build moved to cibuildwheel, other wheels provided (issue 47).
Links

Update tqdm from 4.62.3 to 4.70.0.

Changelog

4.70.0

- `contrib.concurrent`: major improvements
+ support `process_map(mp_context, max_tasks_per_child)`, `thread_map(thread_name_prefix)` (1265)
+ fix total based on shortest length (1473)
+ use default `max_workers` (1543 <- 1530, 1518)
+ support `timeout`, `buffersize` (1576)
+ improve ETA (1708 <- 1161)
+ update `as_completed` (1709 <- 1565)
+ add `tqdm.concurrent.intepreter_map` (1777)
- `asyncio`: support iterables with only `__aiter__` (1714 <- 1686)
- support `reset(float("inf"))` (1783 <- 1781, 651)
- framework: test & reduce wheel size (1782)

4.69.1

- `contrib.logging`: preserve filters (1775 <- 1581)
- `rich`: misc fixes (1773)
+ support generators (without `len`) (1391)
+ fix potential `AttributeError` on exit (1674)
- fix `total=float('inf')` (1781 <- 651)
- fix potential `AttributeError` on exit (1778 <- 1668, 1537, 261)
- fix minor docs typos (1780, 1746)

4.69.0

- add `tqdm.asyncio.gather(..., return_exceptions=False)` (1776, 1671 <- 1286)
- misc minor framework updates
+ bump workflow actions & pre-commit hooks

4.68.4

- trim to `ncols` even when `'{bar}' not in bar_format` (1717, 1767 <- 1658)
- fix `tqdm.write` when `stdout=None` (1768 <- 1654)

4.68.3

- `utils`: delay `os.get_terminal_size` (1763 <- 1760)
- `autonotebook`: support QtConsole, Spyder, JupyterLite (1763, 1628, 1559 <- 1283, 1098, 512)
- minor docs updates
+ fix typo (1762)
+ use `git-fame`
- misc minor framework updates
+ fix & update CI build
+ pre-commit: add docs & metadata generation
+ move `tox.ini` -> `pyproject.toml`, move `tox-gh-actions` -> `tox-gh`
+ add Python 3.14, drop 3.7 support

4.68.2

- revert accidental change to `ascii` default (fixes 1760)
+ `UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-7: character maps to <undefined>` can be fixed by installing `tqdm!=4.68.0,!=4.68.1`
- misc docs updates
+ fix links
+ replace stray `rst` -> `md` syntax
+ consistent "progress bar" terminology (1737)
- tests: fix coverage (fixes 1760)

4.68.1

- set name of monitor thread (1669, 1752 <- 1435)
- fix monitor thread `atexit` deadlock (1751 <- 528, 627, 1435, 1564)
- docs: minor copyediting

4.68.0

- `utils`: simplify terminal size detection (1760)
- `contrib`
+ `itertools` (1760)
 * add `chain`, `permutations`, `combinations`, `combinations_with_replacement`, `batched`
 * add `product(repeat=1)` keyword argument (1428)
+ fix `discord`, `telegram` error handling
+ fix `discord`, `slack`, `telegram` format for `total=None`
- soft-deprecate `tqdm.utils.envwrap` -> [`envwrap`](https://github.com/tqdm/envwrap)
- benchmarks: fix `asv`
- misc linting
- misc framework updates
+ CI: migrate manual job to `pre-commit.ci`
+ bump workflow actions & pre-commit hooks

4.67.3

- fix py3.7 dependencies (1706 <- 1705)

4.67.2

- support `pandas>=3` (1703 <- 1701, 1650, 1700)
- fix `format_interval` for negative numbers (1703)
- misc linting
- framework updates (1704)
+ bump CI workflow & `pre-commit` dependencies
+ add `pyupgrade`
+ add py3.13 support
+ fix py3.7 tests
+ update `setuptools-scm` usage
+ support auto-dedented docstrings when building docs in py3.13
- tests: relax flaky benchmarks

4.67.1

- fix `gui` (`matplotlib` syntax) (1629)
- misc test & framework updates
- bump `pytest-asyncio` (1630)
- fix `codecov` rate limit
- fix pybuild
- sync dependencies

4.67.0

- `contrib.discord`: replace `disco-py` with `requests` (1536)

4.66.6

- cli: zip-safe `--manpath`, `--comppath` (1627)
- misc framework updates (1627)
+ fix `pytest` `DeprecationWarning`
+ fix `snapcraft` build
+ fix `nbval` `DeprecationWarning`
+ update & tidy workflows
+ bump pre-commit
+ docs: update URLs

4.66.5

- support `ncols` auto-detection on FreeBSD (1602 <- https://github.com/casperdcl/git-fame/issues/98)
- fix Python 3.13 CLI (1594 <- 1585)
- fix Python 3.13 tests (1595 <- https://github.com/python/cpython/issues/117536#issuecomment-2036883124)
- misc framework updates (1602)
+ add official Python 3.12 support
+ bump deps (https://github.com/NiklasRosenstein/pydoc-markdown/issues/329, https://github.com/tikitu/jsmin/pull/44)

4.66.4

- `rich`: fix completion (1395 <- 1306)
- minor framework updates & code tidy (1578)

4.66.3

- `cli`: `eval` safety (fixes CVE-2024-34062, GHSA-g7vv-2v7x-gj9p)

4.66.2

- `pandas`: add `DataFrame.progress_map` (1549)
- `notebook`: fix HTML padding (1506)
- `keras`: fix resuming training when `verbose>=2` (1508)
- fix `format_num` negative fractions missing leading zero (1548)
- fix Python 3.12 `DeprecationWarning` on `import` (1519)
- linting: use f-strings (1549)
- update tests (1549)
+ fix `pandas` warnings
+ fix `asv` (https://github.com/airspeed-velocity/asv/issues/1323)
+ fix macos `notebook` docstring indentation
- CI: bump actions (1549)

4.66.1

- fix `utils.envwrap` types (1493 <- 1491, 1320 <- 966, 1319)
+ e.g. cloudwatch & kubernetes workaround: `export TQDM_POSITION=-1`
- drop mentions of unsupported Python versions

4.66.0

- environment variables to override defaults (`TQDM_*`) (1491 <- 1061, 950 <- 614, 1318, 619, 612, 370)
+ e.g. in CI jobs, `export TQDM_MININTERVAL=5` to avoid log spam
+ add tests & docs for `tqdm.utils.envwrap`
- fix & update CLI completion
- fix & update API docs
- minor code tidy: replace `os.path` => `pathlib.Path`
- fix docs image hosting
- release with CI bot account again (https://github.com/cli/cli/issues/6680)

4.65.2

- exclude `examples` from distributed wheel (1492)

4.65.1

- migrate `setup.{cfg,py}` => `pyproject.toml` (1490)
+ fix `asv` benchmarks
+ update docs
- fix snap build (1490)
- fix & update tests (1490)
+ fix flaky notebook tests
+ bump `pre-commit`
+ bump workflow actions

4.65.0

- add Python 3.11 and drop Python 3.6 support (1439, 1419, 502 <- 720, 620)
- misc code & docs tidy
- fix & update CI workflows & tests

4.64.1

- support `ipywidgets>=8`  (1366, 1361 <- 1310, 1359, 1360, 1364)
+ fix jupyter lab display
+ update notebook tests

4.64.0

- add `contrib.slack` (1313)

4.63.2

- `rich`: expose `options` kwargs (1282)
- `autonotebook`: re-enable VSCode (1309)
- misc docs typos (1301, 1299)
- update dev dependencies (1311)

4.63.1

- fix stderr/stdout missing `flush()` (1248 <- 1177)
- misc speed improvements/optimisations

4.63.0

- add `__reversed__()`
- add efficient `__contains__()`
- improve CLI startup time (replace `pkg_resources` => `importlib`)
- `tqdm.autonotebook` warning & `std` fallback on missing `ipywidgets` (1218 <- 1082, 1217)
- warn on positional CLI arguments
- misc build/test framework updates
+ enable `py3.10` tests
+ add `conda` dependencies
+ update pre-commit hooks
+ fix `pytest` config (`nbval`, `asyncio`)
+ fix dependencies & tests
+ fix site deployment
Links

Update chardet from 4.0.0 to 7.6.0.

Changelog

7.6.0

-------------------

**Performance:**

- Compiled wheels now score bigram profiles through a small Cython
kernel alongside mypyc, and the pair is 4.7x faster than the pure
wheel on CPython 3.14.  ``_kernel.py`` stays plain Python (PyPy and
pure wheels run it interpreted, unchanged), ``_kernel.pxd`` adds C
types at build time and ships nothing, and detection output is
bit-identical.  The kernel declares itself safe without the GIL, so
free-threaded CPython scales instead of silently re-enabling the GIL
on import: 3.14t runs the whole suite in ~340ms across 8 threads,
the fastest configuration measured.  Compiled builds now need both
hooks::

   HATCH_BUILD_HOOK_ENABLE_MYPYC=true HATCH_BUILD_HOOK_ENABLE_CUSTOM=true uv build

(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Added support for CPython 3.15, including the free-threaded build.
No code changes were needed.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Bug Fixes:**

- Fixed delimited ASCII data like ``|NAME,+LAY|`` misdetecting as
UTF-7, a follow-up to `371
<https://github.com/chardet/chardet/issues/371>`_.  Two new checks:
the whole buffer must actually decode as UTF-7 (``+|`` is an illegal
shift, so tabular data fails immediately), and a block encoding a
single code unit must land in a script range where a lone shifted
character plausibly occurs.  ``+LAY`` decodes to U+2C06, Glagolitic;
no genuine lone block in the corpus lands anywhere like it, while em
dashes, ellipses, kanji, and accented letters all pass.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Signed UTF-7 no longer reads as ASCII.  The BOM stage recognizes the
four UTF-7 signature prefixes (``+/v8-`` and friends) when the rest
of the buffer decodes as UTF-7 --- the prefix alone is ordinary ASCII
(a diff of V8 source paths starts with ``+/v8``).  This is a
deliberate divergence from WHATWG's browser-security exclusion of
UTF-7: chardet already detects the unsigned form, so refusing only
the signed one made no sense.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- ``detect()`` no longer returns an encoding that cannot decode the
input it was given
(`380 <https://github.com/chardet/chardet/issues/380>`_).  When the
whole input has been examined and the winner's only multi-byte
evidence is an incomplete trailing sequence, the best candidate that
decodes the input completely wins instead.  Genuinely truncated data
keeps its answer: CJK cut mid-character, or input sliced at
``max_bytes``.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Short apostrophe-heavy English is no longer labeled Scottish Gaelic
or Breton.  A rare-language label on an input under 128 bytes now
needs a 0.03 lead over the best mainstream language, mirroring the
encoding-side arbitration in ADR-0005.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Hungarian text no longer loses to a Czech reading: confusion
rescoring compares tied pairs only under language models both
encodings have.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Space-padded text no longer matches a degenerate Serbian model at
high confidence.  Statistical scoring now skips repeated-whitespace
bigrams, matching the whitespace collapse training already applies.
Fixed 21 files plus a long-standing GB2312 known failure.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- EBCDIC text is no longer invisible to the early pipeline.  The
binary stage treats EBCDIC's 0x05/0x15 tab and newline as whitespace
when the data is high-byte-dominated, and the markup stage reads
charset declarations through a cp037 decode of the head.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Fixed the last two EBCDIC sibling misdetections: a letter reading
beating punctuation is no longer evidence by itself, and
low-confidence near-ties scan deeper but need the category vote and
the bigram rescore to agree.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Fixed training normalization gaps that starved ISO-8859-16 (legacy
cedilla forms) and the 26 pre-euro encodings (the euro sign) at
exactly the bytes that discriminate them from their siblings.
Cedilla folds to comma-below and the euro to the currency sign
wherever the target encoding cannot represent them.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Improvements:**

- Retrained every bigram model on a refreshed, deduplicated corpus
with the ADR-0004 hardening: whitespace collapses after encoding,
retention guards hard-fail mostly unencodable corpora, Serbian gets
real Latin-script text, CP1006 gains its sixteen missing Urdu
letters, and wiki markup is stripped before bigram counting.
Training provenance is now recorded per model, so test data added
after a retrain is detectable as such.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- New ANSI-art model.  cp437 detection now includes a profile trained
on 16,621 text-mode art files from `16colo.rs <https://16colo.rs/>`_,
keyed under the ``zxx`` pseudo-language and reported with
``language=None``.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Rare-language arbitration: a low-confidence statistical winner from a
language with no documented legacy-encoding population (Scottish
Gaelic, Welsh, Irish, Breton) yields to a near-tied mainstream
candidate.  Genuine Celtic text wins by landslides and is unaffected;
eight boundary sentinels in the test suite guard the gate.  Design
and evidence in ADR-0005.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Confusion-group resolution is context-aware: votes are counted per
occurrence, letter readings with no word shape are demoted, and
art-model wins are exempt.  Fixed twelve EBCDIC and Latin files that
were riding single-byte coin flips.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Statistical dead heats no longer resolve by candidate enumeration
order.  Three tiebreaks: prefer the Windows superset, prefer the more
prevalent era when there is no high-byte evidence, and prefer a
classic-Mac candidate when line endings are bare ``\r``.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Training pipeline hardening after a cache-loss post-mortem: retrains
that would silently drop a model now abort loudly, caches filter in
place instead of being deleted wholesale, and the artpack fetcher
builds into a temporary directory.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

7.5.1

-------------------

**Bug Fixes:**

- Fixed markup-declared encodings being reported under a name that can't
decode the input.  A page declaring ``Shift_JIS`` but using CP932
extension characters (like ①) came back as ``SHIFT_JIS``, which fails
``.decode()`` on those same bytes.  Superset promotion (``CP932``,
``CP949``) now always fires when the reported name can't decode the
data but the superset can.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Fixed a lying charset declaration beating genuine UTF-8 content.  A
UTF-8 page declaring ``<meta charset="iso-8859-1">`` came back as
ISO-8859-1, which decodes to mojibake.  Valid multi-byte UTF-8 now
wins over a conflicting declaration; pure ASCII and real single-byte
content still honor it.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Fixed BOM-less UTF-16 byte-order detection for pure-CJK text.  With no
ASCII in the sample, the only null bytes come from the low byte of
characters like U+4E00 (一), which sit in the wrong parity position, so
short Chinese UTF-16 samples came back with reversed endianness at full
confidence.  Byte order is now chosen by decoding both ways and
comparing text quality, with the null signal breaking near-ties.  Found
by scoring chardet against charset-normalizer's char-dataset.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

7.5.0

-------------------

**Bug Fixes:**

- Fixed multi-byte encodings being eliminated when the input ends in an
incomplete character.  Byte-validity filtering decoded with a one-shot
strict decode, which cannot tell a truncated tail from corrupt data, so a
single dangling lead byte dropped every CJK candidate and the result came
down to input-length parity — a 184-byte GBK sample detected as
``GB18030``, the same sample minus one byte as ``Windows-1256``.  This was
also reachable on complete, well-formed files, because chardet slices its
own input at ``max_bytes`` and at ``_SCAN_LIMIT`` in
``_validate_bytes()``: a valid 14 kB GBK page with an honest
``<meta charset="gbk">`` lost its declaration, and with it ``text/html``
and 0.95 confidence, whenever byte 4096 happened to split a character.
Validity checks now decode incrementally with ``final=False``, deferring a
partial trailing character while still rejecting corruption anywhere
before it.
(`António Afonso <https://github.com/aadsm>`_ via Claude,
`376 <https://github.com/chardet/chardet/pull/376>`_)

- Fixed ``compat_names`` (the default) leaking internal Python codec names
for seven encodings.  ``detect()`` now returns ``ISO-8859-2``,
``ISO-8859-6``, ``ISO-8859-13``, ``Windows-1250``, ``Windows-1256``,
``Windows-1257``, and ``CP874`` instead of their lowercase codec
spellings.  These were absent from ``_COMPAT_NAMES`` after the 7.1.0
switch to codec-name canonicals, which made default output inconsistent
with their siblings (e.g. ``cp1250`` vs ``Windows-1251``) and with the
encoding-name table in :doc:`usage`.
(`António Afonso <https://github.com/aadsm>`_ via Claude,
`374 <https://github.com/chardet/chardet/pull/374>`_)
- Fixed ``compat_names`` (the default) leaking the internal ``cp932`` codec
name.  ``detect()`` now returns ``CP932`` instead of ``cp932``, matching
its Japanese siblings (``shift_jis_2004`` → ``SHIFT_JIS``) and the value
chardet 5.x/6.x returned.
(`uttam12331 <https://github.com/uttam12331>`_,
`375 <https://github.com/chardet/chardet/pull/375>`_)

**Performance:**

- Statistical scoring now skips single-byte models that provably can't
beat the current runner-up, using per-model row-maximum tables
(``rowmax.bin``).  Results are bit-identical: multi-byte models are
always scored in full and ``detect_all()`` bypasses pruning.  Mean
detection time dropped ~2.9x with mypyc, with the largest gains on
legacy CJK (p99 from 9.5ms to 3.3ms).
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Model tables are now ``bytes`` (native array indexing under mypyc,
instead of boxed ``memoryview`` calls), and the model blob is
decompressed in chunks rather than one shot: peak process memory
dropped from 53.9 to 27.4 MiB.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Confusion-group resolution and post-processing now use
``bytes.translate`` prefilters instead of per-byte Python scans,
making near-tie resolution cheaper on large inputs.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Improvements:**

- ``prefer_superset=True`` is now documented as the recommended mode and
**will become the default in chardet 8.0**.  Detection examines at most
``max_bytes`` of input, so only the superset encoding is guaranteed to
decode bytes beyond that window — the same reasoning behind the
WHATWG/W3C Encoding Standard's rule that browsers decode ``ascii`` and
``iso-8859-1`` content as ``windows-1252``.  Callers that depend on
subset names should start passing ``prefer_superset=False`` explicitly.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- ``chardet.equivalences`` is now a deprecation shim.  Accuracy-evaluation
predicates (``is_correct``, ``is_equivalent_detection``, etc.) moved to
``chardet.evaluation``; public-API encoding-name remapping
(``apply_compat_names``, ``apply_preferred_superset``) moved to
``chardet.output_names``.  Existing imports keep working with a
``DeprecationWarning``.  ``chardet.equivalences`` will be removed in 8.0.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Internal pipeline reorganization: language detection,
markup-superset promotion, and post-processing rank corrections moved
out of the orchestrator into ``pipeline/language.py``,
``pipeline/markup.py``, and ``pipeline/postprocess.py`` respectively.
No behavior change.  The two new modules are also added to the mypyc
compilation list.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

7.4.3

-------------------

**Bug Fixes:**

- Fixed ``ValueError: embedded null character`` crash when input contained
a ``<meta charset>`` declaration with a null byte in the encoding name
(e.g. ``b'<meta charset="\x00utf-8">'``). ``codecs.lookup()`` raises
``ValueError`` on embedded nulls, and ``lookup_encoding()`` was only
catching ``LookupError``. Also added defensive ``ValueError`` catches
in ``_validate_bytes()`` and ``_to_utf8()`` for completeness.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`369 <https://github.com/chardet/chardet/issues/369>`_)

7.4.2

-------------------

**Bug Fixes:**

- Fixed ``RuntimeError: pipeline must always return at least one result``
on ~2% of all possible two-byte inputs (e.g. ``b"\xf9\x92"``).
Multi-byte encodings like CP932 and Johab could score above the
structural confidence threshold on very short inputs, but then
statistical scoring would return nothing, leaving the pipeline with an
empty result list instead of falling through to the ``no_match_encoding``
fallback.
(`Jason Barnett <https://github.com/jasonwbarnett>`_ via Claude,
`367 <https://github.com/chardet/chardet/issues/367>`_,
`368 <https://github.com/chardet/chardet/pull/368>`_)

**Improvements:**

- Added ~90 encoding aliases from the WHATWG Encoding Standard and IANA
Character Sets registry so that ``<meta charset>`` labels like
``x-cp1252``, ``x-sjis``, ``dos-874``, ``csUTF8``, and the
``cswindows*`` family all resolve correctly through the markup detection
stage. Every alias was driven by a failing spec-compliance test.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`366 <https://github.com/chardet/chardet/pull/366>`_)
- Added a spec-compliance test suite covering Python decode round-trips
for all 86 registry encodings, WHATWG web-platform label resolution,
IANA preferred MIME names, and Unicode/RFC conformance (BOM sniffing,
UTF-8 boundary cases, UTF-16 surrogate pairs). This is the test suite
that would have caught the 7.4.1 BOM bug before release.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`366 <https://github.com/chardet/chardet/pull/366>`_)

7.4.1

-------------------

**Bug Fixes:**

- BOM-prefixed UTF-16 and UTF-32 input now reports ``utf-16`` and
``utf-32`` instead of the endian-specific variants. Python's
``utf-16-le``/``utf-16-be``/``utf-32-le``/``utf-32-be`` codecs keep
the BOM as a U+FEFF in the decoded string, while ``utf-16``/``utf-32``
strip it, so callers passing the detection result directly to
``.decode()`` were getting a stray BOM at the start of their text.
BOM-less UTF-16/32 detection (via null-byte patterns) is unchanged
and still returns the endian-specific name.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`364 <https://github.com/chardet/chardet/issues/364>`_,
`365 <https://github.com/chardet/chardet/pull/365>`_)

7.4.0

-------------------

**Performance:**

- Switched to dense zlib-compressed model format (v2): models are now
stored as contiguous ``memoryview`` slices of a single decompressed
blob, eliminating per-model ``struct.unpack`` overhead. Cold start
(import + first detect) dropped from ~75ms to ~13ms with mypyc.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`354 <https://github.com/chardet/chardet/pull/354>`_)

**Accuracy:**

- Accuracy improved from 98.6% to 99.3% (2499/2517 files) through
a combination of training and scoring improvements:

- Eliminated train/test data overlap by content-fingerprinting test
 suite articles and excluding them from training data
 (`351 <https://github.com/chardet/chardet/pull/351>`_)
- Added MADLAD-400 and Wikipedia as supplemental training sources to
 fill gaps left by exclusion filtering
 (`351 <https://github.com/chardet/chardet/pull/351>`_)
- Improved non-ASCII bigram scoring: high-byte bigrams are now
 preserved during training (instead of being crushed by global
 normalization), and weighted by per-bigram IDF so encoding-specific
 byte patterns contribute proportionally to how discriminative they
 are (`352 <https://github.com/chardet/chardet/pull/352>`_)
- Added encoding-aware substitution filtering: character substitutions
 during training now only apply for characters the target encoding
 cannot represent
- Increased training samples from 15K to 25K per language/encoding pair
 (`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Bug Fixes:**

- Added dedicated structural analyzers for CP932, CP949, and
Big5-HKSCS: these superset encodings previously shared their base
encoding's byte-range analyzer, missing extended ranges unique to each
superset
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`353 <https://github.com/chardet/chardet/pull/353>`_)

7.3.0

-------------------

**License:**

- **0BSD license** — the project license has been changed from MIT to
`0BSD <https://opensource.org/license/0bsd>`_, a maximally permissive
license with no attribution requirement. All prior 7.x releases
should also be considered 0BSD licensed as of this release.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Features:**

- Added ``mime_type`` field to detection results — identifies file types
for both binary (via magic number matching) and text content. Returned
in all ``detect()``, ``detect_all()``, and ``UniversalDetector`` results.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`350 <https://github.com/chardet/chardet/pull/350>`_)
- New ``pipeline/magic.py`` module detects 40+ binary file formats
including images, audio/video, archives, documents, executables, and
fonts. ZIP-based formats (XLSX, DOCX, JAR, APK, EPUB, wheel,
OpenDocument) are distinguished by entry filenames.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`350 <https://github.com/chardet/chardet/pull/350>`_)

**Bug Fixes:**

- Fixed incorrect equivalence between UTF-16-LE and UTF-16-BE in
accuracy testing — these are distinct encodings with different byte
order, not interchangeable
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Performance:**

- Added 4 new modules to mypyc compilation (orchestrator, confusion,
magic, ascii), bringing the total to 11 compiled modules
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Capped statistical scoring at 16 KB — bigram models converge quickly,
so large files no longer score the full 200 KB. Worst-case detection
time dropped from 62ms to 26ms with no accuracy loss.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Replaced ``dataclasses.replace()`` with direct ``DetectionResult``
construction on hot paths, eliminating ~354k function calls per full
test suite run
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Build:**

- Added riscv64 to the mypyc wheel build matrix — prebuilt wheels are
now published for RISC-V Linux alongside existing architectures
(`Bruno Verachten <https://github.com/gounthar>`_,
`348 <https://github.com/chardet/chardet/pull/348>`_)

7.2.0

-------------------

**Features:**

- Added ``include_encodings`` and ``exclude_encodings`` parameters to
:func:`~chardet.detect`, :func:`~chardet.detect_all`, and
:class:`~chardet.UniversalDetector` — restrict or exclude specific
encodings from the candidate set, with corresponding
``-i``/``--include-encodings`` and ``-x``/``--exclude-encodings``
CLI flags
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`343 <https://github.com/chardet/chardet/pull/343>`_)
- Added ``no_match_encoding`` (default ``"cp1252"``) and
``empty_input_encoding`` (default ``"utf-8"``) parameters — control
which encoding is returned when no candidate survives the pipeline or
the input is empty, with corresponding CLI flags
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`343 <https://github.com/chardet/chardet/pull/343>`_)
- Added ``-l``/``--language`` flag to ``chardetect`` CLI — shows the
detected language (ISO 639-1 code and English name) alongside the encoding
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`342 <https://github.com/chardet/chardet/pull/342>`_)

7.1.0

-------------------

**Features:**

- Added PEP 263 encoding declaration detection — `` -*- coding: ... -*-``
and `` coding=...`` declarations on lines 1–2 of Python source files are
now recognized with confidence 0.95
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`249 <https://github.com/chardet/chardet/issues/249>`_)
- Added ``chardet.universaldetector`` backward-compatibility stub so that
``from chardet.universaldetector import UniversalDetector`` works with a
deprecation warning
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`341 <https://github.com/chardet/chardet/issues/341>`_)

**Fixes:**

- Fixed false UTF-7 detection of ASCII text containing ``++`` or ``+word``
patterns
(`Dan Blanchard <https://github.com/dan-blanchard>`_,
`332 <https://github.com/chardet/chardet/issues/332>`_,
`335 <https://github.com/chardet/chardet/pull/335>`_)
- Fixed 0.5s startup cost on first ``detect()`` call — model norms are now
computed during loading instead of lazily iterating 21M entries
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`333 <https://github.com/chardet/chardet/issues/333>`_,
`336 <https://github.com/chardet/chardet/pull/336>`_)
- Fixed undocumented encoding name changes between chardet 5.x and 7.0 —
``detect()`` now returns chardet 5.x-compatible names by default
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`338 <https://github.com/chardet/chardet/pull/338>`_)
- Improved ISO-2022-JP family detection — recognizes ESC sequences for
ISO-2022-JP-2004 (JIS X 0213) and ISO-2022-JP-EXT (JIS X 0201 Kana)
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Fixed silent truncation of corrupt model data (``iter_unpack`` yielded
fewer tuples instead of raising)
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Fixed incorrect date in LICENSE
(`Dan Blanchard <https://github.com/dan-blanchard>`_)

**Performance:**

- 5.5x faster first-detect time (~0.42s → ~0.075s) by computing model
norms as a side-product of ``load_models()``
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- ~40% faster model parsing via ``struct.iter_unpack`` for bulk entry
extraction (eliminates ~305K individual ``unpack`` calls)
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**New API parameters:**

- Added ``compat_names`` parameter (default ``True``) to
:func:`~chardet.detect`, :func:`~chardet.detect_all`, and
:class:`~chardet.UniversalDetector` — set to ``False`` to get raw Python
codec names instead of chardet 5.x/6.x compatible display names
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Added ``prefer_superset`` parameter (default ``False``) — remaps legacy
ISO/subset encodings to their modern Windows/CP superset equivalents
(e.g., ASCII → Windows-1252, ISO-8859-1 → Windows-1252).
**This will default to ``True`` in the next major version (8.0).**
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Deprecated ``should_rename_legacy`` in favor of ``prefer_superset`` —
a deprecation warning is emitted when used
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

**Improvements:**

- Switched internal canonical encoding names to Python codec names
(e.g., ``"utf-8"`` instead of ``"UTF-8"``), with ``compat_names``
controlling the public output format.  See :doc:`usage` for the full
mapping table.
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Added ``lookup_encoding()`` to ``registry`` for case-insensitive
resolution of arbitrary encoding name input to canonical names
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Achieved 100% line coverage across all source modules (+31 tests)
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Updated benchmark numbers: 98.2% encoding accuracy, 95.2% language
accuracy on 2,510 test files
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Pinned test-data cloning to chardet release version tags for
reproducible builds
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

7.0.1

-------------------

**Fixes:**

- Fixed false UTF-7 detection of SHA-1 git hashes
(`Alex Rembish <https://github.com/rembish>`_,
`324 <https://github.com/chardet/chardet/pull/324>`_)
- Fixed ``_SINGLE_LANG_MAP`` missing aliases for single-language encoding
lookup (e.g., ``big5`` → ``big5hkscs``)
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Fixed PyPy ``TypeError`` in UTF-7 codec handling
(`Dan Blanchard <https://github.com/dan-blanchard>`_)

**Improvements:**

- Retrained bigram models — 24 previously failing test cases now pass
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- Updated language equivalences for mutual intelligibility (Slovak/Czech,
East Slavic + Bulgarian, Malay/Indonesian, Scandinavian languages)
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)

7.0.0

-------------------

Ground-up, 0BSD-licensed rewrite of chardet
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude,
`322 <https://github.com/chardet/chardet/pull/322>`_). Same package name,
same public API — drop-in replacement for chardet 5.x/6.x.

**Highlights:**

- **0BSD license** (previous versions were LGPL)
- **96.8% accuracy** on 2,179 test files (+2.3pp vs chardet 6.0.0,
+7.7pp vs charset-normalizer)
- **41x faster** than chardet 6.0.0 with mypyc (**28x** pure Python),
**7.5x faster** than charset-normalizer
- **Language detection** for every result (90.5% accuracy across 49
languages)
- **99 encodings** across six eras (MODERN_WEB, LEGACY_ISO, LEGACY_MAC,
LEGACY_REGIONAL, DOS, MAINFRAME)
- **12-stage detection pipeline** — BOM, UTF-16/32 patterns, escape
sequences, binary detection, markup charset, ASCII, UTF-8 validation,
byte validity, CJK gating, structural probing, statistical scoring,
post-processing; the markup stage's PEP 263 declaration sniffing was
requested by `patrikha <https://github.com/patrikha>`_ in
`249 <https://github.com/chardet/chardet/issues/249>`_
- **Bigram frequency models** trained on CulturaX multilingual corpus
data for all supported language/encoding pairs
- **Optional mypyc compilation** — 1.49x additional speedup on CPython
- **Thread-safe** ``detect()`` and ``detect_all()`` with no measurable
overhead; scales on free-threaded Python 3.13t+
- **Negligible import memory** (96 B)
- **Zero runtime dependencies**

6.0.0.post1

-------------------------

- Fixed ``__version__`` not being set correctly in the package
(`Dan Blanchard <https://github.com/dan-blanchard>`_)

6.0.0

-------------------

**Features:**

- Unified single-byte charset detection with proper language-specific
bigram models for all single-byte encodings (replaces ``Latin1Prober``
and ``MacRomanProber`` heuristics)
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- 38 new languages: Arabic, Belarusian, Breton, Croatian, Czech, Danish,
Dutch, English, Esperanto, Estonian, Farsi, Finnish, French, German,
Icelandic, Indonesian, Irish, Italian, Kazakh, Latvian, Lithuanian,
Macedonian, Malay, Maltese, Norwegian, Polish, Portuguese, Romanian,
Scottish Gaelic, Serbian, Slovak, Slovene, Spanish, Swedish, Tajik,
Ukrainian, Vietnamese, Welsh
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- ``EncodingEra`` filtering via new ``encoding_era`` parameter
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- ``max_bytes`` and ``chunk_size`` parameters for ``detect()``,
``detect_all()``, and ``UniversalDetector``; chunked processing was
proposed by `deedy5 <https://github.com/deedy5>`_ in
`284 <https://github.com/chardet/chardet/issues/284>`_
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- ``-e``/``--encoding-era`` CLI flag
(`Dan Blanchard <https://github.com/dan-blanchard>`_ via Claude)
- EBCDIC detection (CP037, CP500)
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Direct GB18030 support (replaces redundant GB2312 prober)
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Binary file detection
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Python 3.12, 3.13, and 3.14 support
(`Hugo van Kemenade <https://github.com/hugovk>`_,
`283 <https://github.com/chardet/chardet/pull/283>`_)
- GitHub Codespaces support
(`oxygen dioxide <https://github.com/oxygen-dioxide>`_,
`312 <https://github.com/chardet/chardet/pull/312>`_)

**Breaking changes:**

- Dropped Python 3.7, 3.8, and 3.9 (requires Python 3.10+)
- Removed ``Latin1Prober`` and ``MacRomanProber``
- Removed EUC-TW support
- Removed ``LanguageFilter.NONE``
- ``detect()`` default changed to ``encoding_era=EncodingEra.MODERN_WEB``

**Fixes:**

- Fixed CP949 state machine
(`nenw* <https://github.com/HelloWorld017>`_,
`268 <https://github.com/chardet/chardet/pull/268>`_)
- Fixed SJIS distribution analysis (second-byte range >= 0x80)
(`Kadir Can Ozden <https://github.com/bysiber>`_,
`315 <https://github.com/chardet/chardet/pull/315>`_)
- Fixed ``max_bytes`` not being passed to ``UniversalDetector``
(`Kadir Can Ozden <https://github.com/bysiber>`_,
`314 <https://github.com/chardet/chardet/pull/314>`_)
- Fixed UTF-16/32 detection for non-ASCII-heavy text
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Fixed GB18030 ``char_len_table``
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Fixed UTF-8 state machine
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Fixed ``detect_all()`` returning inactive probers
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Fixed early cutoff bug
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Updated LGPLv2.1 license text for remote-only FSF address
(`Ben Beasley <https://github.com/musicinmybrain>`_,
`307 <https://github.com/chardet/chardet/pull/307>`_)

5.2.0

-------------------

- Added support for running the CLI via ``python -m chardet``
(`Dan Blanchard <https://github.com/dan-blanchard>`_)

5.1.0

-------------------

- Added ``should_rename_legacy`` argument to remap legacy encoding names
to modern equivalents
(`Dan Blanchard <https://github.com/dan-blanchard>`_,
`264 <https://github.com/chardet/chardet/pull/264>`_)
- Added MacRoman encoding prober
(`Elia Robyn Lake <https://github.com/rspeer>`_)
- Added ``--minimal`` flag to ``chardetect`` CLI
(`Dan Blanchard <https://github.com/dan-blanchard>`_,
`214 <https://github.com/chardet/chardet/pull/214>`_)
- Added type annotations and mypy CI
(`Jon Dufresne <https://github.com/jdufresne>`_,
`261 <https://github.com/chardet/chardet/pull/261>`_)
- Added support for Python 3.11
(`Hugo van Kemenade <https://github.com/hugovk>`_,
`274 <https://github.com/chardet/chardet/pull/274>`_)
- Added ISO-8859-15 capital letter sharp S handling
(`Simon Waldherr <https://github.com/SimonWaldherr>`_,
`222 <https://github.com/chardet/chardet/pull/222>`_)
- Clarified LGPL version in license trove classifier
(`Ben Beasley <https://github.com/musicinmybrain>`_,
`255 <https://github.com/chardet/chardet/pull/255>`_)
- Removed support for Python 3.6
(`Jon Dufresne <https://github.com/jdufresne>`_,
`260 <https://github.com/chardet/chardet/pull/260>`_)

5.0.0

-------------------

- Added Johab Korean prober
(`grizlupo <https://github.com/grizlupo>`_,
`172 <https://github.com/chardet/chardet/pull/172>`_,
`207 <https://github.com/chardet/chardet/pull/207>`_)
- Added UTF-16/32 BE/LE probers
(`Jason Zavaglia <https://github.com/jpz>`_,
`109 <https://github.com/chardet/chardet/pull/109>`_,
`206 <https://github.com/chardet/chardet/pull/206>`_)
- Added test data for Croatian, Czech, Hungarian, Polish, Slovak,
Slovene, Greek, Turkish
(`Dan Blanchard <https://github.com/dan-blanchard>`_)
- Improved XML tag filtering
(`Dan Blanchard <https://github.com/dan-blanchard>`_,
`208 <https://github.com/chardet/chardet/pull/208>`_)
- Made ``detect_all`` return child prober confidences
(`Dan Blanchard <https://github.com/dan-blanchard>`_,
`210 <https://github.com/chardet/chardet/pull/210>`_)
- Added support for Python 3.10
(`Hugo van Kemenade <https://github.com/hugovk>`_,
`232 <https://github.com/chardet/chardet/pull/232>`_)
- Slight performance increase
(`deedy5 <https://github.com/deedy5>`_,
`252 <https://github.com/chardet/chardet/pull/252>`_)
- Dropped Python 2.7, 3.4, 3.5 (requires Python 3.6+)
Links

Update pymysql from 1.0.2 to 1.2.0.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update statsd from 3.3.0 to 4.0.1.

Changelog

4.0.1

Fixed

- Updated PyPI trove classifiers for current Python versions.

4.0

Added

- Updates support to Python 3.7 through 3.11.
- Added `close()` method to UDP-based `StatsClient`. (136)

Dropped

- Drops support for Python 2.

Fixed

- Using a timing decorator on an async function should now properly measure the
execution time, instead of counting immediately. See 119.
Links

Update xxhash from 2.0.2 to 4.0.1.

Changelog

4.0.1

~~~~~~~~~~~~~~~~~

- Clean up ``_parse_init_args`` keyword handling so the defensive check
for a duplicate ``data`` keyword raises a proper error message
- Add ``_xxhash`` module docstring

4.0.0

~~~~~~~~~~~~~~~~~

- **Breaking change**: Drop support for Python 3.8, require Python >= 3.9
- **Breaking change**: Remove deprecated ``xxhash.VERSION_TUPLE``
- **Breaking change**: The ``input`` keyword argument is renamed to ``data``
in constructors and one-shot functions. ``update()`` additionally gains a
``data`` keyword argument (it accepted no keyword arguments before).
- **Breaking change**: ``str`` input is no longer accepted and raises
``TypeError: Strings must be encoded before hashing``; encode to
``bytes`` before hashing
- Upgrade xxHash from v0.8.2 to v0.8.3. Note: on GCC/Clang source builds
that target AVX2 (e.g. ``-march=x86-64-v3``), upstream v0.8.3
autovectorizes ``XXH64_update()`` and makes the xxh64 streaming path
about 2x slower. The shipped wheels are built for baseline x86-64 and
are unaffected. Source builds can work around it by adding
``-fno-tree-vectorize`` to the compiler flags.
- Add per-object locking for thread safety, with sub-interpreter and
free-threaded (no-GIL) Python support. The GIL is now released only
while hashing inputs larger than 64 KiB; previously ``update()``
released it unconditionally and one-shot functions always held it.
- Speed up hash constructors by switching them to ``tp_vectorcall``.
- Build pyodide wasm32 wheels
- Add s390x big-endian test job
- Add Python 3.15 classifier
- CI: shard the PyPI upload into parallel groups and create the GitHub
Release automatically

3.8.1

~~~~~~~~~~~~~~~~~

- Register the "benchmark" pytest mark to avoid PytestUnknownMarkWarning
- Update C extension docstrings and remove stale comments

3.8.0

~~~~~~~~~~~~~~~~~

- Speed up module-level one-shot ``digest()``, ``intdigest()``, and
``hexdigest()`` functions by switching them to ``METH_FASTCALL``.
- Keep one-shot argument handling consistent with hash constructors, including
positional and keyword ``input``/``seed`` arguments, duplicate argument
errors, and oversized seed wrapping.
- Fix error handling in the ``xxh3_128`` integer digest path so allocation
failures are reported cleanly.
- Fix Python 3.8 builds by adding a ``PyModule_AddType`` compatibility
fallback with correct reference counting.
- Correct type stubs for ``xxh64_digest()``, ``xxh64_hexdigest()``, and
``xxh64_intdigest()``, they were incorrectly aliased to xxh3_64 functions.

3.7.2

~~~~~~~~~~~~~~~~~

- Register the "benchmark" pytest mark to avoid PytestUnknownMarkWarning
- Update C extension docstrings and remove stale comments

3.7.1

~~~~~~~~~~~~~~~~~

- Fix memory leak in copy() and new() when memory allocation fails (rare edge case)
- Fix seed/reset state initialization in xxh32 and xxh64 (unlikely to affect normal usage)
- Replace Py_BuildValue with PyLong_FromUnsignedLong/LongLong for performance
- Update README examples to use bytes literals
- Add CodSpeed performance benchmarks and CI workflow
- Build aarch64/armv7l on native Arm runners; test against Python 3.15.0-beta.2

3.7.0

~~~~~~~~~~~~~~~~~

- Drop support for Python 3.7
- Build armv7l manylinux/musllinux wheels
- Build riscv64 manylinux/musllinux wheels
- Build android and ios wheels

3.6.0

~~~~~~~~~~~~~~~~~

- Build wheels for Python 3.14
- Python free-threading support
- Typing: Use Buffer type stubs
- Deprecate xxhash.VERSION_TUPLE, it will be removed in the next major release

3.5.0

~~~~~~~~~~~~~~~~~

- Build wheels for Python 3.13

3.4.1

~~~~~~~~~~~~~~~~~

- Build wheels for Python 3.12
- Remove setuptools_scm

3.4.0

~~~~~~~~~~~~~~~~~

*Yanked* due to wheels building problem.

3.3.0

~~~~~~~~~~~~~~~~~

- Upgrade xxHash to v0.8.2
- Drop support for Python 3.6

3.2.0

~~~~~~~~~~~~~~~~~

This is the last version to support Python 3.6

- Build Python 3.11 wheels.
- Remove setup.py test_suites, call unittest directly

3.1.0

~~~~~~~~~~~~~~~~~

- Type annotations.
- Enabled muslinux wheels building.

3.0.0

~~~~~~~~~~~~~~~~~

- New set `algorithms_available` lists all implemented algorithms in `xxhash`
package.
- Upgrade xxHash to v0.8.1.
- Drop support for EOL Python versions, require python >= 3.6 from now on.
- Migrate to github actions and build arm64 wheels for macOS.
- Always release GIL.
Links

Update objgraph from 3.5.0 to 3.6.2.

Changelog

3.6.2

------------------

- Add support for Python 3.13.

3.6.1

------------------

- Add support for Python 3.12.

3.6.0

------------------

- Add support for Python 3.9, 3.10, and 3.11.

- Drop support for Python 2.7 and 3.6.
Links

Update cssutils from 2.3.1 to 2.15.0.

Changelog

2.15.0

=======

Features
--------

- Added support for Selectors Level 4 pseudo-classes that accept full selector lists as arguments (:has(), :is(), :where(), :matches(), :any()). (66)
- Fixed pseudo-class specificity calculation. Pseudo-classes (e.g. ``:hover``, ``:last-child``, ``:nth-child()``) now correctly contribute to the class-weight column per the CSS Selectors spec. (76)

2.14.0

=======

Features
--------

- Moved tests out of the install. (74)

2.13.0

=======

Features
--------

- Replaced encutils with separate package of the same name. (73)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant