#!/usr/bin/env python3 """Test script for the improved get_top_packages_by_downloads function.""" import asyncio from pypi_query_mcp.tools.download_stats import get_top_packages_by_downloads async def test_improved(): try: result = await get_top_packages_by_downloads("month", 10) print("✅ Success! Result keys:", list(result.keys())) print(f"Number of packages returned: {len(result.get('top_packages', []))}") print(f"Data source: {result.get('data_source')}") print(f"Methodology: {result.get('methodology')}") print("\nTop 5 packages:") for i, pkg in enumerate(result.get("top_packages", [])[:5]): downloads = pkg.get("downloads", 0) stars = pkg.get("github_stars", "N/A") estimated = "(estimated)" if pkg.get("estimated", False) else "(real)" github_enhanced = " 🌟" if pkg.get("github_enhanced", False) else "" print( f"{i + 1}. {pkg.get('package', 'N/A')} - {downloads:,} downloads {estimated}{github_enhanced}" ) if stars != "N/A": print( f" GitHub: {stars:,} stars, {pkg.get('category', 'N/A')} category" ) # Test different periods print("\n--- Testing different periods ---") for period in ["day", "week", "month"]: result = await get_top_packages_by_downloads(period, 3) top_3 = result.get("top_packages", []) print( f"{period}: {len(top_3)} packages, avg downloads: {sum(p.get('downloads', 0) for p in top_3) // max(len(top_3), 1):,}" ) print("\n--- Testing different limits ---") for limit in [5, 20, 50]: result = await get_top_packages_by_downloads("month", limit) packages = result.get("top_packages", []) real_count = len([p for p in packages if not p.get("estimated", False)]) print( f"Limit {limit}: {len(packages)} packages returned, {real_count} with real stats" ) except Exception as e: print(f"❌ Error: {e}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(test_improved())