Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/anthropic/types/beta/parsed_beta_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,6 @@ class ParsedBetaMessage(BetaMessage, Generic[ResponseFormatT]):
@property
def parsed_output(self) -> Optional[ResponseFormatT]:
for content in self.content:
if content.type == "text" and content.parsed_output:
if content.type == "text" and content.parsed_output is not None:
return content.parsed_output
return None
2 changes: 1 addition & 1 deletion src/anthropic/types/parsed_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,6 @@ class ParsedMessage(Message, Generic[ResponseFormatT]):
@property
def parsed_output(self) -> Optional[ResponseFormatT]:
for content in self.content:
if content.type == "text" and content.parsed_output:
if content.type == "text" and content.parsed_output is not None:
return content.parsed_output
return None
46 changes: 46 additions & 0 deletions tests/lib/_parse/test_falsy_parsed_output.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from __future__ import annotations

from typing import Any

import pytest

from anthropic.types.parsed_message import ParsedMessage, ParsedTextBlock
from anthropic.types.beta.parsed_beta_message import ParsedBetaMessage, ParsedBetaTextBlock


@pytest.mark.parametrize("value", [False, 0, "", [], {}])
def test_parsed_message_returns_falsy_output(value: Any) -> None:
message = ParsedMessage.construct(
content=[
ParsedTextBlock.construct(type="text", text="unparsed", parsed_output=None),
ParsedTextBlock.construct(type="text", text="parsed", parsed_output=value),
]
)

assert type(message.parsed_output) is type(value)
assert message.parsed_output == value


@pytest.mark.parametrize("value", [False, 0, "", [], {}])
def test_parsed_beta_message_returns_falsy_output(value: Any) -> None:
message = ParsedBetaMessage.construct(
content=[
ParsedBetaTextBlock.construct(type="text", text="unparsed", parsed_output=None),
ParsedBetaTextBlock.construct(type="text", text="parsed", parsed_output=value),
]
)

assert type(message.parsed_output) is type(value)
assert message.parsed_output == value


def test_parsed_output_remains_none_when_absent() -> None:
message = ParsedMessage.construct(
content=[ParsedTextBlock.construct(type="text", text="unparsed", parsed_output=None)]
)
beta_message = ParsedBetaMessage.construct(
content=[ParsedBetaTextBlock.construct(type="text", text="unparsed", parsed_output=None)]
)

assert message.parsed_output is None
assert beta_message.parsed_output is None