api: BooruClient virtual _post_view_url + _tag_api_url + category_fetcher attr
Three additions to the base class, all default-inactive:
_post_view_url(post) -> str | None
Override to provide the post-view HTML URL for the per-post
category scrape path. Default None (Danbooru/e621 skip it).
_tag_api_url() -> str | None
Override to provide the batch tag DAPI base URL for the fast
path in CategoryFetcher. Default None. Only Gelbooru proper
benefits — the fetcher's probe-and-cache determines at runtime
whether the endpoint actually honors the names= parameter.
self.category_fetcher = None
Set externally by the factory (client_for_type) when db and
site_id are available. Gelbooru-shape and Moebooru clients use
it; Danbooru/e621 leave it None.
No behavior change at this commit. Existing clients inherit the
defaults and continue working identically.
This commit is contained in:
parent
e00d88e1ec
commit
8f298e51fc
@ -85,6 +85,11 @@ class BooruClient(ABC):
|
|||||||
self.base_url = base_url.rstrip("/")
|
self.base_url = base_url.rstrip("/")
|
||||||
self.api_key = api_key
|
self.api_key = api_key
|
||||||
self.api_user = api_user
|
self.api_user = api_user
|
||||||
|
# Set externally by client_for_type when db + site_id are
|
||||||
|
# available. Gelbooru-shape and Moebooru clients use it to
|
||||||
|
# populate post.tag_categories via HTML scrape / batch API.
|
||||||
|
# Danbooru and e621 leave it None (inline categorization).
|
||||||
|
self.category_fetcher = None # CategoryFetcher | None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def client(self) -> httpx.AsyncClient:
|
def client(self) -> httpx.AsyncClient:
|
||||||
@ -176,6 +181,28 @@ class BooruClient(ABC):
|
|||||||
"""Tag autocomplete. Override in subclasses that support it."""
|
"""Tag autocomplete. Override in subclasses that support it."""
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def _post_view_url(self, post: Post) -> str | None:
|
||||||
|
"""Return the URL for a post's HTML detail page, or None.
|
||||||
|
|
||||||
|
Override in subclasses whose booru exposes tag categories in
|
||||||
|
the post-view HTML via ``class="tag-type-X"`` markup.
|
||||||
|
CategoryFetcher.fetch_post uses this to scrape categories.
|
||||||
|
Returning None means "no HTML scrape path" — the default for
|
||||||
|
Danbooru and e621 which categorize inline via JSON.
|
||||||
|
"""
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _tag_api_url(self) -> str | None:
|
||||||
|
"""Return the base URL for the batch tag DAPI, or None.
|
||||||
|
|
||||||
|
Override in Gelbooru-shaped subclasses to enable the fast
|
||||||
|
path in CategoryFetcher.fetch_via_tag_api. The fetcher
|
||||||
|
appends ``?page=dapi&s=tag&q=index&...`` query params.
|
||||||
|
Returning None disables the fast path; the fetcher falls
|
||||||
|
back to per-post HTML scrape.
|
||||||
|
"""
|
||||||
|
return None
|
||||||
|
|
||||||
async def test_connection(self) -> tuple[bool, str]:
|
async def test_connection(self) -> tuple[bool, str]:
|
||||||
"""Test connection. Returns (success, detail_message).
|
"""Test connection. Returns (success, detail_message).
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user