Merge pull request #234 from j-sperling/j-sperling/fix/bird-x-engagement-validation
fix(bird_x): skip all-None engagement dicts
This commit is contained in:
@@ -460,7 +460,7 @@ def parse_bird_response(response: Dict[str, Any], query: str = "") -> List[Dict[
|
|||||||
"url": url,
|
"url": url,
|
||||||
"author_handle": author_handle.lstrip("@"),
|
"author_handle": author_handle.lstrip("@"),
|
||||||
"date": date,
|
"date": date,
|
||||||
"engagement": engagement,
|
"engagement": engagement if any(v is not None for v in engagement.values()) else None,
|
||||||
"why_relevant": "", # Bird doesn't provide relevance explanations
|
"why_relevant": "", # Bird doesn't provide relevance explanations
|
||||||
"relevance": _compute_relevance(query, str(tweet.get("text", ""))) if query else 0.7,
|
"relevance": _compute_relevance(query, str(tweet.get("text", ""))) if query else 0.7,
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-1
@@ -175,7 +175,7 @@ class TestVendoredBirdRuntime(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
items = parse_bird_response(tweets, "test query")
|
items = parse_bird_response(tweets, "test query")
|
||||||
self.assertIsNone(items[0]["engagement"]["likes"])
|
self.assertIsNone(items[0]["engagement"])
|
||||||
|
|
||||||
def test_fallback_to_second_key(self):
|
def test_fallback_to_second_key(self):
|
||||||
tweets = [
|
tweets = [
|
||||||
@@ -203,6 +203,32 @@ class TestVendoredBirdRuntime(unittest.TestCase):
|
|||||||
items = parse_bird_response(tweets, "test query")
|
items = parse_bird_response(tweets, "test query")
|
||||||
self.assertEqual(0, items[0]["engagement"]["likes"])
|
self.assertEqual(0, items[0]["engagement"]["likes"])
|
||||||
|
|
||||||
|
def test_engagement_none_when_all_fields_missing(self):
|
||||||
|
"""All-None engagement dict should become None, not propagate."""
|
||||||
|
tweets = [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"text": "test",
|
||||||
|
"permanent_url": "https://x.com/u/status/1",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
items = parse_bird_response(tweets, "test query")
|
||||||
|
self.assertIsNone(items[0]["engagement"])
|
||||||
|
|
||||||
|
def test_engagement_preserved_when_any_field_present(self):
|
||||||
|
"""Engagement dict kept when at least one metric exists."""
|
||||||
|
tweets = [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"text": "test",
|
||||||
|
"permanent_url": "https://x.com/u/status/1",
|
||||||
|
"likeCount": 5,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
items = parse_bird_response(tweets, "test query")
|
||||||
|
self.assertIsNotNone(items[0]["engagement"])
|
||||||
|
self.assertEqual(5, items[0]["engagement"]["likes"])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user