Skip to content

Commit 6d95493

Browse files
authored
Merge pull request #6028 from PrimozGodec/change-proxy-behaviour
[FIX] Embedders - fix proxies, default on http, tests
2 parents 739c36b + 7f83008 commit 6d95493

File tree

2 files changed

+83
-12
lines changed

2 files changed

+83
-12
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import os
2+
import unittest
3+
4+
from Orange.misc.utils.embedder_utils import get_proxies
5+
6+
7+
class TestProxies(unittest.TestCase):
8+
def setUp(self) -> None:
9+
self.previous_http = os.environ.get("http_proxy")
10+
self.previous_https = os.environ.get("https_proxy")
11+
os.environ.pop("http_proxy", None)
12+
os.environ.pop("https_proxy", None)
13+
14+
def tearDown(self) -> None:
15+
os.environ.pop("http_proxy", None)
16+
os.environ.pop("https_proxy", None)
17+
if self.previous_http is not None:
18+
os.environ["http_proxy"] = self.previous_http
19+
if self.previous_https is not None:
20+
os.environ["https_proxy"] = self.previous_https
21+
22+
def test_add_scheme(self):
23+
os.environ["http_proxy"] = "test1.com"
24+
os.environ["https_proxy"] = "test2.com"
25+
res = get_proxies()
26+
self.assertEqual("http://test1.com", res.get("http://"))
27+
self.assertEqual("http://test2.com", res.get("https://"))
28+
29+
os.environ["http_proxy"] = "test1.com/path"
30+
os.environ["https_proxy"] = "test2.com/path"
31+
res = get_proxies()
32+
self.assertEqual("http://test1.com/path", res.get("http://"))
33+
self.assertEqual("http://test2.com/path", res.get("https://"))
34+
35+
os.environ["http_proxy"] = "https://test1.com:123"
36+
os.environ["https_proxy"] = "https://test2.com:124"
37+
res = get_proxies()
38+
self.assertEqual("https://test1.com:123", res.get("http://"))
39+
self.assertEqual("https://test2.com:124", res.get("https://"))
40+
41+
def test_both_urls(self):
42+
os.environ["http_proxy"] = "http://test1.com:123"
43+
os.environ["https_proxy"] = "https://test2.com:124"
44+
res = get_proxies()
45+
self.assertEqual("http://test1.com:123", res.get("http://"))
46+
self.assertEqual("https://test2.com:124", res.get("https://"))
47+
self.assertNotIn("all://", res)
48+
49+
def test_http_only(self):
50+
os.environ["http_proxy"] = "http://test1.com:123"
51+
res = get_proxies()
52+
self.assertEqual("http://test1.com:123", res.get("http://"))
53+
self.assertNotIn("https://", res)
54+
55+
def test_https_only(self):
56+
os.environ["https_proxy"] = "https://test1.com:123"
57+
res = get_proxies()
58+
self.assertEqual("https://test1.com:123", res.get("https://"))
59+
self.assertNotIn("http://", res)
60+
61+
def test_none(self):
62+
""" When no variable is set return None """
63+
self.assertIsNone(get_proxies())
64+
65+
66+
if __name__ == "__main__":
67+
unittest.main()

Orange/misc/utils/embedder_utils.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,26 @@ def add(self, cache_key, value):
7878

7979
def get_proxies() -> Optional[Dict[str, str]]:
8080
"""
81-
Return dict with proxy addresses if they exists.
81+
Return dict with proxy addresses if they exist.
8282
8383
Returns
8484
-------
8585
proxy_dict
8686
Dictionary with format {proxy type: proxy address} or None if
8787
they not set.
8888
"""
89-
def add_protocol(url: Optional[str], prot: str) -> Optional[str]:
90-
if url and not url.startswith(prot):
91-
return f"{prot}://{url}"
92-
return url
93-
http_proxy = add_protocol(environ.get("http_proxy"), "http")
94-
https_proxy = add_protocol(environ.get("https_proxy"), "https")
95-
if http_proxy and https_proxy: # both proxy addresses defined
96-
return {"http://": https_proxy, "https://": https_proxy}
97-
elif any([https_proxy, http_proxy]): # one of the proxies defined
98-
return {"all://": http_proxy or https_proxy}
99-
return None # proxies not defined
89+
def add_scheme(url: Optional[str]) -> Optional[str]:
90+
if url is not None and "://" not in url:
91+
# if no scheme default to http - as other libraries do (e.g. requests)
92+
return f"http://{url}"
93+
else:
94+
return url
95+
96+
http_proxy = add_scheme(environ.get("http_proxy"))
97+
https_proxy = add_scheme(environ.get("https_proxy"))
98+
proxy_dict = {}
99+
if http_proxy:
100+
proxy_dict["http://"] = http_proxy
101+
if https_proxy:
102+
proxy_dict["https://"] = https_proxy
103+
return proxy_dict if proxy_dict else None

0 commit comments

Comments
 (0)