diff --git a/pyproject.toml b/pyproject.toml index ae40ebc..6ded982 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ version = "0.1.3" description = "TLS-fingerprinting backends (curl_cffi / noble_tls) for aioweb via one injectable TLSSession, config-free, installable." requires-python = ">=3.10" dependencies = [ - "aioweb @ git+ssh://git@git.rethinkstudios.io/rethink-public/aioweb.git@v0.1.0", + "aioweb @ git+ssh://git@git.rethinkstudios.io/rethink-public/aioweb.git@v0.1.5", ] [project.optional-dependencies] diff --git a/src/aioweb_tls/backends.py b/src/aioweb_tls/backends.py index 475d45a..686efdc 100644 --- a/src/aioweb_tls/backends.py +++ b/src/aioweb_tls/backends.py @@ -60,7 +60,12 @@ def _coerce_timeout(value): def _jar_to_dict(session): - """best-effort map of a requests-style cookie jar on session to a plain dict""" + """best-effort map of a requests-style cookie jar on session to a plain dict + + intentionally broad: this feeds preview() only, the two backends expose differently- + shaped jars, and a cookie read must never crash a request — so any jar that doesn't + iterate cleanly degrades to {} rather than raising. + """ jar = getattr(session, "cookies", None) if not jar: return {} @@ -111,7 +116,12 @@ class CurlCffi: response = await session.request(method, url, impersonate=impersonate, **kwargs) except aiohttp.ClientError: raise - except Exception as error: + except asyncio.TimeoutError: + raise + except OSError as error: + # curl_cffi's RequestException subclasses OSError; translate the native + # network error into aiohttp.ClientError. narrowed from a bare Exception so a + # real bug (AttributeError/TypeError) isn't laundered into 'client error' raise _as_client_error(error, "curl_cffi") from error content = response.content if response.content is not None else b"" return Response( @@ -230,7 +240,11 @@ class Noble: response = await session.execute_request(method=method.upper(), url=url, **kwargs) except aiohttp.ClientError: raise - except Exception as error: + except asyncio.TimeoutError: + raise + except OSError as error: + # noble_tls's TLSClientException subclasses IOError (== OSError); translate + # the native network error, narrowed from bare Exception so a real bug surfaces raise _as_client_error(error, "noble_tls") from error content = getattr(response, "content", None) if content is None: