diff options
| author | Vladimir Gorej | 2012-06-21 16:37:47 +0200 |
|---|---|---|
| committer | Vladimir Gorej | 2012-06-21 16:37:47 +0200 |
| commit | 0137494b6c01d11de938c0376d372507bc5d2844 (patch) | |
| tree | bcc184b775d06ce9e440b9765e488eac99c18dc1 | |
| parent | a45e3e9f98aac03c61a1167e61ff15be3e45c1b4 (diff) | |
| download | django-brevisurl-0137494b6c01d11de938c0376d372507bc5d2844.tar.bz2 | |
Issue #15; fixed redirect view for local backend"
| -rw-r--r-- | brevisurl/views.py | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/brevisurl/views.py b/brevisurl/views.py index 965439d..a210693 100644 --- a/brevisurl/views.py +++ b/brevisurl/views.py @@ -9,6 +9,7 @@ from django.core.exceptions import ImproperlyConfigured import brevisurl.settings from brevisurl import get_connection from brevisurl.models import ShortUrl +from brevisurl.utils import absurl log = logging.getLogger(__name__) @@ -17,25 +18,43 @@ log = logging.getLogger(__name__) class BrevisUrlRedirectView(RedirectView): def get_redirect_url(self, **kwargs): + # No token present try: token = kwargs.pop('token') except KeyError: log.exception('Token not found in keyword arguments') raise Http404 + connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') + short_url_obj = None + + # Seeking domain in settings if brevisurl.settings.LOCAL_BACKEND_DOMAIN is not None: domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/') - else: + short_url = absurl(domain=domain, path=reverse('brevisurl_redirect', kwargs={'token': token})) + try: + short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url) + except ShortUrl.DoesNotExist: + pass + + # Seeking domain in django site framework and current site + if short_url_obj is None: try: site = Site.objects.get_current() - domain = '{0}://{1}'.format(brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL, site.domain) + short_url = absurl(site=site, path=reverse('brevisurl_redirect', kwargs={'token': token})) + short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url) except ImproperlyConfigured: log.exception('No site object configured for this django project') + except ShortUrl.DoesNotExist: + pass + + # Seeking domain from current request + if short_url_obj is None: + try: + short_url = absurl(domain=self.request.get_host(), path=reverse('brevisurl_redirect', kwargs={'token': token})) + short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url) + except ShortUrl.DoesNotExist: + log.exception('No shortened url found for backend: "%s" and token: "%s"', connection.class_path, token) raise Http404 - try: - short_url = '{0}{1}'.format(domain, reverse('brevisurl_redirect', kwargs={'token': token})) - short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url) - except ShortUrl.DoesNotExist: - log.exception('No shortened url found for backend: "%s" and token: "%s"', connection.class_path, token) - raise Http404 + return short_url_obj.original_url
\ No newline at end of file |
