#!/usr/bin/env python3 """Fetch live GitHub repository stats via API and write to file. Evidence: This script makes a real HTTP request to GitHub's public API. """ import json import urllib.request import urllib.error from datetime import datetime def fetch_repo_stats(owner: str, repo: str) -> dict: """Fetch repository stats from GitHub API.""" url = f"https://api.github.com/repos/{owner}/{repo}" try: req = urllib.request.Request(url, headers={'User-Agent': 'spark-snippet'}) with urllib.request.urlopen(req, timeout=10) as response: data = json.loads(response.read().decode('utf-8')) return { 'name': data.get('name', repo), 'full_name': data.get('full_name', f'{owner}/{repo}'), 'description': data.get('description', ''), 'stars': data.get('stargazers_count', 0), 'forks': data.get('forks_count', 0), 'open_issues': data.get('open_issues_count', 0), 'html_url': data.get('html_url', ''), 'updated_at': data.get('updated_at', ''), } except urllib.error.HTTPError as e: return {'error': f"HTTP {e.code}: {e.reason}"} except urllib.error.URLError as e: return {'error': f"URL Error: {e.reason}"} def main(): # Test with a real, stable repository stats = fetch_repo_stats('python', 'cpython') output_path = '/root/.hermes/wizard-outputs/spark/github_stats.json' # Add metadata result = { 'fetched_at': datetime.utcnow().isoformat() + 'Z', 'artifact': '/root/.hermes/wizard-outputs/spark/github_stats.json', 'data': stats } with open(output_path, 'w') as f: json.dump(result, f, indent=2) print(f"Written to: {output_path}") print(f"Status: {'ERROR: ' + stats.get('error', '') if 'error' in stats else 'SUCCESS'}") if 'error' not in stats: print(f"Stars: {stats['stars']}") print(f"Forks: {stats['forks']}") print(f"Open Issues: {stats['open_issues']}") return result if __name__ == '__main__': main()