diff options
author | Ask Solem <ask@celeryproject.org> | 2014-05-20 18:41:44 +0100 |
---|---|---|
committer | Ask Solem <ask@celeryproject.org> | 2014-05-20 18:52:57 +0100 |
commit | f4ef17236e0085b0d948162cfbaa6d42935e2dca (patch) | |
tree | d746b43814d03e10825877b5204746e0f71a473b /kombu/utils/url.py | |
parent | 14ecb44a080720d3d395f59834881e8099c26d1a (diff) | |
download | kombu-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.py | 32 |
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) + |