Shorten is a MIT licensed Python library for storing your data with automatically generated keys. Use your choice of backend: in-memory, Redis and Memcached are supported by default.
I made this library after being unable to find anything satisfactory for URL shortening. Shorten contains no clever tricks or obfuscated schemes that produce unmaintainable code.
It’s gevent-safe, so you can use it with Gunicorn and Heroku (and consequently Flask, Django, Pyramid). Currently, it is neither threadsafe nor multiprocess safe.
Installation
Install with pip:
$ pip install shorten
Shorten uses redis-py as its Redis client and it will be downloaded automatically. This dependency may be removed in a future version.
Testing
If you want to run the tests, install the requirements in requirements.txt:
$ virtualenv --no-site-packages .python && source .python/bin/activate
$ pip install -r requirements.txt
The memcached and libevent (for gevent) development libraries are required. For Debian-based systems, try:
$ apt-get install python-dev libmemcached-dev libevent-dev
Documentation
Full documentation is available at http://pythonhosted.org/shorten.
Quickstart
Create a store which automatically generates keys for your values.
from shorten import MemoryStore
store = MemoryStore()
key, token = store.insert('aardvark')
# True
key in store
# 'aardvark'
store[key]
Values can be deleted from the store by revoking them with the returned revokation token. The default token is the same as the returned key.
from shorten import MemoryStore
store = MemoryStore()
key, token = store.insert('bonobo')
del store[token]
# False
key in store
# KeyError
store[key]
The included stores are gevent-safe, meaning that values can be inserted from multiple greenlets without fear of duplicate keys.
import gevent
from shorten import alphabets
from shorten import MemoryStore
values = (
'aardvark',
'bonobo',
'caiman',
'degu',
'elk',
)
store = MemoryStore(alphabet=alphabets.HEX, start=9)
jobs = [gevent.spawn(store.insert, value) for value in values]
gevent.joinall(jobs)
# '9'
# 'a'
# 'c'
# 'b'
# 'd'
for job in jobs:
key, token = job.value
print(key)
Example
For a working example of URL shortening website, see example.py.
Metadata
Release files for shorten 2.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| shorten-2.0.2.tar.gz | 15.3 kB | Without provenance | Details for shorten-2.0.2.tar.gz |
Release files / shorten-2.0.2.tar.gz
| Download URL | shorten-2.0.2.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
806f190a47af069207adf6ff8a5e62949607db574ada5403ebf52f61a201dce0
|
|
BLAKE2b-256 checksum How to use checksums |
a1eef18ef008a4069a10871557b2d199d0ceeea9305e630d689b1e862a4decec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for shorten 2.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.