aboutsummaryrefslogtreecommitdiffstats
path: root/brevisurl
diff options
context:
space:
mode:
Diffstat (limited to 'brevisurl')
-rw-r--r--brevisurl/backends/local.py14
-rw-r--r--brevisurl/context_processors.py8
-rw-r--r--brevisurl/settings.py3
-rw-r--r--brevisurl/templatetags/brevisurltags.py6
-rw-r--r--brevisurl/tests/__init__.py3
-rw-r--r--brevisurl/tests/backends/__init__.py1
-rw-r--r--brevisurl/tests/backends/test_local.py13
-rw-r--r--brevisurl/tests/templatetags/test_brevisurltags.py15
-rw-r--r--brevisurl/tests/test_context_processors.py33
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