aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.rst4
-rw-r--r--brevisurl/backends/local.py4
-rw-r--r--brevisurl/context_processors.py3
-rw-r--r--brevisurl/settings.py5
-rw-r--r--brevisurl/tests/backends/test_local.py10
-rw-r--r--brevisurl/tests/test_utils.py15
-rw-r--r--brevisurl/utils.py31
7 files changed, 43 insertions, 29 deletions
diff --git a/README.rst b/README.rst
index 7d9af20..b0db92c 100644
--- a/README.rst
+++ b/README.rst
@@ -73,10 +73,6 @@ Configuration
# Protocol for local backend.
BREVISURL_LOCAL_BACKEND_DOMAIN_PROTOCOL = getattr(settings, 'BREVISURL_LOCAL_BACKEND_DOMAIN_PROTOCOL', 'http')
- # Do we need slash in newly generated token url ?
- BREVISURL_LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH = getattr(settings, 'BREVISURL_LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH', False)
-
-
**Append brevisurl url patterns to your urls.py at the end of module, if you're using local backend**
diff --git a/brevisurl/backends/local.py b/brevisurl/backends/local.py
index 2415694..77e0a7e 100644
--- a/brevisurl/backends/local.py
+++ b/brevisurl/backends/local.py
@@ -37,10 +37,10 @@ class BrevisUrlBackend(BaseBrevisUrlBackend):
short_url = ShortUrl()
if self.kwargs.get('domain') is not None:
# Domain is present in keyword arguments supplied by constructor.
- domain = self.kwargs.get('domain').rstrip('/')
+ domain = self.kwargs.get('domain')
elif brevisurl.settings.LOCAL_BACKEND_DOMAIN is not None:
# Domain is defined in settings.
- domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/')
+ domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN
else:
# Domain is taken from django site framework.
domain = Site.objects.get_current().domain
diff --git a/brevisurl/context_processors.py b/brevisurl/context_processors.py
index 10ae356..72e6ae3 100644
--- a/brevisurl/context_processors.py
+++ b/brevisurl/context_processors.py
@@ -12,6 +12,5 @@ def brevisurl_data(request):
'BREVISURL_LOCAL_BACKEND_TOKEN_CHARS': brevisurl.settings.LOCAL_BACKEND_TOKEN_CHARS,
'BREVISURL_LOCAL_BACKEND_TOKEN_LENGTH': brevisurl.settings.LOCAL_BACKEND_TOKEN_LENGTH,
'BREVISURL_LOCAL_BACKEND_URL_PATTERN': brevisurl.settings.LOCAL_BACKEND_URL_PATTERN,
- 'BREVISURL_LOCAL_BACKEND_DOMAIN_PROTOCOL': brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL,
- 'BREVISURL_LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH': brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH
+ 'BREVISURL_LOCAL_BACKEND_DOMAIN_PROTOCOL': brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL
} \ No newline at end of file
diff --git a/brevisurl/settings.py b/brevisurl/settings.py
index 641020b..b7c7efa 100644
--- a/brevisurl/settings.py
+++ b/brevisurl/settings.py
@@ -19,7 +19,4 @@ LOCAL_BACKEND_TOKEN_LENGTH = getattr(settings, 'BREVISURL_LOCAL_BACKEND_TOKEN_LE
LOCAL_BACKEND_URL_PATTERN = getattr(settings, 'BREVISURL_LOCAL_BACKEND_URL_PATTERN',
r'^(?P<token>[a-zA-Z0-9]{' + str(LOCAL_BACKEND_TOKEN_LENGTH) + r'})$')
# Protocol for local backend.
-LOCAL_BACKEND_DOMAIN_PROTOCOL = getattr(settings, 'BREVISURL_LOCAL_BACKEND_DOMAIN_PROTOCOL', 'http')
-
-# Do we need slash in newly generated token url ?
-LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH = getattr(settings, 'BREVISURL_LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH', False) \ No newline at end of file
+LOCAL_BACKEND_DOMAIN_PROTOCOL = getattr(settings, 'BREVISURL_LOCAL_BACKEND_DOMAIN_PROTOCOL', 'http') \ No newline at end of file
diff --git a/brevisurl/tests/backends/test_local.py b/brevisurl/tests/backends/test_local.py
index 437c790..4577376 100644
--- a/brevisurl/tests/backends/test_local.py
+++ b/brevisurl/tests/backends/test_local.py
@@ -119,19 +119,13 @@ class TestLocalBrevisUrlBackend(TestCase):
brevisurl.settings.LOCAL_BACKEND_DOMAIN = _original_domain
def test_url_path_slash_stripping(self):
- _original_slash_strip = brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH
original_url = 'http://www.codescale.net/'
connection = get_connection('brevisurl.backends.local.BrevisUrlBackend', domain='http://test.com/d')
- brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH = True
short_url = connection.shorten_url(original_url)
self.assertRegexpMatches(short_url.shortened_url, r'^http://test\.com/d[^/]{5}$')
- brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH = _original_slash_strip
def test_url_path_slash_no_stripping(self):
- _original_slash_strip = brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH
original_url = 'http://www.codescale.net/'
- connection = get_connection('brevisurl.backends.local.BrevisUrlBackend', domain='http://test.com/d')
- brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH = False
+ connection = get_connection('brevisurl.backends.local.BrevisUrlBackend', domain='http://test.com/d/')
short_url = connection.shorten_url(original_url)
- self.assertRegexpMatches(short_url.shortened_url, r'^http://test\.com/d/[^/]{5}$')
- brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH = _original_slash_strip \ No newline at end of file
+ self.assertRegexpMatches(short_url.shortened_url, r'^http://test\.com/d/[^/]{5}$') \ No newline at end of file
diff --git a/brevisurl/tests/test_utils.py b/brevisurl/tests/test_utils.py
index a6a8fd2..c4b6237 100644
--- a/brevisurl/tests/test_utils.py
+++ b/brevisurl/tests/test_utils.py
@@ -1,7 +1,7 @@
from django.utils import unittest
from django.contrib.sites.models import Site
-from brevisurl.utils import load_object, absurl, url_has_protocol
+from brevisurl.utils import load_object, absurl, url_has_protocol, url_has_path
from brevisurl.backends.local import BrevisUrlBackend
@@ -62,4 +62,15 @@ class TestUrlHasProtocol(unittest.TestCase):
def test_url_without_protocol(self):
url = 'test.sk/path/'
- self.assertFalse(url_has_protocol(url)) \ No newline at end of file
+ self.assertFalse(url_has_protocol(url))
+
+
+class TestUrlHasPath(unittest.TestCase):
+
+ def test_url_with_path(self):
+ url = 'http://test.sk/'
+ self.assertTrue(url_has_path(url))
+
+ def test_url_without_path(self):
+ url = 'http://test.sk'
+ self.assertFalse(url_has_path(url)) \ No newline at end of file
diff --git a/brevisurl/utils.py b/brevisurl/utils.py
index a55bb66..6210096 100644
--- a/brevisurl/utils.py
+++ b/brevisurl/utils.py
@@ -28,7 +28,7 @@ def url_has_protocol(url):
:param url: url that is being examined.
:type url: string
- :returns: True if url has protocol, False if not
+ :returns: True if url has protocol, False otherwise
:rtype: bool
"""
@@ -36,6 +36,20 @@ def url_has_protocol(url):
return True if url_parsed.netloc != '' and url_parsed.scheme in ('http', 'https') else False
+def url_has_path(url):
+ """Util for determining whether url has path present or not.
+
+ :param url: url that is being examined.
+ :type url: string
+ :returns: True if url has path, False otherwise
+ :rtype: bool
+
+ """
+ url_parsed = urlparse.urlparse(url)
+ return True if url_parsed.netloc != '' and url_parsed.path != '' else False
+
+
+
def absurl(protocol=None, domain=None, site=None, path='/'):
"""Util for constructing absolute urls from relative urls.
@@ -54,14 +68,17 @@ def absurl(protocol=None, domain=None, site=None, path='/'):
:rtype: string
"""
+ # Searching for domain.
protocol = protocol or brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL
if domain is None and site is None:
domain = Site.objects.get_current().domain
elif domain is None and site is not None:
domain = site.domain
- if brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH:
- path = path.lstrip('/')
- if url_has_protocol(domain):
- return '{domain:s}{path:s}'.format(domain=domain, path=path)
- else:
- return '{protocol:s}://{domain:s}{path:s}'.format(protocol=protocol, domain=domain, path=path) \ No newline at end of file
+ # Append protocol if not present.
+ if not url_has_protocol(domain):
+ domain = '{protocol:s}://{domain:s}'.format(protocol=protocol, domain=domain)
+ # Always append default path if not present in domain.
+ if not url_has_path(domain):
+ domain = '{domain:s}/'.format(domain=domain)
+ # Concatenate domain with protocol and path.
+ return '{domain:s}{path:s}'.format(domain=domain, path=path.lstrip('/')) \ No newline at end of file