Source code for aitlas.base.config

from abc import ABC

from marshmallow import Schema, fields
from munch import Munch


[docs]class Config(Munch): """Config object used for automatic object creation from a dictionary.""" def __init__(self, config): def convert(obj): """Recursively convert a dict to Munch. (there is a Munch.from_dict method, but it's not python3 compatible)""" if isinstance(obj, list): return [convert(element) for element in obj] if isinstance(obj, dict): return Munch({k: convert(v) for k, v in obj.items()}) return obj config = convert(config) super().__init__(config)
[docs]class ObjectConfig(Schema): classname = fields.String(required=True, description="Class to instantiate.") config = fields.Dict( required=True, descripton="Configuration used for instantiation of the class." )
[docs]class RunConfig(Schema): """Top level configuration schema""" model = fields.Nested(ObjectConfig, missing=None, description="Model configuration") task = fields.Nested(ObjectConfig, required=True, description="Task configuration") use_ddp = fields.Boolean( required=False, missing=False, description="Turn on distributed data processing" )
[docs]class Configurable(ABC): """Base class for all configurable objects.""" schema = None # you need specify the schema of the class def __init__(self, config): if not self.schema: raise ValueError(f"You are missing a schema for {self.__class__}") self.config = Config(self.schema().load(config))