diff --git a/CHANGELOG.md b/CHANGELOG.md index 481a798..d188e8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### v1.17.2 +- Added configurable request timeout to `ParclLabsClient`. Defaults to 10s connect / 90s read. Customizable via the `timeout` parameter on client instantiation. + ### v1.17.1 - Fix mutable default parameters in `property.search.retrieve` and `property_v2.search.retrieve` functions. diff --git a/parcllabs/__version__.py b/parcllabs/__version__.py index 45c7fd1..99f794b 100644 --- a/parcllabs/__version__.py +++ b/parcllabs/__version__.py @@ -1 +1 @@ -VERSION = "1.17.1" +VERSION = "1.17.2" diff --git a/parcllabs/parcllabs_client.py b/parcllabs/parcllabs_client.py index 749818c..55ae83d 100644 --- a/parcllabs/parcllabs_client.py +++ b/parcllabs/parcllabs_client.py @@ -44,6 +44,7 @@ def __init__( api_url: str = api_base, limit: int | None = None, num_workers: int | None = None, + timeout: tuple[float, float] | float | None = (10, 90), ) -> None: if not api_key: raise ValueError(NO_API_KEY_ERROR) @@ -53,6 +54,7 @@ def __init__( self.account_info = {"est_session_credits_used": 0} self.num_workers = num_workers self.limit = limit + self.timeout = timeout self._initialize_services() diff --git a/parcllabs/services/parcllabs_service.py b/parcllabs/services/parcllabs_service.py index 3a931f8..9138b67 100644 --- a/parcllabs/services/parcllabs_service.py +++ b/parcllabs/services/parcllabs_service.py @@ -94,8 +94,13 @@ def _make_request(self, method: str, url: str, **kwargs: dict) -> requests.Respo if method == GET_METHOD: params = kwargs.get("params", {}) kwargs["params"] = params - - response = requests.request(method, url, headers=self.headers, **kwargs) # noqa: S113 + response = requests.request( + method, + url, + headers=self.headers, + timeout=self.client.timeout, + **kwargs, + ) response.raise_for_status() except requests.exceptions.HTTPError: self.error_handling(response) @@ -175,8 +180,6 @@ def _fetch( data = {"parcl_id": [str(pid) for pid in parcl_ids], **params} params = {"limit": params["limit"]} if params.get("limit") else {} - print(f"data: {data}, params: {params}") - return self._fetch_post(params, data, auto_paginate) if params.get("limit"): params["limit"] = self._validate_limit(GET_METHOD, params["limit"]) diff --git a/tests/test_parcl_labs_service.py b/tests/test_parcl_labs_service.py index c979e33..d9ba0f2 100644 --- a/tests/test_parcl_labs_service.py +++ b/tests/test_parcl_labs_service.py @@ -11,6 +11,7 @@ def __init__(self) -> None: self.api_url = "https://api.example.com/" self.api_key = "test_api_key" self.account_info = {"est_session_credits_used": 0} + self.timeout = (10, 90) @pytest.fixture diff --git a/tests/test_price_feed_service.py b/tests/test_price_feed_service.py index 476a3ac..6b49790 100644 --- a/tests/test_price_feed_service.py +++ b/tests/test_price_feed_service.py @@ -18,6 +18,7 @@ def service(self) -> ParclLabsService: mock_client.api_key = "test_api_key" mock_client.turbo_mode = False mock_client.estimated_session_credit_usage = 0 + mock_client.timeout = (10, 90) return ParclLabsService("/test", mock_client) def test_init(self, service: ParclLabsService) -> None: @@ -53,6 +54,7 @@ def test_make_request_get(self, mock_request: Mock, service: ParclLabsService) - "https://api.example.com/test", headers=service.headers, params={}, + timeout=(10, 90), ) @patch("requests.request") @@ -71,6 +73,7 @@ def test_make_request_post(self, mock_request: Mock, service: ParclLabsService) "https://api.example.com/test", headers=service.headers, json={"data": "test"}, + timeout=(10, 90), ) @patch("requests.request")