Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install -e .
pip install coveralls --upgrade
pip install coveralls pytest --upgrade
- name: Run flake8
run: |
pip install flake8 --upgrade
Expand All @@ -43,7 +43,7 @@ jobs:
pycodestyle --ignore=E128,E261,E225,E501,W605 slugify test.py setup.py
- name: Run test
run: |
coverage run --source=slugify test.py
coverage run --source=slugify -m pytest test.py test_release.py
- name: Coveralls
run: coveralls --service=github
env:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install -e .
pip install coveralls --upgrade
pip install coveralls pytest --upgrade
- name: Run flake8
run: |
pip install flake8 --upgrade
Expand All @@ -43,7 +43,7 @@ jobs:
pycodestyle --ignore=E128,E261,E225,E501,W605 slugify test.py setup.py
- name: Run test
run: |
coverage run --source=slugify test.py
coverage run --source=slugify -m pytest test.py test_release.py
- name: Coveralls
run: coveralls --service=github
env:
Expand Down
13 changes: 12 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
## Unreleased
## 9.0.0 — unreleased

- Add keyword-only `algorithm='legacy'` (permanent default) and explicit `algorithm='modern'` opt-in, plus CLI `--algorithm`. Preserve historical default entity ordering, numeric handling, iterator consumption, separator truncation, and public `smart_truncate` behavior.
- Preserve legacy `auto` backend selection and two-pass replacement defaults; add explicit `backend` and `replacement_stage` keyword-only options and matching CLI flags.
- Add opt-in AnyASCII extra without removing or changing the base text-unidecode dependency.
- Forward CLI `--regex-pattern` (Jacobo de Vera, #176; report by @peter-bloomfield, #175).
- Modern mode only: decode entities before transliteration; handle invalid numeric references per match, including surrogate references (#178, #181, #187).
- Modern mode only: materialize replacement rules and stopword iterables consistently; preserve bytes/bytearray UTF-8 input with clear rejection of unsupported types (#183, #190).
- Modern mode only: budget internal tokens using emitted separator widths, support empty separators, and preserve literal word characters that match delimiters. Public smart_truncate remains unchanged (#47, #185, #186).
- Add regression coverage for whitespace, ordinals, backend-specific output, replacement stages, CLI execution, and installed artifacts.
- Move package metadata to pyproject.toml, retain the typed marker and source tests, and remove the unsafe publish/upload/tag shortcut.
- Document output changes, backend license distinctions, compatibility limits, and migration precautions in docs/release-9/migration.md.

- Support Python 3.14.
- Drop support for Python 3.9 and lower.
Expand Down
10 changes: 7 additions & 3 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
include LICENSE
include README.md
include CHANGELOG.md
include LICENSE README.md CHANGELOG.md
include test.py test_release.py tox.ini dev.requirements.txt
recursive-include docs *.md
recursive-include tools *.py
recursive-include slugify *.py py.typed
global-exclude *.py[cod]
global-exclude __pycache__
309 changes: 130 additions & 179 deletions README.md

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions dev.requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
pycodestyle==2.8.0
twine==3.4.1
flake8==4.0.1
build>=1.2,<2
coverage[toml]>=7,<8
mypy>=1.11,<2
pycodestyle>=2.12,<3
pytest>=8,<10
tox>=4,<5
twine>=6,<7
Loading