Source code for fetchez.schema

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
fetchez.schema
~~~~~~~~~~~~~~
Generic Schema Registry for the Fetchez Recipe Engine.
Allows external domains (like Globato) to register
custom recipe mutators.

:copyright: (c) 2010-2026 Regents of the University of Colorado
:license: MIT, see LICENSE for more details.
"""

from typing import Any
import logging

logger = logging.getLogger(__name__)


[docs] class BaseSchema: """The generic base class for all recipe schemas.""" name = "base"
[docs] @classmethod def apply(cls, config): """Mutates and returns the recipe config. Subclasses must override this to inject their domain-specific rules. """ return config
[docs] class SchemaRegistry: """Holds all registered schemas.""" _schemas: dict[Any, Any] = {}
[docs] @classmethod def register(cls, schema_class): """Allows external libraries to register their schemas.""" cls._schemas[schema_class.name.lower()] = schema_class logger.debug(f"Registered schema: {schema_class.name}")
[docs] @classmethod def apply_schema(cls, config): """Looks for a schema in the config and applies its rules.""" schema_name = config.get("domain", {}).get("schema") if schema_name: schema_name = schema_name.lower() if schema_name in cls._schemas: logger.info(f"Applying '{schema_name}' schema rules to recipe...") SchemaCls = cls._schemas[schema_name] return SchemaCls.apply(config) else: logger.warning( f"Schema '{schema_name}' requested but not registered. Ignoring." ) return config