diff options
| author | Vladimir Gorej | 2012-09-17 13:34:01 +0200 | 
|---|---|---|
| committer | Vladimir Gorej | 2012-09-17 13:34:01 +0200 | 
| commit | 5e37d36d5b8a241d458d54fa300ff3b7bfed8f5f (patch) | |
| tree | b3a010de1af7e3b4439fb9ecccfd2e7fefabe492 | |
| parent | a99fc53d8ae3928ddb68bc3f2d6875f670c3cd1b (diff) | |
| download | django-brevisurl-5e37d36d5b8a241d458d54fa300ff3b7bfed8f5f.tar.bz2 | |
Issue #13; using absurl util whenrever possible
| -rw-r--r-- | brevisurl/backends/local.py | 11 | ||||
| -rw-r--r-- | brevisurl/templatetags/brevisurltags.py | 2 | ||||
| -rw-r--r-- | brevisurl/tests/test_utils.py | 15 | ||||
| -rw-r--r-- | brevisurl/utils.py | 24 | 
4 files changed, 39 insertions, 13 deletions
| diff --git a/brevisurl/backends/local.py b/brevisurl/backends/local.py index e09fb53..2415694 100644 --- a/brevisurl/backends/local.py +++ b/brevisurl/backends/local.py @@ -9,6 +9,7 @@ import brevisurl.settings  from brevisurl import Error  from brevisurl.backends.base import BaseBrevisUrlBackend  from brevisurl.models import ShortUrl +from brevisurl.utils import absurl  log = logging.getLogger(__name__) @@ -42,15 +43,11 @@ class BrevisUrlBackend(BaseBrevisUrlBackend):                  domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/')              else:                  # 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('/') +                domain = Site.objects.get_current().domain              # 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.shortened_url = absurl(domain=domain, path=reverse('brevisurl_redirect', +                                                                         kwargs={'token': 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/templatetags/brevisurltags.py b/brevisurl/templatetags/brevisurltags.py index 82544a8..ebe6b5f 100644 --- a/brevisurl/templatetags/brevisurltags.py +++ b/brevisurl/templatetags/brevisurltags.py @@ -20,7 +20,7 @@ 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) +        domain = 'http://{domain:s}'.format(domain=Site.objects.get_current().domain)          if self.asvar:              context[self.asvar]= urlparse.urljoin(domain, context[self.asvar])              return '' diff --git a/brevisurl/tests/test_utils.py b/brevisurl/tests/test_utils.py index 3fedecd..a6a8fd2 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 +from brevisurl.utils import load_object, absurl, url_has_protocol  from brevisurl.backends.local import BrevisUrlBackend @@ -51,4 +51,15 @@ class TestAbsUrl(unittest.TestCase):      def test_site_and_domain(self):          site = Site(domain='www.codescale.net', name='CodeScale.net')          abs_url = absurl(protocol='http', domain='sub.codescale.net', site=site, path='/') -        self.assertEqual(abs_url, 'http://sub.codescale.net/')
\ No newline at end of file +        self.assertEqual(abs_url, 'http://sub.codescale.net/') + + +class TestUrlHasProtocol(unittest.TestCase): + +    def test_url_with_protocol(self): +        url = 'http://test.sk' +        self.assertTrue(url_has_protocol(url)) + +    def test_url_without_protocol(self): +        url = 'test.sk/path/' +        self.assertFalse(url_has_protocol(url))
\ No newline at end of file diff --git a/brevisurl/utils.py b/brevisurl/utils.py index 237ac49..a55bb66 100644 --- a/brevisurl/utils.py +++ b/brevisurl/utils.py @@ -1,3 +1,5 @@ +import urlparse +  from django.utils import importlib  from django.contrib.sites.models import Site @@ -21,8 +23,20 @@ def load_object(import_path):      return getattr(module, object_name) -def absurl(protocol=brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL, -           domain=None, site=None, path='/'): +def url_has_protocol(url): +    """Util for determining whether url has protocol present or not. + +    :param url: url that is being examined. +    :type url: string +    :returns: True if url has protocol, False if not +    :rtype: bool + +    """ +    url_parsed = urlparse.urlparse(url) +    return True if url_parsed.netloc != '' and url_parsed.scheme in ('http', 'https') else False + + +def absurl(protocol=None, domain=None, site=None, path='/'):      """Util for constructing absolute urls from relative urls.      Keyword argument domain has higher priority over site. If site not set @@ -40,10 +54,14 @@ def absurl(protocol=brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL,      :rtype: string      """ +    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('/') -    return '{0}://{1}{2}'.format(protocol, domain, path)
\ No newline at end of file +    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 | 
