fix: filter non-integer metadata from GitHub languages API response (#322)

PyGithub's get_languages() returns raw API JSON which in some environments
includes non-integer metadata keys (e.g., "url"), causing a TypeError in
sum(). Now filters to integer values only before calculating percentages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
yusyus
2026-03-26 23:44:52 +03:00
parent 336ab6aaac
commit d71c1d3aa3
4 changed files with 36 additions and 1 deletions

View File

@@ -230,6 +230,31 @@ class TestLanguageDetection(unittest.TestCase):
self.assertIn("languages", scraper.extracted_data)
self.assertEqual(scraper.extracted_data["languages"], {})
def test_extract_languages_filters_non_integer_metadata(self):
"""Test that non-integer metadata keys (e.g., 'url') are filtered out (#322)"""
config = {"repo": "xyflow/xyflow", "name": "xyflow", "github_token": None}
with patch("skill_seekers.cli.github_scraper.Github"):
scraper = self.GitHubScraper(config)
scraper.repo = Mock()
scraper.repo.get_languages.return_value = {
"TypeScript": 707330,
"Svelte": 95784,
"url": "https://api.github.com/repos/xyflow/xyflow/languages",
}
scraper._extract_languages()
self.assertIn("languages", scraper.extracted_data)
self.assertIn("TypeScript", scraper.extracted_data["languages"])
self.assertIn("Svelte", scraper.extracted_data["languages"])
self.assertNotIn("url", scraper.extracted_data["languages"])
# Percentages should be calculated only from real languages
ts_data = scraper.extracted_data["languages"]["TypeScript"]
total = 707330 + 95784
self.assertEqual(ts_data["percentage"], round(707330 / total * 100, 2))
class TestIssuesExtraction(unittest.TestCase):
"""Test GitHub Issues extraction (C1.7)"""