diff options
| author | Vladimir Gorej | 2012-05-27 20:14:17 +0200 | 
|---|---|---|
| committer | Vladimir Gorej | 2012-05-27 20:14:17 +0200 | 
| commit | 4bd7b72aa0ca3a09ab99e1a3b41753df81de6af9 (patch) | |
| tree | 6328ed9894666eefc1f0d6b6c7b28a87b1fb4d31 /brevisurl/views.py | |
| download | django-brevisurl-4bd7b72aa0ca3a09ab99e1a3b41753df81de6af9.tar.bz2 | |
Initial commit
Diffstat (limited to 'brevisurl/views.py')
| -rw-r--r-- | brevisurl/views.py | 36 | 
1 files changed, 36 insertions, 0 deletions
| diff --git a/brevisurl/views.py b/brevisurl/views.py new file mode 100644 index 0000000..21cd1a5 --- /dev/null +++ b/brevisurl/views.py @@ -0,0 +1,36 @@ +import logging + +from django.http import Http404 +from django.contrib.sites.models import Site +from django.views.generic.base import RedirectView +from django.core.exceptions import ImproperlyConfigured + +from brevisurl import get_connection +from brevisurl.models import ShortUrl + + +log = logging.getLogger(__name__) + + +class BrevisUrlRedirectView(RedirectView): + +    def get_redirect_url(self, **kwargs): +        try: +            token = kwargs.pop('token') +        except KeyError: +            log.exception('Token not found in keyword arguments') +            raise Http404 +        connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') +        protocol = connection.PROTOCOL +        try: +            site = Site.objects.get_current() +        except ImproperlyConfigured: +            log.exception('No site object configured for this django project') +            raise Http404 +        try: +            short_url = '{0}://{1}/{2}'.format(protocol, site.domain, 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 | 
