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 |
