Source code for troika.translators.base

"""Directive translator"""

import logging

from ..hooks.base import Hook

_logger = logging.getLogger(__name__)


class Translator(Hook):
    """Directive translation hook manager

    See :py:class:`troika.hooks.base.Hook`. The only change is the behaviour of the
    :py:meth:`__call__` method::

        def __call__(self, script_data, *args, **kwargs):
            for func in self.enabled_hooks:
                script_data = func(script_data, *args, **kwargs)
            return script_data
    """

    _namespace = "troika"

    def __call__(self, data, *args, **kwargs):
        if self._impl is None:
            raise ValueError("Attempt to call a non-instantiated hook registry")
        _logger.debug("Translating directives")
        for funcname, func in self._impl:
            _logger.debug("Calling translator function %s", funcname)
            data = func(data, *args, **kwargs)
        return data


[docs]@Translator.declare def translators(script_data, global_config, site): """Directive translation hook Parameters ---------- script_data: dict[str, Any] Data parsed from the input script global_config: :py:class:`troika.config.Config` Global configuration site: :py:class:`troika.sites.base.Site` Target site Returns ------- dict[str, Any] Updated ``script_data`` """