diff options
| -rw-r--r-- | README.rst | 4 | ||||
| -rw-r--r-- | brevisurl/backends/local.py | 4 | ||||
| -rw-r--r-- | brevisurl/context_processors.py | 3 | ||||
| -rw-r--r-- | brevisurl/settings.py | 5 | ||||
| -rw-r--r-- | brevisurl/tests/backends/test_local.py | 10 | ||||
| -rw-r--r-- | brevisurl/tests/test_utils.py | 15 | ||||
| -rw-r--r-- | brevisurl/utils.py | 31 | 
7 files changed, 43 insertions, 29 deletions
| @@ -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 | 
