diff options
| -rw-r--r-- | README.rst | 16 | ||||
| -rw-r--r-- | brevisurl/backends/local.py | 14 | ||||
| -rw-r--r-- | brevisurl/context_processors.py | 8 | ||||
| -rw-r--r-- | brevisurl/settings.py | 3 | ||||
| -rw-r--r-- | brevisurl/templatetags/brevisurltags.py | 6 | ||||
| -rw-r--r-- | brevisurl/tests/__init__.py | 3 | ||||
| -rw-r--r-- | brevisurl/tests/backends/__init__.py | 1 | ||||
| -rw-r--r-- | brevisurl/tests/backends/test_local.py | 13 | ||||
| -rw-r--r-- | brevisurl/tests/templatetags/test_brevisurltags.py | 15 | ||||
| -rw-r--r-- | brevisurl/tests/test_context_processors.py | 33 | ||||
| -rw-r--r-- | setup.py | 2 | 
11 files changed, 104 insertions, 10 deletions
| @@ -57,6 +57,10 @@ Configuration   # Setting for default brevis backend   BREVISURL_BACKEND = 'brevisurl.backends.local.BrevisUrlBackend' # Default is 'brevisurl.backends.local.BrevisUrlBackend' + # This bypasses Django Site framework and settings.SITE_ID; if set, brevisurl don't use Django Site framework + # but uses this settings insted to generate  absolute urls + BREVISURL_BACKEND_LOCAL_DOMAIN = 'http://brevisurl.net/' # Default is None +  **Append brevisurl url patterns to your urls.py at the end of module, if you're using local backend** @@ -67,6 +71,18 @@ Configuration       (r'^', include('brevisurl.urls'))   ) +**To be able to access brevisurl settings add brevisurl.context_processors.brevisurl_data to your context processors** + +:: + + TEMPLATE_CONTEXT_PROCESSORS = ( +     'django.contrib.auth.context_processors.auth', +     'django.core.context_processors.debug', +     'django.core.context_processors.request', +     'django.contrib.messages.context_processors.messages', +     'brevisurl.context_processors.brevisurl_data' + ) +  Examples  -------- diff --git a/brevisurl/backends/local.py b/brevisurl/backends/local.py index 42d0263..1b72e64 100644 --- a/brevisurl/backends/local.py +++ b/brevisurl/backends/local.py @@ -3,7 +3,9 @@ import random  import logging  from django.contrib.sites.models import Site +from django.core.urlresolvers import reverse +import brevisurl.settings  from brevisurl.backends.base import BaseBrevisUrlBackend  from brevisurl.models import ShortUrl @@ -27,11 +29,17 @@ class BrevisUrlBackend(BaseBrevisUrlBackend):              pass          try: -            current_site = Site.objects.get_current()              short_url = ShortUrl() +            if brevisurl.settings.LOCAL_BACKEND_DOMAIN is not None: +                short_url.shortened_url = '{0}{1}'.format(brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/'), +                                                          reverse('brevisurl_redirect', +                                                                  kwargs={'token': self.__generate_token()})) +            else: +                current_site = Site.objects.get_current() +                short_url.shortened_url = '{0}://{1}{2}'.format(self.PROTOCOL, current_site.domain, +                                                                reverse('brevisurl_redirect', +                                                                        kwargs={'token': self.__generate_token()}))              short_url.original_url = original_url -            short_url.shortened_url = '{0}://{1}/{2}'.format(self.PROTOCOL, current_site.domain, -                                                             self.__generate_token())              short_url.backend = self.class_path              short_url.save()              log.info('Url "%s" shortened to "%s"', original_url, short_url.shortened_url) diff --git a/brevisurl/context_processors.py b/brevisurl/context_processors.py new file mode 100644 index 0000000..ea4ed7b --- /dev/null +++ b/brevisurl/context_processors.py @@ -0,0 +1,8 @@ +import brevisurl.settings + + +def brevisurl_data(request): +    return { +        'BREVIS_BACKEND': brevisurl.settings.DEFAULT_BACKEND, +        'BREVIS_BACKEND_LOCAL_DOMAIN': brevisurl.settings.LOCAL_BACKEND_DOMAIN +    }
\ No newline at end of file diff --git a/brevisurl/settings.py b/brevisurl/settings.py index 590f8b1..2d54b04 100644 --- a/brevisurl/settings.py +++ b/brevisurl/settings.py @@ -1,3 +1,4 @@  from django.conf import settings -DEFAULT_BACKEND = getattr(settings, 'BREVISURL_BACKEND', 'brevisurl.backends.local.BrevisUrlBackend')
\ No newline at end of file +DEFAULT_BACKEND = getattr(settings, 'BREVISURL_BACKEND', 'brevisurl.backends.local.BrevisUrlBackend') +LOCAL_BACKEND_DOMAIN = getattr(settings, 'BREVISURL_BACKEND_LOCAL_DOMAIN', None)
\ No newline at end of file diff --git a/brevisurl/templatetags/brevisurltags.py b/brevisurl/templatetags/brevisurltags.py index e9cb847..f49606e 100644 --- a/brevisurl/templatetags/brevisurltags.py +++ b/brevisurl/templatetags/brevisurltags.py @@ -4,6 +4,7 @@ from django import template  from django.template.defaulttags import URLNode, url  from django.contrib.sites.models import Site +import brevisurl.settings  from brevisurl import shorten_url as shorten_url_util, get_connection @@ -20,7 +21,10 @@ def shorten_url(original_url):  class AbsoluteURLNode(URLNode):      def render(self, context):          path = super(AbsoluteURLNode, self).render(context) -        domain = "http://{0}".format(Site.objects.get_current().domain) +        if brevisurl.settings.LOCAL_BACKEND_DOMAIN is not None: +            domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN +        else: +            domain = "http://{0}".format(Site.objects.get_current().domain)          if self.asvar:              context[self.asvar]= urlparse.urljoin(domain, context[self.asvar])              return '' diff --git a/brevisurl/tests/__init__.py b/brevisurl/tests/__init__.py index 729e40a..f474ac0 100644 --- a/brevisurl/tests/__init__.py +++ b/brevisurl/tests/__init__.py @@ -3,4 +3,5 @@ from brevisurl.tests.test_utils import *  from brevisurl.tests.test_views import *  from brevisurl.tests.test_models import *  from brevisurl.tests.backends.test_local import * -from brevisurl.tests.templatetags.test_brevisurltags import *
\ No newline at end of file +from brevisurl.tests.templatetags.test_brevisurltags import * +from brevisurl.tests.test_context_processors import *
\ No newline at end of file diff --git a/brevisurl/tests/backends/__init__.py b/brevisurl/tests/backends/__init__.py index 7a8337f..e69de29 100644 --- a/brevisurl/tests/backends/__init__.py +++ b/brevisurl/tests/backends/__init__.py @@ -1 +0,0 @@ -__author__ = 'char0n' diff --git a/brevisurl/tests/backends/test_local.py b/brevisurl/tests/backends/test_local.py index 8939314..86565d2 100644 --- a/brevisurl/tests/backends/test_local.py +++ b/brevisurl/tests/backends/test_local.py @@ -2,6 +2,7 @@ from django.core.exceptions import ValidationError  from django.test import TestCase  from django.core.validators import URLValidator +import brevisurl.settings  from brevisurl import get_connection  from brevisurl.models import ShortUrl @@ -11,7 +12,8 @@ class TestLocalBrevisUrlBackend(TestCase):      def setUp(self):          self.connection = get_connection('brevisurl.backends.local.BrevisUrlBackend') -    def test_shorten_url(self): +    def test_shorten_url_use_site_framework(self): +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = None          self.assertEqual(ShortUrl.objects.all().count(), 0)          original_url = 'http://www.codescale.net/'          short_url = self.connection.shorten_url(original_url) @@ -19,6 +21,15 @@ class TestLocalBrevisUrlBackend(TestCase):          self.assertEqual(short_url.original_url, original_url)          self.assertRegexpMatches(short_url.shortened_url, URLValidator.regex) +    def test_shorten_url_domain_from_settings(self): +        self.assertEqual(ShortUrl.objects.all().count(), 0) +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = 'http://brevisurl.net/' +        original_url = 'http://www.codescale.net/' +        short_url = self.connection.shorten_url(original_url) +        self.assertEqual(ShortUrl.objects.all().count(), 1) +        self.assertEqual(short_url.original_url, original_url) +        self.assertRegexpMatches(short_url.shortened_url, r'^http://brevisurl\.net/[a-zA-Z0-9]{5}$') +      def test_shorten_url_reuse_old(self):          original_url = 'http://www.codescale.net/'          self.assertEqual(ShortUrl.objects.all().count(), 0) diff --git a/brevisurl/tests/templatetags/test_brevisurltags.py b/brevisurl/tests/templatetags/test_brevisurltags.py index 38ccfcc..b4c7c56 100644 --- a/brevisurl/tests/templatetags/test_brevisurltags.py +++ b/brevisurl/tests/templatetags/test_brevisurltags.py @@ -2,6 +2,7 @@ from django.core.validators import URLValidator  from django.test import TestCase  from django.template import Template, Context +import brevisurl.settings  from brevisurl.models import ShortUrl @@ -33,4 +34,16 @@ class TestShortenUrlTag(TestCase):          {{ 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 +        self.assertRegexpMatches(url, URLValidator.regex) + + +    def test_absurl_tag_domain_from_settings(self): +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = 'http://brevisurl.net/' +        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) +        self.assertRegexpMatches(url, r'^http://brevisurl\.net/[a-zA-Z0-9]{5}$')
\ No newline at end of file diff --git a/brevisurl/tests/test_context_processors.py b/brevisurl/tests/test_context_processors.py new file mode 100644 index 0000000..e29b478 --- /dev/null +++ b/brevisurl/tests/test_context_processors.py @@ -0,0 +1,33 @@ +from django.utils import unittest + +import brevisurl.settings +from brevisurl import context_processors + + +class TestContextProcessors(unittest.TestCase): + +    def test_context_processor_defaults(self): +        _DEFAULT_BACKEND = brevisurl.settings.DEFAULT_BACKEND +        _LOCAL_BACKEND_DOMAIN = brevisurl.settings.LOCAL_BACKEND_DOMAIN +        brevisurl.settings.DEFAULT_BACKEND = 'brevisurl.backends.local.BrevisUrlBackend' +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = None +        result = context_processors.brevisurl_data(None) +        self.assertIn('BREVIS_BACKEND', result) +        self.assertIn('BREVIS_BACKEND_LOCAL_DOMAIN', result) +        self.assertEqual(result['BREVIS_BACKEND'], 'brevisurl.backends.local.BrevisUrlBackend') +        self.assertIsNone(result['BREVIS_BACKEND_LOCAL_DOMAIN']) +        brevisurl.settings.DEFAULT_BACKEND = _DEFAULT_BACKEND +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = _LOCAL_BACKEND_DOMAIN + +    def test_context_processor_custom(self): +        _DEFAULT_BACKEND = brevisurl.settings.DEFAULT_BACKEND +        _LOCAL_BACKEND_DOMAIN = brevisurl.settings.LOCAL_BACKEND_DOMAIN +        brevisurl.settings.DEFAULT_BACKEND = 'brevisurl.backends.base.BaseBrevisUrlBackend' +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = 'http://brevisurl.net/' +        result = context_processors.brevisurl_data(None) +        self.assertIn('BREVIS_BACKEND', result) +        self.assertIn('BREVIS_BACKEND_LOCAL_DOMAIN', result) +        self.assertEqual(result['BREVIS_BACKEND'], 'brevisurl.backends.base.BaseBrevisUrlBackend') +        self.assertEqual(result['BREVIS_BACKEND_LOCAL_DOMAIN'], 'http://brevisurl.net/') +        brevisurl.settings.DEFAULT_BACKEND = _DEFAULT_BACKEND +        brevisurl.settings.LOCAL_BACKEND_DOMAIN = _LOCAL_BACKEND_DOMAIN
\ No newline at end of file @@ -16,7 +16,7 @@ def read(fname):  setup(      name='django-brevisurl', -    version='0.9', +    version='0.9.1',      description='django-brevisurl is django app for shortening urls',      long_description=read('README.rst'),      author=u'VladimĂr Gorej', | 
