Skip to content

Models

Config

Bases: BaseModel

Source code in src/koality/models.py
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
class Config(BaseModel):
    name: str
    database_setup: str
    database_accessor: str
    defaults: _GlobalDefaults
    check_bundles: list[_CheckBundle]

    @model_validator(mode="before")
    @classmethod
    def propagate_defaults_to_checks(cls, data: dict) -> dict:
        """Merge defaults and check_bundle.defaults into each check before validation.

        Merge order (later overrides earlier):
        1. defaults
        2. bundle defaults
        3. check-specific values
        """
        if not isinstance(data, dict):
            return data

        defaults = data.get("defaults", {})
        check_bundles = data.get("check_bundles", [])

        if not check_bundles:
            return data

        updated_bundles = []
        for bundle in check_bundles:
            if not isinstance(bundle, dict):
                updated_bundles.append(bundle)
                continue

            bundle_defaults = bundle.get("defaults", {})
            checks = bundle.get("checks", [])

            merged_checks = []
            for check in checks:
                if isinstance(check, dict):
                    # Merge order: defaults -> check_bundle.defaults -> check
                    merged = {**defaults, **bundle_defaults, **check}
                    merged_checks.append(merged)
                else:
                    merged_checks.append(check)

            bundle["checks"] = merged_checks
            updated_bundles.append(bundle)

        data["check_bundles"] = updated_bundles
        return data

propagate_defaults_to_checks(data) classmethod

Merge defaults and check_bundle.defaults into each check before validation.

Merge order (later overrides earlier): 1. defaults 2. bundle defaults 3. check-specific values

Source code in src/koality/models.py
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
@model_validator(mode="before")
@classmethod
def propagate_defaults_to_checks(cls, data: dict) -> dict:
    """Merge defaults and check_bundle.defaults into each check before validation.

    Merge order (later overrides earlier):
    1. defaults
    2. bundle defaults
    3. check-specific values
    """
    if not isinstance(data, dict):
        return data

    defaults = data.get("defaults", {})
    check_bundles = data.get("check_bundles", [])

    if not check_bundles:
        return data

    updated_bundles = []
    for bundle in check_bundles:
        if not isinstance(bundle, dict):
            updated_bundles.append(bundle)
            continue

        bundle_defaults = bundle.get("defaults", {})
        checks = bundle.get("checks", [])

        merged_checks = []
        for check in checks:
            if isinstance(check, dict):
                # Merge order: defaults -> check_bundle.defaults -> check
                merged = {**defaults, **bundle_defaults, **check}
                merged_checks.append(merged)
            else:
                merged_checks.append(check)

        bundle["checks"] = merged_checks
        updated_bundles.append(bundle)

    data["check_bundles"] = updated_bundles
    return data