fastrag.ingestion.steps.fetching.youtube#
YouTube video fetching, and the iframe-embed discovery crawlers route through it.
YouTubeFetcher downloads one video (or just its audio track) with yt-dlp.
It is a normal Fetcher usable on its own, and the target of
route() on crawlers:
crawler = WebCrawler(url="https://example.com").route(
youtube_filter, YouTubeFetcher(audio_only=True)
)
Module Attributes
Matches any URL |
Functions
|
Absolute |
|
Fetch the page's |
|
The video id of a YouTube watch/embed/short/ |
Classes
|
Download one YouTube video, yielding its media bytes as a |
- fastrag.ingestion.steps.fetching.youtube.youtube_filter = <fastrag.ingestion.filters.url.URLFilter object>#
Matches any URL
YouTubeFetchercan download.- Parameters:
item (T_contra)
- Return type:
- fastrag.ingestion.steps.fetching.youtube.youtube_video_id(uri)[source]#
The video id of a YouTube watch/embed/short/
youtu.beURL, elseNone.
- class fastrag.ingestion.steps.fetching.youtube.YouTubeFetcher(*, url=None, audio_only=False, cache=None, policy=None, cache_validation_interval=None)[source]#
Bases:
FetcherDownload one YouTube video, yielding its media bytes as a
Source.Needs the “video” extra (
yt-dlp).- Parameters:
url (str | None)
audio_only (bool)
cache (CacheStore | Literal[False] | None)
policy (Policy | None)
cache_validation_interval (float | None)
- async targets(context)[source]#
The one video this fetcher targets.
- Parameters:
context (ExecutionContext)
- Return type:
- async evaluate_target(target, context)[source]#
Download the video, yielding its
Source.- Parameters:
target (str)
context (ExecutionContext)
- Return type:
- async evaluate(context)[source]#
Download the video, uncached.
- Parameters:
context (ExecutionContext)
- Return type:
- async is_source_modified(source_id, cached_etag, cached_last_modified, cached_content_hash)[source]#
Never: a video’s bytes are keyed by its id and do not change.
- property cache: CacheStore | Literal[False] | None#
Return the cache explicitly configured for this step.
- property config_hash: str#
A stable hash of this step’s class name and
config().Two identically configured steps of the same class hash equal; changing any declared config value changes the hash; the hash is stable across processes. Used as part of every cache id this step’s evaluation reads or writes.
- effective_policy(context)#
Resolve this step’s policy over the one inherited from
context.The step’s own explicitly-set fields take priority; everything else falls through to the pipeline (or enclosing router/aggregator) policy.
- Parameters:
context (ExecutionContext)
- Return type:
- event_name: str = 'Fetching'#
The stage this step’s work belongs to, e.g.
"Chunking".Declared as a plain class attribute by a family base class, and inherited by every concrete step in that family:
class Chunker(DocumentStep, ABC): event_name = "Chunking" class ChunkerRouter(RoutedStep[Document], Chunker): ... # -> "Chunking", inherited from `Chunker`
A concrete step overrides it to opt out of its family’s label:
class ChunkerRouter(RoutedStep[Document], Chunker): event_name = "ChunkerRouter" # -> "ChunkerRouter"
Resolution walks the MRO for the first class that declares it in its own class body (so a mixin listed first, e.g.
RoutedStep, contributes nothing unless it declares one itself), and falls back to the class’s own name when nothing in the MRO does — a step family that never declares anevent_namestill labels each of its steps distinctly rather than collapsing them under one blank heading. That fallback is computed per instance rather than assigned onto the class: assigning it would make it look “declared” to every subclass, which would then inherit their base’s name instead of getting their own.
- route(filter_rule, fetcher)#
Delegate the URLs matching
filter_ruletofetcher.The filter sees a content-less
Sourcecarrying only the URL, so URL-based filters such asURLFilterapply. Routes are tried in registration order, and the first match wins.
- route_for(uri)#
The fetcher routed to
uri, orNoneto fetch it normally.
- routes_config()#
Routed fetchers’ fingerprints, for inclusion in a crawler’s
config().
- async run()#
Execute this step independently and collect every item.
Builds a default
ExecutionContextwhen none is installed (this step’s ownpolicy, or a freshPolicy). Intended primarily for testing and standalone use — pipeline-wide event observation isPipeline’s job.- Return type:
list[T]
- property upstream: PipelineStep[Any] | None#
Return the upstream step bound via
__call__, orNone.Read-only counterpart to
__call__’sself._upstreamassignment — lets external code (e.g.Pipeline, walking a graph from its root to classify each step by position) introspect composition without reaching into a private attribute.
- fastrag.ingestion.steps.fetching.youtube.embed_urls(content, base_uri)[source]#
Absolute
srcURLs of every<iframe>incontent.
- async fastrag.ingestion.steps.fetching.youtube.fetch_embeds(owner, page_uri, *contents)[source]#
Fetch the page’s
<iframe>embeds thatownerhas a route for.contentsare(bytes, base_uri)pairs — typically the raw and the rendered page, since a renderer may strip embeds. Equivalent spellings of one embed are fetched once. A dead or private embed is skipped with a warning rather than failing the page.