Source code for aioli.config

from os import environ as env

from marshmallow import fields, post_load, schema


class ConfigMeta(schema.SchemaMeta):
    def __new__(mcs, *args, **kwargs):
        return super(ConfigMeta, mcs).__new__(mcs, *args, **kwargs)


class BaseConfigSchema(schema.Schema, metaclass=ConfigMeta):
    def __init__(self, prefix, *args, **kwargs):
        super(BaseConfigSchema, self).__init__(*args, **kwargs)
        self.prefix = prefix

    @post_load
    def format_data(self, data, **_):
        params = {}

        for param, field in data.items():
            env_param = self.prefix + param.upper()

            if env_param in env:  # Prefer environ
                value = env.get(env_param)
                if isinstance(field, fields.Integer):
                    value = int(value)
                if isinstance(field, fields.Boolean):
                    value = str(value).strip().lower() in ["1", "true", "yes"]
            else:
                value = data[param]

            params[param] = value

        return params


[docs]class UnitConfigSchema(BaseConfigSchema): """Unit configuration schema :var debug: Set debug level for unit, effectively overriding Application's debug level :var path: Unit path, uses Unit name if empty :var should_import_services: Setting to False skips Service registration for this Unit :var should_import_controllers: Setting to False skips Controller registration for this Unit """ def __init__(self, *args, **kwargs): super(UnitConfigSchema, self).__init__(*args, **kwargs) debug = fields.Bool(missing=None) path = fields.String(required=False, missing=None) should_import_controllers = fields.Bool(missing=True) should_import_services = fields.Bool(missing=True)
class ApplicationConfigSchema(BaseConfigSchema): """Application configuration schema :var dev_host: Development server listen host :var dev_port: Development server listen port :var debug: Debug mode :var path: Application base path """ def __init__(self, *args, **kwargs): super(ApplicationConfigSchema, self).__init__("AIOLI_", *args, **kwargs) pretty_json = fields.Bool(missing=False) allow_origins = fields.List(fields.String(), missing=["*"]) debug = fields.Bool(missing=False) api_base = fields.String(missing="/api")