From a48aadaaed5127aa08a762bb55b69b30905a6c51 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 28 Apr 2015 23:29:55 +0200 Subject: [PATCH] utils: Add basic format proxy helper --- mopidy/utils/http.py | 25 +++++++++++++++++++++++++ tests/utils/test_http.py | 20 ++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 mopidy/utils/http.py create mode 100644 tests/utils/test_http.py diff --git a/mopidy/utils/http.py b/mopidy/utils/http.py new file mode 100644 index 00000000..bc6d38f4 --- /dev/null +++ b/mopidy/utils/http.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + + +def format_proxy(proxy_config): + """Convert a Mopidy proxy config to the commonly used proxy string format. + + Outputs ``scheme://host:port``, ``scheme://user:pass@host:port`` or + :class:`None` depending on the proxy config provided. + """ + if not proxy_config.get('hostname'): + return None + + if proxy_config.get('username') and proxy_config.get('password'): + template = '{scheme}://{username}:{password}@{hostname}:{port}' + else: + template = '{scheme}://{hostname}:{port}' + + port = proxy_config.get('port', 80) + if port < 0: + port = 80 + + return template.format(scheme=proxy_config.get('scheme', 'http'), + username=proxy_config.get('username'), + password=proxy_config.get('password'), + hostname=proxy_config['hostname'], port=port) diff --git a/tests/utils/test_http.py b/tests/utils/test_http.py new file mode 100644 index 00000000..b63ebf31 --- /dev/null +++ b/tests/utils/test_http.py @@ -0,0 +1,20 @@ +from __future__ import unicode_literals + +import pytest + +from mopidy.utils import http + + +@pytest.mark.parametrize("config,expected", [ + ({}, None), + ({'hostname': 'proxy.lan'}, 'http://proxy.lan:80'), + ({'scheme': 'https', 'hostname': 'proxy.lan'}, 'https://proxy.lan:80'), + ({'username': 'user', 'hostname': 'proxy.lan'}, 'http://proxy.lan:80'), + ({'password': 'pass', 'hostname': 'proxy.lan'}, 'http://proxy.lan:80'), + ({'hostname': 'proxy.lan', 'port': 8080}, 'http://proxy.lan:8080'), + ({'hostname': 'proxy.lan', 'port': -1}, 'http://proxy.lan:80'), + ({'username': 'user', 'password': 'pass', 'hostname': 'proxy.lan'}, + 'http://user:pass@proxy.lan:80'), +]) +def test_format_proxy(config, expected): + assert http.format_proxy(config) == expected