Skip to main content
Build status

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)

Source distribution for shorten 2.0.2
File Size Uploaded
shorten-2.0.2.tar.gz 15.3 kB Details

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

Release history Release notifications | RSS feed

This release

2.0.2 This release

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.2.2

3 release files

0.2.1

5 release files

0.2.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page