Skip to main content

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_char will 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_slug is 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

escapism-1.1.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

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

escapism-1.1.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

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

Hashes for escapism-1.1.0.tar.gz
Algorithm Hash digest
SHA256 add130e48a85bb1aaea3e74fb031f5033c7055aedb39a3265f923d5f40c3f974
MD5 d677f9708a502b3bfda4e1d26aaf14a5
BLAKE2b-256 d289e7d4dc55d41be5f0999be2a28fd0d4864b4222e9ae4292732e31aaa46696

See more details on using hashes here.

Provenance

The following attestation bundles were made for escapism-1.1.0.tar.gz:

Publisher: release.yaml on jupyterhub/escapism

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for escapism-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f35bf68009704cbd55dd834add47cc964c12e760cf08749f7cbe60ed882963a0
MD5 3b46019c1c965bfe2811480f2863c78e
BLAKE2b-256 f8669f198b16f7551271c32ff0961f21388c21b0d8a4796a1aa1d25b25c0340d

See more details on using hashes here.

Provenance

The following attestation bundles were made for escapism-1.1.0-py3-none-any.whl:

Publisher: release.yaml on jupyterhub/escapism

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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