aboutsummaryrefslogtreecommitdiffstats
path: root/brevisurl/utils.py
diff options
context:
space:
mode:
authorVladimir Gorej2012-09-17 13:34:01 +0200
committerVladimir Gorej2012-09-17 13:34:01 +0200
commit5e37d36d5b8a241d458d54fa300ff3b7bfed8f5f (patch)
treeb3a010de1af7e3b4439fb9ecccfd2e7fefabe492 /brevisurl/utils.py
parenta99fc53d8ae3928ddb68bc3f2d6875f670c3cd1b (diff)
downloaddjango-brevisurl-5e37d36d5b8a241d458d54fa300ff3b7bfed8f5f.tar.bz2
Issue #13; using absurl util whenrever possible
Diffstat (limited to 'brevisurl/utils.py')
-rw-r--r--brevisurl/utils.py24
1 files changed, 21 insertions, 3 deletions
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