From e421f76e7a3c8d8ad949c2f774daeba08688463a Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Wed, 23 Jul 2025 20:57:20 -0400 Subject: [PATCH 1/3] fix logging --- stagehand/page.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/stagehand/page.py b/stagehand/page.py index 82946d45..804ddc2c 100644 --- a/stagehand/page.py +++ b/stagehand/page.py @@ -16,7 +16,7 @@ ObserveOptions, ObserveResult, ) -from .types import DefaultExtractSchema, EmptyExtractSchema +from .types import DefaultExtractSchema _INJECTION_SCRIPT = None @@ -361,17 +361,12 @@ async def extract( processed_data_payload = result_dict if schema_to_validate_with and isinstance(processed_data_payload, dict): try: - # For extract with no params - if not options_obj: - validated_model = EmptyExtractSchema.model_validate( - processed_data_payload - ) - processed_data_payload = validated_model - else: - validated_model = schema_to_validate_with.model_validate( - processed_data_payload - ) - processed_data_payload = validated_model + validated_model = schema_to_validate_with.model_validate( + processed_data_payload + ) + processed_data_payload = ( + validated_model # Payload is now the Pydantic model instance + ) except Exception as e: self._stagehand.logger.error( f"Failed to validate extracted data against schema {schema_to_validate_with.__name__}: {e}. Keeping raw data dict in .data field." @@ -606,7 +601,7 @@ async def sweep_stalled_requests(): meta.pop(request_id, None) self._stagehand.logger.debug( "⏳ forcing completion of stalled iframe document", - extra={"url": request_meta["url"][:120]}, + auxiliary={"url": request_meta["url"][:120]}, ) maybe_quiet() @@ -620,7 +615,7 @@ async def timeout_guard(): if len(inflight) > 0: self._stagehand.logger.debug( "⚠️ DOM-settle timeout reached – network requests still pending", - extra={"count": len(inflight)}, + auxiliary={"count": len(inflight)}, ) resolve_done() From f5634ced2da5672504f95d47ae70ff2fe0e4a42c Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Wed, 23 Jul 2025 20:59:21 -0400 Subject: [PATCH 2/3] update --- stagehand/page.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/stagehand/page.py b/stagehand/page.py index 804ddc2c..64b0fe3f 100644 --- a/stagehand/page.py +++ b/stagehand/page.py @@ -16,7 +16,7 @@ ObserveOptions, ObserveResult, ) -from .types import DefaultExtractSchema +from .types import DefaultExtractSchema, EmptyExtractSchema _INJECTION_SCRIPT = None @@ -361,12 +361,17 @@ async def extract( processed_data_payload = result_dict if schema_to_validate_with and isinstance(processed_data_payload, dict): try: - validated_model = schema_to_validate_with.model_validate( - processed_data_payload - ) - processed_data_payload = ( - validated_model # Payload is now the Pydantic model instance - ) + # For extract with no params + if not options_obj: + validated_model = EmptyExtractSchema.model_validate( + processed_data_payload + ) + processed_data_payload = validated_model + else: + validated_model = schema_to_validate_with.model_validate( + processed_data_payload + ) + processed_data_payload = validated_model except Exception as e: self._stagehand.logger.error( f"Failed to validate extracted data against schema {schema_to_validate_with.__name__}: {e}. Keeping raw data dict in .data field." From e373c5a66f320fdb71ef9df261297d3cd80cb56d Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Wed, 23 Jul 2025 21:12:33 -0400 Subject: [PATCH 3/3] update changest --- .changeset/woodoo-frog-of-growth.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/woodoo-frog-of-growth.md diff --git a/.changeset/woodoo-frog-of-growth.md b/.changeset/woodoo-frog-of-growth.md new file mode 100644 index 00000000..f02d98b1 --- /dev/null +++ b/.changeset/woodoo-frog-of-growth.md @@ -0,0 +1,5 @@ +--- +"stagehand": patch +--- + +fix logging param name