File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1616def _validate_non_negative_real (value : float , * , field_name : str ) -> None :
1717 if isinstance (value , bool ) or not isinstance (value , Real ):
1818 raise HyperbrowserError (f"{ field_name } must be a number" )
19- if not math .isfinite (float (value )):
19+ try :
20+ is_finite = math .isfinite (value )
21+ except (TypeError , ValueError , OverflowError ):
22+ is_finite = False
23+ if not is_finite :
2024 raise HyperbrowserError (f"{ field_name } must be finite" )
2125 if value < 0 :
2226 raise HyperbrowserError (f"{ field_name } must be non-negative" )
Original file line number Diff line number Diff line change @@ -10,7 +10,11 @@ def validate_timeout_seconds(timeout: Optional[float]) -> None:
1010 return
1111 if isinstance (timeout , bool ) or not isinstance (timeout , Real ):
1212 raise HyperbrowserError ("timeout must be a number" )
13- if not math .isfinite (float (timeout )):
13+ try :
14+ is_finite = math .isfinite (timeout )
15+ except (TypeError , ValueError , OverflowError ):
16+ is_finite = False
17+ if not is_finite :
1418 raise HyperbrowserError ("timeout must be finite" )
1519 if timeout < 0 :
1620 raise HyperbrowserError ("timeout must be non-negative" )
Original file line number Diff line number Diff line change 11import asyncio
22import math
3+ from fractions import Fraction
34
45import pytest
56
@@ -60,3 +61,13 @@ def test_sync_client_rejects_non_finite_timeout(invalid_timeout: float):
6061def test_async_client_rejects_non_finite_timeout (invalid_timeout : float ):
6162 with pytest .raises (HyperbrowserError , match = "timeout must be finite" ):
6263 AsyncHyperbrowser (api_key = "test-key" , timeout = invalid_timeout )
64+
65+
66+ def test_sync_client_rejects_overflowing_real_timeout ():
67+ with pytest .raises (HyperbrowserError , match = "timeout must be finite" ):
68+ Hyperbrowser (api_key = "test-key" , timeout = Fraction (10 ** 1000 , 1 ))
69+
70+
71+ def test_async_client_rejects_overflowing_real_timeout ():
72+ with pytest .raises (HyperbrowserError , match = "timeout must be finite" ):
73+ AsyncHyperbrowser (api_key = "test-key" , timeout = Fraction (10 ** 1000 , 1 ))
Original file line number Diff line number Diff line change 11import asyncio
22import math
3+ from fractions import Fraction
34
45import pytest
56
@@ -785,6 +786,15 @@ def test_polling_helpers_validate_retry_and_interval_configuration():
785786 retry_delay_seconds = 0.0 ,
786787 )
787788
789+ with pytest .raises (HyperbrowserError , match = "poll_interval_seconds must be finite" ):
790+ poll_until_terminal_status (
791+ operation_name = "invalid-poll-interval-overflowing-real" ,
792+ get_status = lambda : "completed" ,
793+ is_terminal_status = lambda value : value == "completed" ,
794+ poll_interval_seconds = Fraction (10 ** 1000 , 1 ), # type: ignore[arg-type]
795+ max_wait_seconds = 1.0 ,
796+ )
797+
788798 async def validate_async_operation_name () -> None :
789799 with pytest .raises (HyperbrowserError , match = "operation_name must not be empty" ):
790800 await poll_until_terminal_status_async (
You can’t perform that action at this time.
0 commit comments