Skip to content

Commit 91f7076

Browse files
committed
handle int values for required property
1 parent 4ea0f19 commit 91f7076

File tree

2 files changed

+39
-28
lines changed

2 files changed

+39
-28
lines changed

src/neo4j_graphrag/experimental/components/schema.py

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -693,33 +693,26 @@ def _filter_properties_required_field(
693693
prop_name = prop.get("name", "unknown")
694694
node_label = node_type.get("label", "unknown")
695695

696-
if isinstance(required_value, str):
697-
if required_value.lower() in ("true", "yes", "1"):
698-
prop["required"] = True
699-
logging.info(
700-
f"Converted 'required' value {required_value} to True "
701-
f"for property '{prop_name}' on node '{node_label}'"
702-
)
703-
elif required_value.lower() in ("false", "no", "0"):
704-
prop["required"] = False
705-
logging.info(
706-
f"Converted 'required' value '{required_value}' to False "
707-
f"for property '{prop_name}' on node '{node_label}' "
708-
)
709-
# Unknown string values
710-
else:
711-
logging.info(
712-
f"Removing unrecognized 'required' value '{required_value}' "
713-
f"for property '{prop_name}' on node '{node_label}'. "
714-
f"Using default (False) " # TODO: Not sure if we have to convert it to the default value - double check!
715-
)
716-
prop.pop("required", None)
696+
# Convert to string to handle int values like 1 or 0
697+
required_str = str(required_value).lower()
698+
699+
if required_str in ("true", "yes", "1"):
700+
prop["required"] = True
701+
logging.info(
702+
f"Converted 'required' value '{required_value}' to True "
703+
f"for property '{prop_name}' on node '{node_label}'"
704+
)
705+
elif required_str in ("false", "no", "0"):
706+
prop["required"] = False
707+
logging.info(
708+
f"Converted 'required' value '{required_value}' to False "
709+
f"for property '{prop_name}' on node '{node_label}'"
710+
)
717711
else:
718-
# Non-string, non-boolean - remove
719712
logging.info(
720-
f"Removing invalid 'required' value '{required_value}' (type: {type(required_value).__name__}) "
713+
f"Removing unrecognized 'required' value '{required_value}' "
721714
f"for property '{prop_name}' on node '{node_label}'. "
722-
f"Using default (False). "
715+
f"Using default (False)."
723716
)
724717
prop.pop("required", None)
725718

@@ -743,7 +736,7 @@ def _enforce_required_for_constraint_properties(
743736
if label and prop:
744737
constraint_props.setdefault(label, set()).add(prop)
745738

746-
# Skop node_types without constraints
739+
# Skip node_types without constraints
747740
for node_type in node_types:
748741
label = node_type.get("label")
749742
if label not in constraint_props:

tests/unit/experimental/components/test_schema.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,16 +1536,34 @@ def test_filter_properties_required_field_invalid_string(
15361536
assert "required" not in result[0]["properties"][1]
15371537

15381538

1539-
def test_filter_properties_required_field_invalid_type(
1539+
def test_filter_properties_required_field_int_values(
15401540
schema_from_text: SchemaFromTextExtractor,
15411541
) -> None:
1542+
"""Test that int values like 1 and 0 are converted to True/False."""
15421543
node_types = [
15431544
{
15441545
"label": "Person",
15451546
"properties": [
15461547
{"name": "prop1", "type": "STRING", "required": 1},
1547-
{"name": "prop2", "type": "STRING", "required": []},
1548-
{"name": "prop3", "type": "STRING", "required": {"value": True}},
1548+
{"name": "prop2", "type": "STRING", "required": 0},
1549+
],
1550+
}
1551+
]
1552+
result = schema_from_text._filter_properties_required_field(node_types)
1553+
assert result[0]["properties"][0]["required"] is True
1554+
assert result[0]["properties"][1]["required"] is False
1555+
1556+
1557+
def test_filter_properties_required_field_invalid_type(
1558+
schema_from_text: SchemaFromTextExtractor,
1559+
) -> None:
1560+
"""Test that unrecognized types like list and dict are removed."""
1561+
node_types = [
1562+
{
1563+
"label": "Person",
1564+
"properties": [
1565+
{"name": "prop1", "type": "STRING", "required": []},
1566+
{"name": "prop2", "type": "STRING", "required": {"value": True}},
15491567
],
15501568
}
15511569
]

0 commit comments

Comments
 (0)