Skip to main content

A Python library for generating short URLs.

Project description

A Python library for generating short URLs.

It’s gevent-safe, so you can use it with Gunicorn (and consequently Flask, Django and Pyramid). Currently, it is neither threadsafe nor multiprocess safe.

Installation

Install with pip: pip install shorten

If you want to run the tests, ensure nose, redis and gevent are installed with pip install nose redis gevent, then:

nosetests tests.py -v

The basics

Make a shortener:

import shorten
import redis

shortener = shorten.shortener('redis', redis=redis.Redis())

Map a short key to a long value:

# '2111'
key = shortener.insert('http://mitpress.mit.edu/sicp/full-text/book/book.html')

Map multiple keys and values from greenlets:

import gevent

values = [
  'aardvark',
  'bonobo',
  'caiman',
  'degu',
  'elk',
]

jobs = [gevent.spawn(shortener.insert, v) for v in values]
keys = map(lambda j: j.value, gevent.joinall(jobs, timeout=2))

# ['2111', '2112', '2114', '2113', '2115']
print(keys)

If you wish to store the keys with some sort of prefix, pass in a formatter function when a KeyStore is created:

import shorten
import redis

def to_key_format(token):
  return 'my:namespace:key:{0}'.format(token)

shortener = shorten.shortener('redis', redis=redis.Redis(), formatter=to_key_format)

# 'my:namespace:key:2111'
key = shortener.insert('http://mitpress.mit.edu/sicp/full-text/book/book.html')

Custom alphabets of symbols (any 0-index based iterable) can be passed to the shortener function too:

import shorten

# Use an alternative alphabet with faces
alphabet = [
  ':)', ':(', ';)', ';(', '>:)', ':D', ':x', ':X', ':|', ':O', '><', '<<', '>>', '^^', 'O_o', u'?_?',
]

shortener = shorten.shortener('memory', alphabet=alphabet)

values = [
  'aardvark',
  'bonobo',
  'caiman',
  'degu',
  'elk',
]

keys = map(shortener.insert, values)

# [':(:):):)', ':(:):):(', ':(:):);)', ':(:):);(', ':(:):)>:)']
print(keys)

For a working example, see example.py.

Changelog

0.2.2

  • Revokation now works: store revokation tokens that can be used to remove short keys without knowing the key itself.

  • Multiple keys can be inserted at once into MemoryKeystores.

  • More test cases added.

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

shorten-0.2.2.tar.gz (5.4 kB view hashes)

Uploaded Source

Built Distributions

shorten-0.2.2-py2.7.egg (12.4 kB view hashes)

Uploaded Source

shorten-0.2.2-py2.6.egg (12.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page