Skip to main content

URL slug generation with transliteration and uniqueness.

Project description

philiprehberger-slug

Tests PyPI version Last updated

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:

Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

philiprehberger_slug-0.3.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

philiprehberger_slug-0.3.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

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

Hashes for philiprehberger_slug-0.3.0.tar.gz
Algorithm Hash digest
SHA256 a43b44905a2027af55f29ff49f540b74256290f5c30cdfa3c92608fc4c0ff125
MD5 46c2a3b62ee6c623530660d52fb77012
BLAKE2b-256 3895ac2d1a4a004d472e5ed00cd97cde6552a22ac255288c4abe089c81cb618a

See more details on using hashes here.

File details

Details for the file philiprehberger_slug-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_slug-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 472d6d3c75f0baf78b26696c7eead5d97d53f34420f9e07e845bab40f11c4197
MD5 1b8d213e87972c306fc4900ec60e4476
BLAKE2b-256 54ea92b227301fd7acc8c8150c57c7214c9be22fbe415d1cce77a10a5b20ee8c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page