URL slug generation with transliteration and uniqueness.
Project description
philiprehberger-slug
URL slug generation with transliteration and uniqueness.
Installation
pip install philiprehberger-slug
Usage
from philiprehberger_slug import slugify
slugify("Hello World!") # "hello-world"
slugify("Ünïcödé Têxt") # "unicode-text"
slugify("Straße nach München") # "strasse-nach-munchen"
Options
from philiprehberger_slug import slugify
slugify("Hello World", separator="_") # "hello_world"
slugify("Hello World", max_length=8) # "hello"
slugify("Hello World", lowercase=False) # "Hello-World"
Reserved Slug Blocking
from philiprehberger_slug import slugify, ReservedSlugError
try:
slugify("Admin", reserved=["admin", "api", "about"])
except ReservedSlugError as e:
print(e) # "Slug 'admin' is reserved. Reserved slugs: ['admin', 'api', 'about']"
Custom Transliteration
from philiprehberger_slug import slugify
slugify("Ölkörper", transliterate={"ö": "oe", "ü": "ue"}) # "oelkoerper"
Slug from Parts
from philiprehberger_slug import slug_from_parts
slug_from_parts("2026", "03", "my post title") # "2026-03-my-post-title"
slug_from_parts("Blog", "Straße & Weg") # "blog-strasse-and-weg"
Unique Slugs
from philiprehberger_slug import unique_slugify
existing = {"hello-world", "hello-world-2"}
unique_slugify("Hello World", existing) # "hello-world-3"
Validate a slug
from philiprehberger_slug import is_valid_slug
is_valid_slug("hello-world") # True
is_valid_slug("Hello World") # False
is_valid_slug("--bad--") # False
is_valid_slug("hello_world", separator="_") # True
Strip HTML
from philiprehberger_slug import strip_html
strip_html("<p>Hello <b>World</b></p>") # "Hello World"
API
| Function / Class | Description |
|---|---|
slugify(text, separator, max_length, lowercase, reserved, transliterate) |
Generate a URL-safe slug from text |
slug_from_parts(*parts, separator) |
Join multiple strings into a single slug |
unique_slugify(text, existing, separator, max_length) |
Generate a unique slug with numeric suffix |
is_valid_slug(text, separator) |
Return True if text is already in canonical slug form |
strip_html(text) |
Remove HTML tags from text |
ReservedSlugError |
Raised when a slug matches a reserved word |
Development
pip install -e .
python -m pytest tests/ -v
Support
If you find this project useful:
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file philiprehberger_slug-0.3.0.tar.gz.
File metadata
- Download URL: philiprehberger_slug-0.3.0.tar.gz
- Upload date:
- Size: 7.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a43b44905a2027af55f29ff49f540b74256290f5c30cdfa3c92608fc4c0ff125
|
|
| MD5 |
46c2a3b62ee6c623530660d52fb77012
|
|
| BLAKE2b-256 |
3895ac2d1a4a004d472e5ed00cd97cde6552a22ac255288c4abe089c81cb618a
|
File details
Details for the file philiprehberger_slug-0.3.0-py3-none-any.whl.
File metadata
- Download URL: philiprehberger_slug-0.3.0-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
472d6d3c75f0baf78b26696c7eead5d97d53f34420f9e07e845bab40f11c4197
|
|
| MD5 |
1b8d213e87972c306fc4900ec60e4476
|
|
| BLAKE2b-256 |
54ea92b227301fd7acc8c8150c57c7214c9be22fbe415d1cce77a10a5b20ee8c
|