diff options
| author | Vladimir Gorej | 2012-09-17 11:34:19 +0200 |
|---|---|---|
| committer | Vladimir Gorej | 2012-09-17 11:34:19 +0200 |
| commit | f1e930d2f718c781cabce4514071634dacf9e381 (patch) | |
| tree | 130cf430f1ab7c7543bcdff13d9a811ff03b7607 | |
| parent | dc47806d5668fab3326364d1101c356a2891d594 (diff) | |
| download | django-brevisurl-f1e930d2f718c781cabce4514071634dacf9e381.tar.bz2 | |
Issue #17; stripping slash from shortened token url
| -rw-r--r-- | brevisurl/backends/local.py | 24 | ||||
| -rw-r--r-- | brevisurl/settings.py | 6 | ||||
| -rw-r--r-- | brevisurl/tests/backends/test_local.py | 20 | ||||
| -rw-r--r-- | brevisurl/utils.py | 2 | ||||
| -rw-r--r-- | brevisurl/views.py | 6 |
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})) |
