diff options
Diffstat (limited to 'brevisurl')
| -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 |
9 files changed, 87 insertions, 9 deletions
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 |
