aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Gorej2012-09-17 11:34:19 +0200
committerVladimir Gorej2012-09-17 11:34:19 +0200
commitf1e930d2f718c781cabce4514071634dacf9e381 (patch)
tree130cf430f1ab7c7543bcdff13d9a811ff03b7607
parentdc47806d5668fab3326364d1101c356a2891d594 (diff)
downloaddjango-brevisurl-f1e930d2f718c781cabce4514071634dacf9e381.tar.bz2
Issue #17; stripping slash from shortened token url
-rw-r--r--brevisurl/backends/local.py24
-rw-r--r--brevisurl/settings.py6
-rw-r--r--brevisurl/tests/backends/test_local.py20
-rw-r--r--brevisurl/utils.py2
-rw-r--r--brevisurl/views.py6
5 files changed, 41 insertions, 17 deletions
diff --git a/brevisurl/backends/local.py b/brevisurl/backends/local.py
index 2c54c5b..e09fb53 100644
--- a/brevisurl/backends/local.py
+++ b/brevisurl/backends/local.py
@@ -35,20 +35,22 @@ class BrevisUrlBackend(BaseBrevisUrlBackend):
try:
short_url = ShortUrl()
if self.kwargs.get('domain') is not None:
- short_url.shortened_url = '{0}{1}'.format(self.kwargs.get('domain').rstrip('/'),
- reverse('brevisurl_redirect',
- kwargs={'token': self.__generate_token()}))
+ # Domain is present in keyword arguments supplied by constructor.
+ domain = self.kwargs.get('domain').rstrip('/')
elif 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()}))
+ # Domain is defined in settings.
+ domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/')
else:
- current_site = Site.objects.get_current()
- short_url.shortened_url = '{0}://{1}{2}'.format(brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL,
- current_site.domain,
- reverse('brevisurl_redirect',
- kwargs={'token': self.__generate_token()}))
+ # Domain is taken from django site framework.
+ domain = '{protocol:s}://{domain:s}'.format(protocol=brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL,
+ domain=Site.objects.get_current().domain)
+ # Generating url path for shortened url.
+ url_path = reverse('brevisurl_redirect', kwargs={'token': self.__generate_token()})
+ if brevisurl.settings.LOCAL_BACKEND_STRIP_TOKEN_URL_SLASH:
+ url_path = url_path.lstrip('/')
+ # Saving newly generated shortened url.
short_url.original_url = original_url
+ short_url.shortened_url = '{domain:s}{url_path:s}'.format(domain=domain, url_path=url_path)
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/settings.py b/brevisurl/settings.py
index 3334798..80b3989 100644
--- a/brevisurl/settings.py
+++ b/brevisurl/settings.py
@@ -18,6 +18,8 @@ LOCAL_BACKEND_TOKEN_LENGTH = getattr(settings, 'BREVISURL_LOCAL_BACKEND_TOKEN_LE
# Settings for url pattern
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') \ No newline at end of file
+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
diff --git a/brevisurl/tests/backends/test_local.py b/brevisurl/tests/backends/test_local.py
index ebf27e8..437c790 100644
--- a/brevisurl/tests/backends/test_local.py
+++ b/brevisurl/tests/backends/test_local.py
@@ -116,4 +116,22 @@ class TestLocalBrevisUrlBackend(TestCase):
self.assertEqual(ShortUrl.objects.all().count(), 2)
self.assertRegexpMatches(short_url.shortened_url, '^https://')
brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL = _default_protocol
- brevisurl.settings.LOCAL_BACKEND_DOMAIN = None \ No newline at end of file
+ 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
+ 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
diff --git a/brevisurl/utils.py b/brevisurl/utils.py
index b023554..237ac49 100644
--- a/brevisurl/utils.py
+++ b/brevisurl/utils.py
@@ -44,4 +44,6 @@ def absurl(protocol=brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL,
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('/')
return '{0}://{1}{2}'.format(protocol, domain, path) \ No newline at end of file
diff --git a/brevisurl/views.py b/brevisurl/views.py
index a210693..7bad87c 100644
--- a/brevisurl/views.py
+++ b/brevisurl/views.py
@@ -28,7 +28,7 @@ class BrevisUrlRedirectView(RedirectView):
connection = get_connection('brevisurl.backends.local.BrevisUrlBackend')
short_url_obj = None
- # Seeking domain in settings
+ # Seeking domain in settings.
if brevisurl.settings.LOCAL_BACKEND_DOMAIN is not None:
domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/')
short_url = absurl(domain=domain, path=reverse('brevisurl_redirect', kwargs={'token': token}))
@@ -37,7 +37,7 @@ class BrevisUrlRedirectView(RedirectView):
except ShortUrl.DoesNotExist:
pass
- # Seeking domain in django site framework and current site
+ # Seeking domain in django site framework and current site.
if short_url_obj is None:
try:
site = Site.objects.get_current()
@@ -48,7 +48,7 @@ class BrevisUrlRedirectView(RedirectView):
except ShortUrl.DoesNotExist:
pass
- # Seeking domain from current request
+ # Seeking domain from current request.
if short_url_obj is None:
try:
short_url = absurl(domain=self.request.get_host(), path=reverse('brevisurl_redirect', kwargs={'token': token}))