Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -495,21 +495,24 @@ conf = {{{packageName}}}.Configuration(
{{^async}}
# urllib3 does not read proxy environment variables itself:
# https://github.com/urllib3/urllib3/issues/1785
# A proxy taken from the environment is re-resolved when the host is
# assigned; see the host setter.
self._proxy_from_env = proxy is None
if proxy is None or no_proxy is None:
proxies = getproxies()
if proxy is None:
scheme = urlparse(self.host).scheme
proxy = proxies.get(scheme) or proxies.get("all")
proxy = self._env_proxy(proxies, self.host)
if no_proxy is None:
no_proxy = proxies.get("no")
self._proxy = proxy
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
{{/async}}
{{#async}}
self.proxy = proxy
"""Proxy URL
"""
{{^async}}
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
{{/async}}
self.proxy_headers = proxy_headers
"""Proxy headers
Expand Down Expand Up @@ -991,3 +994,25 @@ conf = {{{packageName}}}.Configuration(
"""Fix base path."""
self._base_path = value
self.server_index = None
{{^async}}
if self._proxy_from_env:
# the scheme-specific proxy depends on the host, which is
# commonly assigned after construction
self._proxy = self._env_proxy(getproxies(), value)

@staticmethod
def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
"""Pick the environment proxy that applies to `host`."""
return proxies.get(urlparse(host).scheme) or proxies.get("all")

@property
def proxy(self) -> Optional[str]:
"""Proxy URL
"""
return self._proxy

@proxy.setter
def proxy(self, value: Optional[str]) -> None:
self._proxy = value
self._proxy_from_env = False
{{/async}}
Original file line number Diff line number Diff line change
Expand Up @@ -337,16 +337,16 @@ def __init__(

# urllib3 does not read proxy environment variables itself:
# https://github.com/urllib3/urllib3/issues/1785
# A proxy taken from the environment is re-resolved when the host is
# assigned; see the host setter.
self._proxy_from_env = proxy is None
if proxy is None or no_proxy is None:
proxies = getproxies()
if proxy is None:
scheme = urlparse(self.host).scheme
proxy = proxies.get(scheme) or proxies.get("all")
proxy = self._env_proxy(proxies, self.host)
if no_proxy is None:
no_proxy = proxies.get("no")
self.proxy = proxy
"""Proxy URL
"""
self._proxy = proxy
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
Expand Down Expand Up @@ -657,3 +657,23 @@ def host(self, value: str) -> None:
"""Fix base path."""
self._base_path = value
self.server_index = None
if self._proxy_from_env:
# the scheme-specific proxy depends on the host, which is
# commonly assigned after construction
self._proxy = self._env_proxy(getproxies(), value)

@staticmethod
def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
"""Pick the environment proxy that applies to `host`."""
return proxies.get(urlparse(host).scheme) or proxies.get("all")

@property
def proxy(self) -> Optional[str]:
"""Proxy URL
"""
return self._proxy

@proxy.setter
def proxy(self, value: Optional[str]) -> None:
self._proxy = value
self._proxy_from_env = False
30 changes: 25 additions & 5 deletions samples/client/echo_api/python/openapi_client/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,16 +337,16 @@ def __init__(

# urllib3 does not read proxy environment variables itself:
# https://github.com/urllib3/urllib3/issues/1785
# A proxy taken from the environment is re-resolved when the host is
# assigned; see the host setter.
self._proxy_from_env = proxy is None
if proxy is None or no_proxy is None:
proxies = getproxies()
if proxy is None:
scheme = urlparse(self.host).scheme
proxy = proxies.get(scheme) or proxies.get("all")
proxy = self._env_proxy(proxies, self.host)
if no_proxy is None:
no_proxy = proxies.get("no")
self.proxy = proxy
"""Proxy URL
"""
self._proxy = proxy
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
Expand Down Expand Up @@ -657,3 +657,23 @@ def host(self, value: str) -> None:
"""Fix base path."""
self._base_path = value
self.server_index = None
if self._proxy_from_env:
# the scheme-specific proxy depends on the host, which is
# commonly assigned after construction
self._proxy = self._env_proxy(getproxies(), value)

@staticmethod
def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
"""Pick the environment proxy that applies to `host`."""
return proxies.get(urlparse(host).scheme) or proxies.get("all")

@property
def proxy(self) -> Optional[str]:
"""Proxy URL
"""
return self._proxy

@proxy.setter
def proxy(self, value: Optional[str]) -> None:
self._proxy = value
self._proxy_from_env = False
Original file line number Diff line number Diff line change
Expand Up @@ -317,16 +317,16 @@ def __init__(

# urllib3 does not read proxy environment variables itself:
# https://github.com/urllib3/urllib3/issues/1785
# A proxy taken from the environment is re-resolved when the host is
# assigned; see the host setter.
self._proxy_from_env = proxy is None
if proxy is None or no_proxy is None:
proxies = getproxies()
if proxy is None:
scheme = urlparse(self.host).scheme
proxy = proxies.get(scheme) or proxies.get("all")
proxy = self._env_proxy(proxies, self.host)
if no_proxy is None:
no_proxy = proxies.get("no")
self.proxy = proxy
"""Proxy URL
"""
self._proxy = proxy
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
Expand Down Expand Up @@ -623,3 +623,23 @@ def host(self, value: str) -> None:
"""Fix base path."""
self._base_path = value
self.server_index = None
if self._proxy_from_env:
# the scheme-specific proxy depends on the host, which is
# commonly assigned after construction
self._proxy = self._env_proxy(getproxies(), value)

@staticmethod
def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
"""Pick the environment proxy that applies to `host`."""
return proxies.get(urlparse(host).scheme) or proxies.get("all")

@property
def proxy(self) -> Optional[str]:
"""Proxy URL
"""
return self._proxy

@proxy.setter
def proxy(self, value: Optional[str]) -> None:
self._proxy = value
self._proxy_from_env = False
Original file line number Diff line number Diff line change
Expand Up @@ -407,16 +407,16 @@ def __init__(

# urllib3 does not read proxy environment variables itself:
# https://github.com/urllib3/urllib3/issues/1785
# A proxy taken from the environment is re-resolved when the host is
# assigned; see the host setter.
self._proxy_from_env = proxy is None
if proxy is None or no_proxy is None:
proxies = getproxies()
if proxy is None:
scheme = urlparse(self.host).scheme
proxy = proxies.get(scheme) or proxies.get("all")
proxy = self._env_proxy(proxies, self.host)
if no_proxy is None:
no_proxy = proxies.get("no")
self.proxy = proxy
"""Proxy URL
"""
self._proxy = proxy
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
Expand Down Expand Up @@ -805,3 +805,23 @@ def host(self, value: str) -> None:
"""Fix base path."""
self._base_path = value
self.server_index = None
if self._proxy_from_env:
# the scheme-specific proxy depends on the host, which is
# commonly assigned after construction
self._proxy = self._env_proxy(getproxies(), value)

@staticmethod
def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
"""Pick the environment proxy that applies to `host`."""
return proxies.get(urlparse(host).scheme) or proxies.get("all")

@property
def proxy(self) -> Optional[str]:
"""Proxy URL
"""
return self._proxy

@proxy.setter
def proxy(self, value: Optional[str]) -> None:
self._proxy = value
self._proxy_from_env = False
Original file line number Diff line number Diff line change
Expand Up @@ -407,16 +407,16 @@ def __init__(

# urllib3 does not read proxy environment variables itself:
# https://github.com/urllib3/urllib3/issues/1785
# A proxy taken from the environment is re-resolved when the host is
# assigned; see the host setter.
self._proxy_from_env = proxy is None
if proxy is None or no_proxy is None:
proxies = getproxies()
if proxy is None:
scheme = urlparse(self.host).scheme
proxy = proxies.get(scheme) or proxies.get("all")
proxy = self._env_proxy(proxies, self.host)
if no_proxy is None:
no_proxy = proxies.get("no")
self.proxy = proxy
"""Proxy URL
"""
self._proxy = proxy
self.no_proxy = no_proxy
"""Hosts that bypass the proxy
"""
Expand Down Expand Up @@ -801,3 +801,23 @@ def host(self, value: str) -> None:
"""Fix base path."""
self._base_path = value
self.server_index = None
if self._proxy_from_env:
# the scheme-specific proxy depends on the host, which is
# commonly assigned after construction
self._proxy = self._env_proxy(getproxies(), value)

@staticmethod
def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
"""Pick the environment proxy that applies to `host`."""
return proxies.get(urlparse(host).scheme) or proxies.get("all")

@property
def proxy(self) -> Optional[str]:
"""Proxy URL
"""
return self._proxy

@proxy.setter
def proxy(self, value: Optional[str]) -> None:
self._proxy = value
self._proxy_from_env = False
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,68 @@ def test_explicit_proxy_does_not_resolve_generated_host(self):

self.assertEqual(config.proxy, "http://proxy.example")

def test_proxy_settings_follow_host_assigned_after_construction(self):
environment_proxies = {
"http": "http://plain-proxy.example",
"https": "http://secure-proxy.example",
}
with patch(
"petstore_api.configuration.getproxies",
return_value=environment_proxies,
):
config = petstore_api.Configuration()

config.host = "https://api.example"
self.assertEqual(config.proxy, "http://secure-proxy.example")

config.host = "http://api.example"
self.assertEqual(config.proxy, "http://plain-proxy.example")

def test_proxy_settings_resolve_for_a_host_unknown_at_construction(self):
# a spec without a server URL leaves the host empty until the caller
# assigns one, which is when the scheme first becomes known
with patch(
"petstore_api.configuration.getproxies",
return_value={"https": "http://secure-proxy.example"},
):
config = petstore_api.Configuration(host="")
self.assertIsNone(config.proxy)

config.host = "https://api.example"
self.assertEqual(config.proxy, "http://secure-proxy.example")

def test_assigned_proxy_survives_later_host_assignment(self):
with patch(
"petstore_api.configuration.getproxies",
return_value={"https": "http://secure-proxy.example"},
):
config = petstore_api.Configuration()
config.proxy = "http://assigned-proxy.example"
config.host = "https://api.example"

self.assertEqual(config.proxy, "http://assigned-proxy.example")

def test_assigned_none_proxy_disables_the_environment(self):
with patch(
"petstore_api.configuration.getproxies",
return_value={"https": "http://secure-proxy.example"},
):
config = petstore_api.Configuration()
config.proxy = None
config.host = "https://api.example"

self.assertIsNone(config.proxy)

def test_assigned_host_falls_back_to_the_all_proxy(self):
with patch(
"petstore_api.configuration.getproxies",
return_value={"all": "http://any-proxy.example"},
):
config = petstore_api.Configuration()
config.host = "https://api.example"

self.assertEqual(config.proxy, "http://any-proxy.example")

def test_ignore_operation_servers(self):
self.config.ignore_operation_servers = True
self.assertTrue(self.config.ignore_operation_servers)
Expand Down
Loading