Skip to main content

Generate randomized strings of characters using a template

Project description

Python package Documentation Status

PyPI - Python Version PyPi Version

Generate test data, unique ids, passwords, vouchers or other randomized textual data very quickly using a template language. The template language is superficially similar to regular expressions but instead of defining how to match or capture strings, it defines how to generate randomized strings. A very simple invocation to produce a random string with word characters of 30 characters length:

from strgen import StringGenerator as SG
SG(r"[\w]{30}").render()
'wQjLVRIj1sjjslORpqLJyDObaCnDR2'

Full documentation

The current package requires Python 3.7 or higher. Use version 0.3.4 or earlier if you want to use Python 2.7 or an earlier Python 3 version.

NB: with version 0.4.2, the preferred method for generating a unique list is StringGenerator.render_set() instead of render_list(). Generate 50000 unique secure tokens in a few seconds:

secure_tokens = SG(r"[\p\w]{32}").render_set(50000)

render_set() does not support a progress callback.

Performance and secure generation

By default StringGenerator uses random.SystemRandom (cryptographically secure), which reads from the operating system entropy pool on every draw. That is the right default for passwords, keys and tokens, but the per-draw syscall makes very large batches slow.

For large batches you have two faster options:

  • If you do not need cryptographic randomness (e.g. test data), pass a seed or a plain random.Random to use the much faster Mersenne Twister:

    SG(r"[\d]{10}", seed=1).render_set(1_000_000)
  • If you do need cryptographic randomness, use BufferedSecureRandom. It draws the same os.urandom entropy as SystemRandom but reads it in bulk to avoid a syscall per draw, making secure bulk generation many times faster. It is reachable without an extra import:

    SG(r"[\w\p]{32}", randomizer=SG.BufferedSecureRandom()).render_set(50000)

There is a rich feature set to randomize strings in situ or include external data.

The purpose of this module is to save the Python developer from having to write verbose code around the same pattern every time to generate passwords, keys, tokens, test data, etc. of this sort:

my_secret_key = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(30))

that is:

  1. Hard to read even at this simplistic level.

  2. Hard to safely change quickly. Even modest additions to the requirements need unreasonably verbose solutions.

  3. Doesn’t use safe encryption standards.

  4. Doesn’t provide the implied minimal guarantees of character occurance.

  5. Hard to track back to requirements (“must be between x and y in length and have characters from sets Q, R and S”).

The template uses short forms similar to those of regular expressions. An example template for generating a strong password:

[\w\p]{20}

will generate something like the following:

P{:45Ec5$3)2!I68x`{6

Guarantee at least two “special” characters in a string:

[\w\p]{10}&[\p]{2}

You can also generate useful test data, like fake emails with plenty of variation:

[\c]{10}.[\c]{5:10}@[\c]{3:12}.(com|net|org)

Requirements

From version 0.4.0, support for Python 2 is dropped. If you still need support for Python 2, use version 0.3.4.

There are no dependencies beyond the Python Standard Library.

Installation

Install as standard for Python packages from PyPi:

pip install StringGenerator

License

Released under the BSD license.

Acknowledgements

Thanks to Robert LeBlanc who caught some important errors in escaping special characters. Thanks to Andreas Motl for the progress counter.

Original Author: paul.wolf@yewleaf.com

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

stringgenerator-0.5.0.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

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

stringgenerator-0.5.0-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file stringgenerator-0.5.0.tar.gz.

File metadata

  • Download URL: stringgenerator-0.5.0.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for stringgenerator-0.5.0.tar.gz
Algorithm Hash digest
SHA256 da5549f4c8593460e05a73f387558a019766fe3f72c63ddc63ea8e3dffb545ae
MD5 f217a60c213967600abff89fc47427c0
BLAKE2b-256 e4b29c75a737dbd2e6c055d7f6fb0f2cc96ee5053e6a2cf1849fc2430b5ff60e

See more details on using hashes here.

File details

Details for the file stringgenerator-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for stringgenerator-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4d5af047db4fff716c55ece8176cefc43a69fcc57cdb72a764b045eb72816573
MD5 bc626f97093bb694e34c650bc0151d37
BLAKE2b-256 c052efd2dc129d3548b3f8b1da6ea809c490a10ab0666e9ac008cd835db5bc2e

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