summaryrefslogtreecommitdiff
path: root/kombu/utils/url.py
diff options
context:
space:
mode:
authorAsk Solem <ask@celeryproject.org>2014-05-20 18:41:44 +0100
committerAsk Solem <ask@celeryproject.org>2014-05-20 18:52:57 +0100
commitf4ef17236e0085b0d948162cfbaa6d42935e2dca (patch)
treed746b43814d03e10825877b5204746e0f71a473b /kombu/utils/url.py
parent14ecb44a080720d3d395f59834881e8099c26d1a (diff)
downloadkombu-f4ef17236e0085b0d948162cfbaa6d42935e2dca.tar.gz
Adds sanitize_url and as_url to kombu.utils.url
Diffstat (limited to 'kombu/utils/url.py')
-rw-r--r--kombu/utils/url.py32
1 files changed, 30 insertions, 2 deletions
diff --git a/kombu/utils/url.py b/kombu/utils/url.py
index 209d549c..8f8b5290 100644
--- a/kombu/utils/url.py
+++ b/kombu/utils/url.py
@@ -1,11 +1,15 @@
from __future__ import absolute_import
+from functools import partial
+
try:
- from urllib.parse import unquote, urlparse, parse_qsl
+ from urllib.parse import parse_qsl, quote, unquote, urlparse
except ImportError:
- from urllib import unquote # noqa
+ from urllib import quote, unquote # noqa
from urlparse import urlparse, parse_qsl # noqa
+safequote = partial(quote, safe='')
+
def _parse_url(url):
scheme = urlparse(url).scheme
@@ -26,3 +30,27 @@ def parse_url(url):
return dict(transport=scheme, hostname=host,
port=port, userid=user,
password=password, virtual_host=path, **query)
+
+
+def as_url(scheme, host=None, port=None, user=None, password=None,
+ path=None, query=None, sanitize=False, mask='**'):
+ parts = ['{0}://'.format(scheme)]
+ if user or password:
+ if user:
+ parts.append(safequote(user))
+ if password:
+ if sanitize:
+ parts.extend([':', mask] if mask else [':'])
+ else:
+ parts.extend([':', safequote(password)])
+ parts.append('@')
+ parts.append(safequote(host))
+ if port:
+ parts.extend([':', port])
+ parts.extend(['/', path])
+ return ''.join(str(part) for part in parts if part)
+
+
+def sanitize_url(url, mask='**'):
+ return as_url(*_parse_url(url), sanitize=True, mask=mask)
+