Client API
This section documents the main client classes and their methods.
Main VNDB Client
- class veedb.VNDB(api_token: str | None = None, use_sandbox: bool = False, session: ClientSession | None = None, local_schema_path: str | None = None, schema_cache_dir: str = '.veedb_cache', schema_cache_ttl_hours: float = 360, base_url: str | None = None)[source]
Bases:
object- __init__(api_token: str | None = None, use_sandbox: bool = False, session: ClientSession | None = None, local_schema_path: str | None = None, schema_cache_dir: str = '.veedb_cache', schema_cache_ttl_hours: float = 360, base_url: str | None = None)[source]
- Parameters:
base_url – Override the kana API endpoint. Useful for self-hosted replicas. Falls back to the VEEDB_BASE_URL environment variable, then to the upstream api.vndb.org/kana (or sandbox if use_sandbox=True). Strip any trailing slash.
The main client class for interacting with the VNDB API.
Parameters:
api_token(Optional[str]): API token for authenticated requestsuse_sandbox(bool): Whether to use the sandbox API endpoint (default: False)session(Optional[aiohttp.ClientSession]): Custom aiohttp sessionlocal_schema_path(Optional[str]): Path to local schema fileschema_cache_dir(str): Directory for schema cache (default: “.veedb_cache”)schema_cache_ttl_hours(float): Cache TTL in hours (default: 24.0)
Basic Usage:
async with VNDB() as client: stats = await client.get_stats() print(f"Total VNs: {stats.vn}")
With Authentication:
async with VNDB(api_token="your-token") as client: auth_info = await client.get_authinfo() print(f"Logged in as: {auth_info.username}")
- __init__(api_token: str | None = None, use_sandbox: bool = False, session: ClientSession | None = None, local_schema_path: str | None = None, schema_cache_dir: str = '.veedb_cache', schema_cache_ttl_hours: float = 360, base_url: str | None = None)[source]
- Parameters:
base_url – Override the kana API endpoint. Useful for self-hosted replicas. Falls back to the VEEDB_BASE_URL environment variable, then to the upstream api.vndb.org/kana (or sandbox if use_sandbox=True). Strip any trailing slash.
- async close()[source]
- async get_schema() dict[source]
Get the VNDB API schema, using cache if available and not older than configured TTL. Downloads and caches the schema if cache doesn’t exist or is expired. Uses the same schema cache as the filter validation system.
- async get_enums() Dict[str, Any][source]
Get enum definitions from the VNDB API schema (uses shared schema cache).
- async validate_filters(endpoint: str, filters: List | str | None) Dict[str, Any][source]
Validates filters against the schema for a specific endpoint.
- async get_available_fields(endpoint: str) List[str][source]
Get all available filterable fields for an endpoint.
- invalidate_schema_cache()[source]
Invalidates the schema cache, forcing a refresh on next validation or schema access.
Endpoint-Specific Clients
Visual Novel Client
- class veedb.client._VNClient(client: VNDB)[source]
Bases:
_BaseEntityClient[VN,VN]Accessed via
client.vn. Provides methods for querying visual novel data.Example:
query = QueryRequest( filters=["title", "~", "fate"], fields="id, title, rating" ) response = await client.vn.query(query)
Character Client
Release Client
Producer Client
Staff Client
Tag Client
Trait Client
Quote Client
User List Client
- class veedb.client._UlistClient(client: VNDB)[source]
Bases:
objectAccessed via
client.ulist. Provides methods for managing user visual novel lists.Requires authentication for write operations.
Example:
# Query user's list query = QueryRequest( filters=["uid", "=", user_id], fields="id, vote, notes, vn{title}" ) response = await client.ulist.query(query) # Update list entry payload = UlistUpdatePayload(id="v17", vote=85, notes="Great VN!") await client.ulist.update("v17", payload)
- async query(user_id: str | None = None, query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False)) QueryResponse[UlistItem][source]
- async query_all_pages(user_id: str, query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False), max_pages: int | None = None) List[UlistItem][source]
Fetch all ulist results across multiple pages automatically.
- Parameters:
user_id – The user ID to query
query_options – The query to execute
max_pages – Maximum number of pages to fetch (None for unlimited)
- Returns:
List of all results from all pages
- async query_paginated(user_id: str, query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False)) AsyncGenerator[QueryResponse[UlistItem], None][source]
Generator that yields ulist query responses page by page.
- Parameters:
user_id – The user ID to query
query_options – The query to execute
- Yields:
QueryResponse objects for each page
Release List Client
- class veedb.client._RlistClient(client: VNDB)[source]
Bases:
objectAccessed via
client.rlist. Provides methods for managing user release lists.Requires authentication for write operations.
Base Entity Client
- class veedb.client._BaseEntityClient(client: VNDB, endpoint_path: str, entity_dataclass: Type[T_Entity], query_item_dataclass: Type[T_QueryItem])[source]
Bases:
Generic[T_Entity,T_QueryItem]Base class for all endpoint-specific clients. Provides common functionality like query methods and filter validation.
- __init__(client: VNDB, endpoint_path: str, entity_dataclass: Type[T_Entity], query_item_dataclass: Type[T_QueryItem])[source]
- async query(query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False)) QueryResponse[T_QueryItem][source]
- async query_all_pages(query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False), max_pages: int | None = None) List[T_QueryItem][source]
Fetch all results across multiple pages automatically.
- Parameters:
query_options – The query to execute
max_pages – Maximum number of pages to fetch (None for unlimited)
- Returns:
List of all results from all pages
- async query_paginated(query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False)) AsyncGenerator[QueryResponse[T_QueryItem], None][source]
Generator that yields query responses page by page.
- Parameters:
query_options – The query to execute
- Yields:
QueryResponse objects for each page
Client Methods Reference
Query Methods
All endpoint clients inherit these methods from _BaseEntityClient:
- async _BaseEntityClient.query(query_options: QueryRequest = QueryRequest(filters=[], fields='id', sort='id', reverse=False, results=10, page=1, user=None, count=False, compact_filters=False, normalized_filters=False)) QueryResponse[T_QueryItem][source]
Query the endpoint with the given parameters.
Parameters:
query_options(QueryRequest): Query parameters including filters, fields, sorting, etc.
Returns:
QueryResponse[T_QueryItem]: Response containing results and metadata
- async _BaseEntityClient.validate_filters(filters: List | str | None) Dict[str, Any][source]
Validates filters against the schema for this specific endpoint.
Validate filters against the API schema for this endpoint.
Parameters:
filters(Union[List, str, None]): Filter expression to validate
Returns:
Dict[str, Any]: Validation result with ‘valid’, ‘errors’, ‘suggestions’ keys
List Management Methods
For _UlistClient and _RlistClient:
Note
The user list management methods (update, delete) are currently not implemented in the client. Please refer to the main VNDB API documentation for direct API usage.
Main Client Methods
- async VNDB.get_stats() UserStats[source]
Get database statistics.
Returns:
Stats: Database statistics including VN count, character count, etc.
- async VNDB.get_schema() dict[source]
Get the VNDB API schema, using cache if available and not older than configured TTL. Downloads and caches the schema if cache doesn’t exist or is expired. Uses the same schema cache as the filter validation system.
Get the API schema.
Returns:
Dict[str, Any]: Complete API schema
Validation Methods
- async VNDB.validate_filters(endpoint: str, filters: List | str | None) Dict[str, Any][source]
Validates filters against the schema for a specific endpoint.
Validate filters against the API schema.
Parameters:
endpoint(str): API endpoint (e.g., “/vn”, “/character”)filters(Union[List, str, None]): Filter expression to validate
Returns:
Dict[str, Any]: Validation result
Cache Management
- VNDB.invalidate_schema_cache()[source]
Invalidates the schema cache, forcing a refresh on next validation or schema access.
Invalidate the schema cache, forcing a refresh on next use.
Context Manager Support
All clients support async context manager protocol:
async with VNDB() as client:
# Client is automatically opened and closed
response = await client.vn.query(query)
# Session is automatically closed here
This ensures proper cleanup of HTTP sessions and other resources.