Simple, generic API for escaping strings.
Project description
Escapism
Simple escaping of text, given a set of safe characters and an escape character.
Usage
Not much to it. Two functions:
escaped = escapism.escape('string to escape')
# 'string_20to_20escape'
original = escapism.unescape(escaped)
There are two optional arguments you can pass to escape():
safe: a string or set of characters that don't need escaping. Default: ascii letters and numbers.escape_char: a single character used for escaping. Default:_.escape_charwill never be considered a safe value.
unescape() accepts the same escape_char argument as escape() if a value other than the default is used.
import string
import escapism
safe = string.ascii_letters + string.digits + '@_-.+'
escape_char = r'%'
escaped = escapism.escape('foø-bar@%!xX?', safe=safe, escape_char=escape_char)
# 'fo%C3%B8-bar@%25%21xX%3F'
original = escapism.unescape(escaped, escape_char=escape_char)
Slugs
escapism 1.1 adds a safe_slug API (extracted from kubespawner 7).
When to use safe_slug instead of escape:
- you don't need to recover the original string (
safe_slugis lossy), but you do need: - length requirements
- start/end rules
- arbitrary other validity requirements
- uniqueness
safe_slug takes an is_valid callable,
which you can use to specify whether a key passes a validity check.
If it passes, the string is returned unmodified.
The default is_valid callable applies a strict subset of various kubernetes rules,
so it will always return a unique string that is valid in just about any kubernetes field (object name, label values, etc.)
- min length of 1
- max length of 63
- contains only lowercase ascii letters, numbers, and '-'
- starts with a letter
- ends with a letter or number
If the input string does not pass the is_valid check,
it is stripped and hashed to ensure validity and uniqueness.
This does:
- cast to lowercase
- strip all non-alphanumeric characters
- if it doesn't start with a letter, prefix with
x- - truncate the safe subset
- append a hash of the original name, utf8-encoded, after
---
Examples:
safe_slug("valid-slug") # "valid-slug"
safe_slug("4start") # "x-4start---3a570dbd"
safe_slug("a" * 64, max_length=20) # "aaaaaaaaa---ffe054fe"
safe_slug("üñîçø∂é") # "x---4072f5a6"
Note: the 'safe' result is not customizable,
which means that safe_slug can only be used if this trim-and-hash result is valid in your scheme.
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
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 escapism-1.1.0.tar.gz.
File metadata
- Download URL: escapism-1.1.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
add130e48a85bb1aaea3e74fb031f5033c7055aedb39a3265f923d5f40c3f974
|
|
| MD5 |
d677f9708a502b3bfda4e1d26aaf14a5
|
|
| BLAKE2b-256 |
d289e7d4dc55d41be5f0999be2a28fd0d4864b4222e9ae4292732e31aaa46696
|
Provenance
The following attestation bundles were made for escapism-1.1.0.tar.gz:
Publisher:
release.yaml on jupyterhub/escapism
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
escapism-1.1.0.tar.gz -
Subject digest:
add130e48a85bb1aaea3e74fb031f5033c7055aedb39a3265f923d5f40c3f974 - Sigstore transparency entry: 760379024
- Sigstore integration time:
-
Permalink:
jupyterhub/escapism@0e45b91ffce1ab182f43eb25b4566d89fc99c208 -
Branch / Tag:
refs/tags/1.1.0 - Owner: https://github.com/jupyterhub
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@0e45b91ffce1ab182f43eb25b4566d89fc99c208 -
Trigger Event:
push
-
Statement type:
File details
Details for the file escapism-1.1.0-py3-none-any.whl.
File metadata
- Download URL: escapism-1.1.0-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f35bf68009704cbd55dd834add47cc964c12e760cf08749f7cbe60ed882963a0
|
|
| MD5 |
3b46019c1c965bfe2811480f2863c78e
|
|
| BLAKE2b-256 |
f8669f198b16f7551271c32ff0961f21388c21b0d8a4796a1aa1d25b25c0340d
|
Provenance
The following attestation bundles were made for escapism-1.1.0-py3-none-any.whl:
Publisher:
release.yaml on jupyterhub/escapism
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
escapism-1.1.0-py3-none-any.whl -
Subject digest:
f35bf68009704cbd55dd834add47cc964c12e760cf08749f7cbe60ed882963a0 - Sigstore transparency entry: 760379027
- Sigstore integration time:
-
Permalink:
jupyterhub/escapism@0e45b91ffce1ab182f43eb25b4566d89fc99c208 -
Branch / Tag:
refs/tags/1.1.0 - Owner: https://github.com/jupyterhub
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@0e45b91ffce1ab182f43eb25b4566d89fc99c208 -
Trigger Event:
push
-
Statement type: