From a45e3e9f98aac03c61a1167e61ff15be3e45c1b4 Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Wed, 20 Jun 2012 21:13:38 +0200 Subject: Issue #9; absurl util for constructing absolute urls directly in code --- brevisurl/utils.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'brevisurl/utils.py') diff --git a/brevisurl/utils.py b/brevisurl/utils.py index e0c3d52..b023554 100644 --- a/brevisurl/utils.py +++ b/brevisurl/utils.py @@ -1,4 +1,7 @@ from django.utils import importlib +from django.contrib.sites.models import Site + +import brevisurl.settings def load_object(import_path): @@ -15,4 +18,30 @@ def load_object(import_path): raise ValueError('There must be at least one dot in import path: "%s"', import_path) module_name, object_name = import_path.rsplit('.', 1) module = importlib.import_module(module_name) - return getattr(module, object_name) \ No newline at end of file + return getattr(module, object_name) + + +def absurl(protocol=brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL, + 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 + domain is used. If both are not set, current site is used. + + :param protocol: domain protocol + :type protocol: string + :param domain: URI domain + :type domain: string + :param site: Site instance + :type site: django.contrib.sites.models.Site + :param path: URI path + :type path: string + :returns: absolute URI + :rtype: string + + """ + 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 + return '{0}://{1}{2}'.format(protocol, domain, path) \ No newline at end of file -- cgit v1.2.3