From c22f6b46e9faecc4d83c6dc575f0179796fc0c1e Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Mon, 25 Jan 2010 01:00:07 +0000 Subject: Added SHORTURLS_DEFAULT_CONVERTER setting so template tag converter can be specified --- src/shorturls/__init__.py | 19 +++++++++++++++++++ src/shorturls/templatetags/shorturl.py | 4 ++-- src/shorturls/views.py | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/shorturls/__init__.py b/src/shorturls/__init__.py index e69de29..528e838 100644 --- a/src/shorturls/__init__.py +++ b/src/shorturls/__init__.py @@ -0,0 +1,19 @@ +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.utils.importlib import import_module +from shorturls import baseconv + +default_converter = baseconv.base62 + +if hasattr(settings, 'SHORTURLS_DEFAULT_CONVERTER'): + mod_name, conv_name = settings.SHORTURLS_DEFAULT_CONVERTER.rsplit('.', 1) + try: + mod = import_module(mod_name) + except ImportError, e: + raise ImproperlyConfigured('Could not load converter specified by SHORTURLS_DEFAULT_CONVERTER. Error was: %s' % e) + try: + default_converter = getattr(mod, conv_name) + except AttributeError: + raise ImproperlyConfigured('Could not load converter specified by SHORTURLS_DEFAULT_CONVERTER. %s is not in %s.' % (conv_name, mod)) + + \ No newline at end of file diff --git a/src/shorturls/templatetags/shorturl.py b/src/shorturls/templatetags/shorturl.py index e1781cc..4c98d87 100644 --- a/src/shorturls/templatetags/shorturl.py +++ b/src/shorturls/templatetags/shorturl.py @@ -3,7 +3,7 @@ from django import template from django.conf import settings from django.core import urlresolvers from django.utils.safestring import mark_safe -from shorturls.baseconv import base62 +from shorturls import default_converter as converter class ShortURL(template.Node): @classmethod @@ -27,7 +27,7 @@ class ShortURL(template.Node): except (AttributeError, KeyError): return '' - tinyid = base62.from_decimal(obj.pk) + tinyid = converter.from_decimal(obj.pk) if hasattr(settings, 'SHORT_BASE_URL') and settings.SHORT_BASE_URL: return urlparse.urljoin(settings.SHORT_BASE_URL, prefix+tinyid) diff --git a/src/shorturls/views.py b/src/shorturls/views.py index 2d0ef1a..2d0a47b 100644 --- a/src/shorturls/views.py +++ b/src/shorturls/views.py @@ -4,9 +4,9 @@ from django.contrib.sites.models import Site, RequestSite from django.db import models from django.http import HttpResponsePermanentRedirect, Http404 from django.shortcuts import get_object_or_404 -from shorturls.baseconv import base62 +from shorturls import default_converter -def redirect(request, prefix, tiny, converter=base62): +def redirect(request, prefix, tiny, converter=default_converter): """ Redirect to a given object from a short URL. """ -- cgit v1.2.3