Skip to content

Commit

Permalink
[python/asyncio] fix passing proxy parameters to aiohttp (#5943)
Browse files Browse the repository at this point in the history
  • Loading branch information
tomplus authored Apr 16, 2020
1 parent 91cfabd commit 7a02423
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,13 @@ class RESTClientObject(object):
ssl=ssl_context
)

self.proxy = configuration.proxy
self.proxy_headers = configuration.proxy_headers

# https pool manager
if configuration.proxy:
self.pool_manager = aiohttp.ClientSession(
connector=connector,
proxy=configuration.proxy
)
else:
self.pool_manager = aiohttp.ClientSession(
connector=connector
)
self.pool_manager = aiohttp.ClientSession(
connector=connector
)

async def close(self):
await self.pool_manager.close()
Expand Down Expand Up @@ -122,6 +119,11 @@ class RESTClientObject(object):
"headers": headers
}

if self.proxy:
args["proxy"] = self.proxy
if self.proxy_headers:
args["proxy_headers"] = self.proxy_headers

if query_params:
args["url"] += '?' + urlencode(query_params)

Expand Down
20 changes: 11 additions & 9 deletions samples/client/petstore/python-asyncio/petstore_api/rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,13 @@ def __init__(self, configuration, pools_size=4, maxsize=None):
ssl=ssl_context
)

self.proxy = configuration.proxy
self.proxy_headers = configuration.proxy_headers

# https pool manager
if configuration.proxy:
self.pool_manager = aiohttp.ClientSession(
connector=connector,
proxy=configuration.proxy
)
else:
self.pool_manager = aiohttp.ClientSession(
connector=connector
)
self.pool_manager = aiohttp.ClientSession(
connector=connector
)

async def close(self):
await self.pool_manager.close()
Expand Down Expand Up @@ -130,6 +127,11 @@ async def request(self, method, url, query_params=None, headers=None,
"headers": headers
}

if self.proxy:
args["proxy"] = self.proxy
if self.proxy_headers:
args["proxy_headers"] = self.proxy_headers

if query_params:
args["url"] += '?' + urlencode(query_params)

Expand Down
13 changes: 13 additions & 0 deletions samples/client/petstore/python-asyncio/tests/test_pet_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,19 @@ async def test_delete_pet(self):
except ApiException as e:
self.assertEqual(404, e.status)

@async_test
async def test_proxy(self):
config = Configuration()
# set not-existent proxy and catch an error to verify that
# the client library (aiohttp) tried to use it.
config.proxy = 'http://localhost:8080/proxy'
async with petstore_api.ApiClient(config) as client:
pet_api = petstore_api.PetApi(client)

with self.assertRaisesRegex(petstore_api.rest.aiohttp.client_exceptions.ClientProxyConnectionError,
'Cannot connect to host localhost:8080'):
await pet_api.get_pet_by_id(self.pet.id)


if __name__ == '__main__':
import logging
Expand Down

0 comments on commit 7a02423

Please sign in to comment.