"""Basic usage examples for nvdb-py.""" import asyncio from nvd import NVDClient async def main() -> None: """Run basic examples.""" async with NVDClient() as client: print("=" * 80) print("Example 1: Get a specific CVE") print("=" * 80) cve = await client.cve.get_cve("CVE-2021-44228") print(f"CVE ID: {cve.id}") print(f"Published: {cve.published}") print(f"Status: {cve.vulnStatus}") print(f"CVSS v3 Score: {cve.cvss_v3_score}") print(f"Description: {cve.description[:200]}...") print() print("=" * 80) print("Example 2: Search CVEs by keyword (limited to 5 results)") print("=" * 80) count = 0 async for cve in client.cve.search_cves(keyword="sql injection"): print(f"{cve.id}: {cve.description[:100]}...") count += 1 if count >= 5: break print() print("=" * 80) print("Example 3: Get CVEs with CRITICAL severity (limited to 5)") print("=" * 80) count = 0 async for cve in client.cve.search_cves(cvss_v3_severity="CRITICAL"): score = cve.cvss_v3_score or "N/A" print(f"{cve.id} - Score: {score} - {cve.description[:80]}...") count += 1 if count >= 5: break print() print("=" * 80) print("Example 4: Search CPEs by keyword") print("=" * 80) count = 0 async for cpe in client.cpe.search_cpes(keyword="apache"): print(f"{cpe.cpeName}") print(f" Title: {cpe.title}") print(f" Deprecated: {cpe.deprecated}") count += 1 if count >= 5: break print() print("=" * 80) print("Example 5: Get CVE change history") print("=" * 80) history = await client.history.get_cve_history("CVE-2021-44228") print(f"Found {len(history)} change events for CVE-2021-44228") for change in history[:3]: print(f" {change.eventName} at {change.created}") print() if __name__ == "__main__": asyncio.run(main())