Skip to content

Commit

Permalink
refactoring the Entry.short_url property
Browse files Browse the repository at this point in the history
  • Loading branch information
Fantomas42 committed Apr 20, 2011
1 parent b515dd6 commit 46bcd16
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 12 deletions.
2 changes: 1 addition & 1 deletion zinnia/admin/entry.py
Expand Up @@ -193,7 +193,7 @@ def get_actions(self, request):
del actions['make_mine']
if not settings.PING_DIRECTORIES:
del actions['ping_directories']
if not settings.USE_TWITTER or not settings.USE_BITLY:
if not settings.USE_TWITTER:
del actions['make_tweet']

return actions
Expand Down
11 changes: 2 additions & 9 deletions zinnia/models.py
Expand Up @@ -22,7 +22,6 @@
import mptt
from tagging.fields import TagField

from zinnia.settings import USE_BITLY
from zinnia.settings import UPLOAD_TO
from zinnia.settings import MARKUP_LANGUAGE
from zinnia.settings import ENTRY_TEMPLATES
Expand All @@ -34,6 +33,7 @@
from zinnia.managers import AuthorPublishedManager
from zinnia.managers import DRAFT, HIDDEN, PUBLISHED
from zinnia.moderator import EntryCommentModerator
from zinnia.url_shortener import get_url_shortener
from zinnia.signals import ping_directories_handler
from zinnia.signals import ping_external_urls_handler

Expand Down Expand Up @@ -235,14 +235,7 @@ def comments_are_open(self):
@property
def short_url(self):
"""Return the entry's short url"""
if not USE_BITLY:
return False

from django_bitly.models import Bittle

bittle = Bittle.objects.bitlify(self)
url = bittle and bittle.shortUrl or self.get_absolute_url()
return url
return get_url_shortener()(self)

def __unicode__(self):
return '%s: %s' % (self.title, self.get_status_display())
Expand Down
4 changes: 2 additions & 2 deletions zinnia/settings.py
Expand Up @@ -59,8 +59,8 @@
F_MIN = getattr(settings, 'ZINNIA_F_MIN', 0.1)
F_MAX = getattr(settings, 'ZINNIA_F_MAX', 1.0)

USE_BITLY = getattr(settings, 'ZINNIA_USE_BITLY',
'django_bitly' in settings.INSTALLED_APPS)
URL_SHORTENER_BACKEND = getattr(settings, 'ZINNIA_URL_SHORTENER_BACKEND',
'zinnia.url_shortener.backends.default')

STOP_WORDS = getattr(settings, 'ZINNIA_STOP_WORDS',
('able', 'about', 'across', 'after', 'all', 'almost',
Expand Down
24 changes: 24 additions & 0 deletions zinnia/url_shortener/__init__.py
@@ -0,0 +1,24 @@
"""Url shortener for Zinnia"""
import warnings

from django.utils.importlib import import_module
from django.core.exceptions import ImproperlyConfigured

from zinnia.settings import URL_SHORTENER_BACKEND
from zinnia.url_shortener.backends.default import backend as default_backend


def get_url_shortener():
"""Return the selected url shortener backend"""
try:
backend_module = import_module(URL_SHORTENER_BACKEND)
backend = getattr(backend_module, 'backend')
except (ImportError, AttributeError):
warnings.warn('%s backend cannot be imported' % URL_SHORTENER_BACKEND,
RuntimeWarning)
backend = default_backend
except ImproperlyConfigured, e:
warnings.warn(str(e), RuntimeWarning)
backend = default_backend

return backend
1 change: 1 addition & 0 deletions zinnia/url_shortener/backends/__init__.py
@@ -0,0 +1 @@
"""Shortlink backends for Zinnia"""
20 changes: 20 additions & 0 deletions zinnia/url_shortener/backends/bitly.py
@@ -0,0 +1,20 @@
"""Bit.ly url shortener backend for Zinnia"""
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured

try:
from django_bitly.models import Bittle
except ImportError:
raise ImproperlyConfigured('django_bitly is not available')

if not getattr(settings, 'BITLY_LOGIN', ''):
raise ImproperlyConfigured('You have to set a BITLY_LOGIN setting')

if not getattr(settings, 'BITLY_API_KEY', ''):
raise ImproperlyConfigured('You have to set a BITLY_API_KEY setting')


def backend(entry):
"""Bit.ly url shortener backend for Zinnia"""
bittle = Bittle.objects.bitlify(entry)
return bittle.shortUrl
11 changes: 11 additions & 0 deletions zinnia/url_shortener/backends/default.py
@@ -0,0 +1,11 @@
"""Default url shortener backend for Zinnia"""
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse

from zinnia.settings import PROTOCOL


def backend(entry):
"""Default url shortener backend for Zinnia"""
return '%s://%s%s' % (PROTOCOL, Site.objects.get_current().domain,
reverse('zinnia_entry_shortlink', args=[entry.pk]))

0 comments on commit 46bcd16

Please sign in to comment.