diff options
Diffstat (limited to 'brevisurl')
| -rw-r--r-- | brevisurl/templatetags/brevisurltags.py | 28 | ||||
| -rw-r--r-- | brevisurl/tests/templatetags/test_brevisurltags.py | 15 | 
2 files changed, 39 insertions, 4 deletions
| diff --git a/brevisurl/templatetags/brevisurltags.py b/brevisurl/templatetags/brevisurltags.py index 2d883f0..e9cb847 100644 --- a/brevisurl/templatetags/brevisurltags.py +++ b/brevisurl/templatetags/brevisurltags.py @@ -1,11 +1,37 @@ +import urlparse +  from django import template +from django.template.defaulttags import URLNode, url +from django.contrib.sites.models import Site  from brevisurl import shorten_url as shorten_url_util, get_connection +  register = template.Library()  @register.filter  def shorten_url(original_url):      short_url = shorten_url_util(original_url, connection=get_connection(fail_silently=True)) -    return short_url.shortened_url if short_url is not None else original_url
\ No newline at end of file +    return short_url.shortened_url if short_url is not None else original_url + + +# Modified copy of django snippet #1518 (http://djangosnippets.org/snippets/1518/) +class AbsoluteURLNode(URLNode): +    def render(self, context): +        path = super(AbsoluteURLNode, self).render(context) +        domain = "http://{0}".format(Site.objects.get_current().domain) +        if self.asvar: +            context[self.asvar]= urlparse.urljoin(domain, context[self.asvar]) +            return '' +        else: +            return urlparse.urljoin(domain, path) + +def absurl(parser, token, node_cls=AbsoluteURLNode): +    """Just like {% url %} but ads the domain of the current site.""" +    node_instance = url(parser, token) +    return node_cls(view_name=node_instance.view_name, +        args=node_instance.args, +        kwargs=node_instance.kwargs, +        asvar=node_instance.asvar) +absurl = register.tag(absurl)
\ No newline at end of file diff --git a/brevisurl/tests/templatetags/test_brevisurltags.py b/brevisurl/tests/templatetags/test_brevisurltags.py index de1ed00..38ccfcc 100644 --- a/brevisurl/tests/templatetags/test_brevisurltags.py +++ b/brevisurl/tests/templatetags/test_brevisurltags.py @@ -7,7 +7,7 @@ from brevisurl.models import ShortUrl  class TestShortenUrlTag(TestCase): -    def test_shorten_url_tag(self): +    def test_shorten_url_filter(self):          original_url = 'http://www.codescale.net/'          url = Template("""          {% load brevisurltags %} @@ -17,11 +17,20 @@ class TestShortenUrlTag(TestCase):          self.assertEqual(ShortUrl.objects.all()[0].original_url, original_url)          self.assertRegexpMatches(url, URLValidator.regex) -    def test_shorten_url_tag_invalid_url(self): +    def test_shorten_url_filter_invalid_url(self):          original_url = 'www.codescale.'          url = Template("""          {% load brevisurltags %}          {{ url|shorten_url }}          """).render(Context({'url': original_url})).strip()          self.assertEqual(ShortUrl.objects.all().count(), 0) -        self.assertEqual(url, original_url)
\ No newline at end of file +        self.assertEqual(url, original_url) + +    def test_absurl_tag(self): +        url = Template(""" +        {% load brevisurltags %} +        {% absurl brevisurl_redirect token='12345' as brevis_url %} +        {{ brevis_url|shorten_url }} +        """).render(Context()).strip() +        self.assertEqual(ShortUrl.objects.all().count(), 1) +        self.assertRegexpMatches(url, URLValidator.regex)
\ No newline at end of file | 
