Laddning av komponenter¶
En komponent som kan laddas ärver från Loadable. Basklassen har en __init__ som tar config och sparar den som
self.config, samt en standard-implementation av from_config som anropar cls(config).
Det enklaste fallet kräver alltså ingen extra kod:
from lrpy.loader import Loadable
class TestLoadable(Loadable):
pass
Om ovanstående placeras i filen test.py (som antas vara i sökvägen) kan klassen skapas med nedanstående konfiguration.
type: test:TestLoadable
Om komponenten behöver göra mer vid laddning (t.ex. ladda delkomponenter via loader) kan from_config överskridas:
from lrpy.loader import Loadable, Loader
class TestLoadable(Loadable):
@classmethod
async def from_config(cls, config, loader: Loader):
# loader kan användas för att ladda delkomponenter
return cls(config)
Konfiguration¶
Komponenter som behöver konfiguration definierar en inre klass Config som måste ärva från pydantic.BaseModel.
Konfigurationen valideras automatiskt vid laddning och skickas som en instans av Config till __init__.
from pydantic import BaseModel
from lrpy.loader import Loadable
class TestLoadable(Loadable):
class Config(BaseModel):
value: int
def __init__(self, config: Config):
super().__init__(config)
print(self.config.value)
Som skapas med:
type: test:TestLoadable
config:
value: 5
Om en komponent definierar Config men inget config-block anges i YAML-filen används ett tomt objekt ({}), så
fält med default-värden fungerar utan konfiguration. Om en komponent inte definierar Config men config anges
i YAML-filen ges ett felmeddelande.
Type¶
type anger vilken klass som ska laddas. Formatet är [fil]:[klassnamn]. Fil är den “sökväg” som skulle användas för
att importera filen i python. Till exempel om ApiModule (vilken ligger i lrpy/modules/api_module.py) ska laddas anges
lrpy.modules.api_module:ApiModule