"""NVIDIA — corporate blog RSS + technical (developer) blog Atom feed → ANNOUNCEMENT events.""" from __future__ import annotations from aiatlas.registry import org_ref from aiatlas.sdk.connector import BaseConnector, Parsed, RunContext from aiatlas.sdk.facts import Facts, Target from aiatlas.sdk.fetch import FetchResult from ._common import announcement_events BLOG_RSS = "https://blogs.nvidia.com/feed/" DEVELOPER_RSS = "https://developer.nvidia.com/blog/feed" class NvidiaConnector(BaseConnector): name = "nvidia" label = "NVIDIA — blog & technical blog feeds" description = "NVIDIA corporate blog (RSS) and NVIDIA Technical Blog (Atom): announcements, model and platform releases." source_key = "blogs.nvidia.com" version = "1" parser_version = "1" interval_seconds = 7200 min_interval_seconds = 3600 rate_per_min = 10 tier = 1 priority = 1 expected_min_records = 1 concurrency = 2 async def discover(self, ctx: RunContext) -> list[Target]: return [ Target(url=BLOG_RSS, doc_type="feed", key="blog", min_bytes=1000), Target(url=DEVELOPER_RSS, doc_type="feed", key="developer", min_bytes=1000), ] async def extract(self, ctx: RunContext, target: Target, res: FetchResult, parsed: Parsed) -> Facts: facts = Facts() org = org_ref("nvidia") facts.entities.append(org) if parsed.kind != "feed": return facts source = "developer.nvidia.com/blog" if target.key == "developer" else "blogs.nvidia.com" announcement_events(facts, org, parsed.feed_items, source_name=source, max_follow=10) facts.document_title = "NVIDIA Technical Blog" if target.key == "developer" else "NVIDIA Blog" facts.document_entity = org return facts CONNECTORS = [NvidiaConnector]