Skip to content

Commit

Permalink
Merge pull request #730 from valory-xyz/refactor/http-client-timeout
Browse files Browse the repository at this point in the history
Make the http client's timeout configurable
  • Loading branch information
angrybayblade authored Apr 10, 2024
2 parents 1bb984b + c46ab9f commit 0aa9df3
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 45 deletions.
72 changes: 36 additions & 36 deletions docs/package_list.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
| Package name | Package hash |
| ------------------------------------------------------------- | ------------------------------------------------------------- |
| protocol/fetchai/gym/1.0.0 | `bafybeidepuani7dw6r2wwmtxfeefqwhnctprmwatzqbxg2achstc6kpfke` |
| connection/fetchai/gym/0.19.0 | `bafybeiguq4eduf35lvs3ltmi3jabpokz6raadrje3c274f5dnvfipdl7jm` |
| protocol/fetchai/default/1.0.0 | `bafybeibtqp56jkijwjsohk4z5vqp6pfkiexmnmk5uleteotbsgrypy6gxm` |
| protocol/valory/acn/1.1.0 | `bafybeic2pxzfc3voxl2ejhcqyf2ehm4wm5gxvgx7bliloiqi2uppmq6weu` |
| protocol/valory/contract_api/1.0.0 | `bafybeialhbjvwiwcnqq3ysxcyemobcbie7xza66gaofcvla5njezkvhcka` |
| protocol/valory/http/1.0.0 | `bafybeiejoqgv7finfxo3rcvvovrlj5ccrbgxodjq43uo26ylpowsa3llfe` |
| protocol/valory/ledger_api/1.0.0 | `bafybeige5agrztgzfevyglf7mb4o7pzfttmq4f6zi765y4g2zvftbyowru` |
| connection/fetchai/http_server/0.22.0 | `bafybeihvscddpxjbtqsetngmxo3kiht2wqhosmwiyuh3f6zjti3x3byu5u` |
| connection/fetchai/stub/0.21.0 | `bafybeictgpdqbpyppmoxn2g7jkaxvulihew7zaszv4xyhgvsntq7tqs7wi` |
| connection/valory/ledger/0.19.0 | `bafybeigo5vst3zlltkouenwxuzn6c47yr2fbbml6dl2o32rfnsezmalgnu` |
| connection/valory/p2p_libp2p/0.1.0 | `bafybeiaykya7tvir7k5scovjzuagpfcftvptxoi2od5qqqvukwglsrrtzy` |
| connection/valory/p2p_libp2p_client/0.1.0 | `bafybeihge56dn3xep2dzomu7rtvbgo4uc2qqh7ljl3fubqdi2lq44gs5lq` |
| connection/valory/p2p_libp2p_mailbox/0.1.0 | `bafybeieufv6tbei3vza7bg7ggzsvyvwmzps5kghxlar3drhme6d7mxawvy` |
| protocol/fetchai/gym/1.0.0 | `bafybeiflnuet6ofanewmst3lchg2gkoj2vuspcajya7esfkrmiqqphuwxq` |
| protocol/fetchai/default/1.0.0 | `bafybeihdvtmnz7fzy7kwi3wlo6rfl27f6q3g5entplgvq7y23i3v5uoz24` |
| protocol/valory/acn/1.1.0 | `bafybeidluaoeakae3exseupaea4i3yvvk5vivyt227xshjlffywwxzcxqe` |
| protocol/valory/contract_api/1.0.0 | `bafybeidgu7o5llh26xp3u3ebq3yluull5lupiyeu6iooi2xyymdrgnzq5i` |
| protocol/valory/http/1.0.0 | `bafybeifugzl63kfdmwrxwphrnrhj7bn6iruxieme3a4ntzejf6kmtuwmae` |
| protocol/valory/ledger_api/1.0.0 | `bafybeihdk6psr4guxmbcrc26jr2cbgzpd5aljkqvpwo64bvaz7tdti2oni` |
| protocol/fetchai/fipa/1.0.0 | `bafybeidbt5dwzdeywi723n3wendidxfbzheovb4dheb6h7mcsrkmlkwkh4` |
| protocol/fetchai/oef_search/1.0.0 | `bafybeid3eokuse7uiwmhdb4vx7yvev35cccvzo2xuhwuy7lernfupjymwm` |
| protocol/fetchai/state_update/1.0.0 | `bafybeiftntpyadajwnse25qwpvpidmahkn5qksg7jdzuemuqc7zsuek5xy` |
| protocol/open_aea/signing/1.0.0 | `bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi` |
| protocol/fetchai/tac/1.0.0 | `bafybeid3i7yew5pv3in5cg76oguxu5ncllxaiog64q42m2fq3k2rpphs2m` |
| contract/fetchai/erc1155/0.22.0 | `bafybeiff7a6xncyad53o2r7lekpnhexcspze6ocy55xtpzqeuacnlpunm4` |
| protocol/fetchai/fipa/1.0.0 | `bafybeid6o7dxutkendclxxtxo3pyizrfho3vxyj5j5sowkysmuqamywb24` |
| protocol/fetchai/oef_search/1.0.0 | `bafybeicysyqgag7gsbpvly5mzhlwwiosl7gupgmohx233gynw7xtgsxewy` |
| protocol/fetchai/state_update/1.0.0 | `bafybeiefezh5ei6gntomi6g5iq4raabktari3wc6t4g6jf23bgo7cgwlcq` |
| protocol/open_aea/signing/1.0.0 | `bafybeie7xyems76v5b4wc2lmaidcujizpxfzjnnwdeokmhje53g7ym25ii` |
| skill/fetchai/echo/0.19.0 | `bafybeibtjwgshqkgn5og7izogitnc66ug7pfhikcxlf2y46ixknpoxeyee` |
| connection/fetchai/gym/0.19.0 | `bafybeicqqvl4tt3qbulnkoffciagmfd6p3hxxi3i2mrrqtnbycv757pn6y` |
| connection/fetchai/stub/0.21.0 | `bafybeibybboiwgklfiqpkkcw6rwj65s5jalzfzf6mh6fstxdlt6habzwvy` |
| connection/valory/ledger/0.19.0 | `bafybeic3ft7l7ca3qgnderm4xupsfmyoihgi27ukotnz7b5hdczla2enya` |
| connection/valory/http_server/0.22.0 | `bafybeihpgu56ovmq4npazdbh6y6ru5i7zuv6wvdglpxavsckyih56smu7m` |
| connection/valory/p2p_libp2p/0.1.0 | `bafybeic2u7azbwjny2nhaltqnbohlvysx3x6ectzbege7sxwrbzcz4lcma` |
| connection/valory/p2p_libp2p_client/0.1.0 | `bafybeid3xg5k2ol5adflqloy75ibgljmol6xsvzvezebsg7oudxeeolz7e` |
| connection/valory/p2p_libp2p_mailbox/0.1.0 | `bafybeiecclc65ogngs3piaxpwhiyl77mlpqun5ejlyv4kamwzrrh746guq` |
| connection/fetchai/local/0.20.0 | `bafybeiema4rnxi54luhzbrccb27pfrwlohemka45eqf4nidgmtkwwmxeyi` |
| connection/valory/http_client/0.23.0 | `bafybeihi772xgzpqeipp3fhmvpct4y6e6tpjp4sogwqrnf3wqspgeilg4u` |
| connection/valory/test_libp2p/0.1.0 | `bafybeid4uexpzjgb3m6npbekohqayn2oukf3fershneha2dptmwtkayxza` |
| skill/fetchai/echo/0.19.0 | `bafybeicoawiackcbgqo3na3e56tpdc62atag4yxknur77py37caqq4mmya` |
| skill/fetchai/error_test_skill/0.1.0 | `bafybeihsbtlpe7h6fsvoxban5rilkmwviwkokul5cqym6atoolirontiyu` |
| skill/fetchai/gym/0.20.0 | `bafybeifaccpsmby27az6geu4d6m7xcjk2hop7ihtleqeeasphnhn2dp234` |
| skill/fetchai/http_echo/0.20.0 | `bafybeieysvwshmy2rlfzqclcfhl263roy6z3skvmy3ikmfcoioxhnhp67i` |
| agent/fetchai/error_test/0.1.0 | `bafybeif6q4pyu4vvtaljm33rw2fft3f5fu33byhku3qkspy4vhgzczqhwy` |
| agent/fetchai/gym_aea/0.25.0 | `bafybeif5c657r3ixuosbyihtsdzr2tqifikxgy5e6t7ur2jmhtiolina3m` |
| agent/fetchai/my_first_aea/0.27.0 | `bafybeicrgya4gln4lqr3ba76t2cuyik37lcgr64kzna2fkoseseobytaa4` |
| agent/open_aea/gym_aea/0.1.0 | `bafybeibyyl4wtnrfxeoed3kjnlftphkcikdqrgf76u34v4wbvwgsqfqrgy` |
| agent/open_aea/http_echo/0.1.0 | `bafybeie6dxx5zbu6bz7at7kqj3thjvvzucj45f3tksbio5dg23ywsbb2ty` |
| agent/open_aea/my_first_aea/0.1.0 | `bafybeibv7nlyxldyj5ntivsu74ylul4dltpfvkfa46k2pbveetfpkvz4jm` |
| connection/fetchai/local/0.20.0 | `bafybeigukufpgy2sdkv5qqde47dhigbjitxcrxwg6sl6unlpbc7wbxqyhm` |
| connection/valory/http_client/0.23.0 | `bafybeifgeqgryx6b3s6eseyzyezygmeitcpt3tkor2eiycozoi6clgdrny` |
| connection/valory/test_libp2p/0.1.0 | `bafybeih4vz7pprbjhe5g4tnf52ttkooii66woxbhifjc7wk5xdt6b6asiu` |
| protocol/fetchai/tac/1.0.0 | `bafybeiaukfwe7wbpikztprlmrfpphsxqpdzgamkbhvqyz54tl3k73kzsvi` |
| skill/fetchai/erc1155_client/0.28.0 | `bafybeibffkywiuz5gwm6yn4v2fhkz35i77zl5ya4tzq4wksvga2mvkeojm` |
| skill/fetchai/erc1155_deploy/0.30.0 | `bafybeif6dmam4pvsdesvgb6n3ga4uf7dxikaynbqomxpswmhqlvcuz7vti` |
| skill/fetchai/error/0.17.0 | `bafybeignei6feootyjzrqdt5j5yx7r4nrzuy6tdgdgsmrncldt5bud2dri` |
| skill/fetchai/fipa_dummy_buyer/0.2.0 | `bafybeid7rzqruvc3fkesueig2mbzy2qsfplieircyjzwbdl7c6q5eauiky` |
| skill/fetchai/generic_buyer/0.26.0 | `bafybeiebwhfzs7vbdrnm7cqu5dc4r3wqdaeirmps5pfwexjd3ms5ss7xk4` |
| skill/fetchai/generic_seller/0.27.0 | `bafybeiapnkdtn3qrh36cxpbhalv2yaunnauieo7sxori46a7ohsp7xuzlq` |
| skill/fetchai/gym/0.20.0 | `bafybeie7y2fsxfuhsqxqcaluo5exskmrm5q3a6e2hfcskcuvzvxjjhijh4` |
| skill/fetchai/http_echo/0.20.0 | `bafybeicfiri2juaqh3azeit3z3rf44kgxdo6oj4lgxjgvnowq6m7j47qrm` |
| skill/fetchai/erc1155_client/0.28.0 | `bafybeiauu446slcix3khzdqlgbt5ab323ik5fc3s7s4lxoanecrewfktju` |
| skill/fetchai/erc1155_deploy/0.30.0 | `bafybeifgsf5wp6lb6ztkf7orbhv2wc7b4mrxosgyt6yrnjclmssmsqru2e` |
| skill/fetchai/error/0.17.0 | `bafybeicboomvykqhel3otyv4qg5t3hzpo6kmn5bk4ljluithhuieu7flsm` |
| skill/fetchai/fipa_dummy_buyer/0.2.0 | `bafybeidgso7lo5ay44mbxsp3lxilrgeek3ye44e6wus2ayq6kyxfvc3vjm` |
| skill/fetchai/generic_buyer/0.26.0 | `bafybeif56kwbxbtuhjzd7dohivfdzlkvgprnugymlyizazudzkded3nblm` |
| skill/fetchai/generic_seller/0.27.0 | `bafybeic6sgtjyd5j4xqwuruijtqnl22y3sfdbf3mnrkchu2x4bx7eo2t6e` |
| skill/fetchai/task_test_skill/0.1.0 | `bafybeidv77u2xl52mnxakwvh7fuh46aiwfpteyof4eaptfd4agoi6cdble` |
| agent/fetchai/error_test/0.1.0 | `bafybeiecm675ndzbh35jkejtxn4ughoutztltjhgwzfbp57okabedjmnpq` |
| agent/fetchai/gym_aea/0.25.0 | `bafybeibzn3qomqmkaksgpd3gn6aijffvvw7rojswhoytiovohuc737fvfm` |
| agent/fetchai/my_first_aea/0.27.0 | `bafybeiejpnatbwp7zlyqazflzexm6jboahy7w7gtrn5oi6ubwiu7jgwzom` |
| agent/open_aea/gym_aea/0.1.0 | `bafybeietomk7c6dn6gvgix4s3jfzbrqjqzday6lofbk7wmkczhtgrijvmy` |
| agent/open_aea/http_echo/0.1.0 | `bafybeigeufwgu6cxjcvxsks2j4mjk6kir7vnjgr2wfbytqlztqezkzijwy` |
| agent/open_aea/my_first_aea/0.1.0 | `bafybeiaf6fgfmljz6pl7q6zfs3lhqmqbzydlqcen3qek5jjly77vhjowra` |
2 changes: 1 addition & 1 deletion packages/packages.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"connection/valory/p2p_libp2p_client/0.1.0": "bafybeid3xg5k2ol5adflqloy75ibgljmol6xsvzvezebsg7oudxeeolz7e",
"connection/valory/p2p_libp2p_mailbox/0.1.0": "bafybeiecclc65ogngs3piaxpwhiyl77mlpqun5ejlyv4kamwzrrh746guq",
"connection/fetchai/local/0.20.0": "bafybeiema4rnxi54luhzbrccb27pfrwlohemka45eqf4nidgmtkwwmxeyi",
"connection/valory/http_client/0.23.0": "bafybeih5vzo22p2umhqo52nzluaanxx7kejvvpcpdsrdymckkyvmsim6gm",
"connection/valory/http_client/0.23.0": "bafybeihi772xgzpqeipp3fhmvpct4y6e6tpjp4sogwqrnf3wqspgeilg4u",
"connection/valory/test_libp2p/0.1.0": "bafybeid4uexpzjgb3m6npbekohqayn2oukf3fershneha2dptmwtkayxza",
"skill/fetchai/echo/0.19.0": "bafybeicoawiackcbgqo3na3e56tpdc62atag4yxknur77py37caqq4mmya",
"skill/fetchai/error_test_skill/0.1.0": "bafybeihsbtlpe7h6fsvoxban5rilkmwviwkokul5cqym6atoolirontiyu",
Expand Down
23 changes: 16 additions & 7 deletions packages/valory/connections/http_client/connection.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------------
#
# Copyright 2021-2022 Valory AG
# Copyright 2021-2024 Valory AG
# Copyright 2018-2021 Fetch.AI Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -17,7 +17,9 @@
# limitations under the License.
#
# ------------------------------------------------------------------------------

