from typing import Generic, Optional, TypeVar
from q2_sdk.models.recursive_encoder import JsonSerializable
T = TypeVar("T")
[docs]
class DbConfig(Generic[T], JsonSerializable):
"""Written to database during ``q2 install`` or ``q2 update_installed``"""
def __init__(
self,
name: str,
default: T,
description: Optional[str] = None,
required: bool = True,
):
"""
:param name: Key written to the database
:param default: Suggested value to write to the database (can be overridden at install time)
:param description: Helpful text to guide implementer
:param required: If True, will raise errors at runtime when unset. Consider using False
when DbConfigs are added to an already deployed extension
"""
self.name = name
self.default = default
self.description = description
self.required = required
[docs]
def is_valid(self, value):
"""Meant to be overridden. Verifies value is a valid input"""
return True
@staticmethod
def from_dict(optional_configs: dict):
optional = [DbConfig(x, y, required=False) for x, y in optional_configs.items()]
return optional