"""HTTP client connection and channel."""

import asyncio
import email
import logging
Expand All @@ -30,6 +32,7 @@

import aiohttp
import certifi # pylint: disable=wrong-import-order
from aiohttp import ClientTimeout
from aiohttp.client_reqrep import ClientResponse # pylint: disable=wrong-import-order
from multidict import ( # pylint: disable=wrong-import-order
CIMultiDict,
Expand Down Expand Up @@ -107,7 +110,6 @@ def role_from_first_message( # pylint: disable=unused-argument
class HTTPClientAsyncChannel: # pylint: disable=too-many-instance-attributes
"""A wrapper for a HTTPClient."""

DEFAULT_TIMEOUT = 300 # default timeout in seconds
DEFAULT_EXCEPTION_CODE = (
600 # custom code to indicate there was exception during request
)
Expand All @@ -117,19 +119,22 @@ def __init__(
agent_address: Address,
address: str,
port: int,
timeout: int,
connection_id: PublicId,
):
"""
Initialize an http client channel.
:param agent_address: the address of the agent.
:param address: server hostname / IP address
:param port: server port number
:param connection_id: the id of the connection
:param address: server hostname / IP address.
:param port: server port number.
:param timeout: the time to wait for a response.
:param connection_id: the id of the connection.
"""
self.agent_address = agent_address
self.address = address
self.port = port
self.timeout = timeout
self.connection_id = connection_id
self._dialogues = HttpDialogues()

Expand Down Expand Up @@ -189,7 +194,7 @@ async def _http_request_task(self, request_envelope: Envelope) -> None:
try:
resp = await asyncio.wait_for(
self._perform_http_request(request_http_message),
timeout=self.DEFAULT_TIMEOUT,
timeout=self.timeout,
)
envelope = self.to_envelope(
request_http_message,
Expand Down Expand Up @@ -231,7 +236,8 @@ async def _perform_http_request(
)
else:
headers = None
async with aiohttp.ClientSession() as session:
session_timeout = ClientTimeout(self.timeout)
async with aiohttp.ClientSession(timeout=session_timeout) as session:
async with session.request(
method=request_http_message.method,
url=request_http_message.url,
Expand Down Expand Up @@ -373,6 +379,7 @@ async def disconnect(self) -> None:
class HTTPClientConnection(Connection):
"""Proxy to the functionality of the web client."""

DEFAULT_TIMEOUT = 300 # default timeout in seconds
connection_id = PUBLIC_ID

def __init__(self, **kwargs: Any) -> None:
Expand All @@ -384,12 +391,14 @@ def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
host = cast(str, self.configuration.config.get("host"))
port = cast(int, self.configuration.config.get("port"))
timeout = int(self.configuration.config.get("timeout", self.DEFAULT_TIMEOUT))
if host is None or port is None: # pragma: nocover
raise ValueError("host and port must be set!")
self.channel = HTTPClientAsyncChannel(
self.address,
host,
port,
timeout,
connection_id=self.connection_id,
)

Expand Down
3 changes: 2 additions & 1 deletion packages/valory/connections/http_client/connection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ aea_version: '>=1.0.0, <2.0.0'
fingerprint:
README.md: bafybeigqhgnqpgi22gfxqvsgbmrjdkrklpgu2m4px6zwb7bhvy3gkkyetu
__init__.py: bafybeieh7rjtg22qukaznxzhadreuxhyfeamj3lcluxtcbfiexktue2nim
connection.py: bafybeid7zjeo4hhkkw7ipodjcvkjac7b2xqt6ktmh5yxafgq5zldo5h2ta
connection.py: bafybeiephqitgfzzautuegh2fpp5yezglkri4gj646glu3erokbfgsupzu
tests/__init__.py: bafybeiak7fbussk7n5zl2o4trefz7whvc3ae3k2vrryhb6cettb2qskjau
tests/test_http_client.py: bafybeic4k7g6k4y5axh3pgpz25j7drghqxl5gblczux2sxtms54ududepe
fingerprint_ignore_patterns: []
Expand All @@ -20,6 +20,7 @@ class_name: HTTPClientConnection
config:
host: 127.0.0.1
port: 8000
timeout: 300
excluded_protocols: []
restricted_to_protocols:
- valory/http:1.0.0
Expand Down

0 comments on commit 0aa9df3

Please sign in to comment.