Source code for runway.cfngin.lookups.handlers.hook_data

"""Hook data lookup."""
# pylint: disable=arguments-differ,unused-argument
import logging
import warnings

from troposphere import BaseAWSObject

from runway.lookups.handlers.base import LookupHandler
from runway.util import DOC_SITE, MutableMap  # abs to support import through shim

LOGGER = logging.getLogger(__name__)
TYPE_NAME = "hook_data"

[docs]class HookDataLookup(LookupHandler): """Hook data lookup.""" DEPRECATION_MSG = ( 'lookup query syntax "<hook_name>::<key>" has been deprecated; to ' "learn how to use the new lookup query syntax visit " "{}/page/lookups.html".format(DOC_SITE) )
[docs] @classmethod def legacy_parse(cls, value): """Retain support for legacy lookup syntax. Args: value (str): Parameter(s) given to this lookup. Format of value: <hook_name>::<key> """ hook_name, key = value.split("::") warnings.warn(cls.DEPRECATION_MSG, DeprecationWarning) LOGGER.warning(cls.DEPRECATION_MSG) return "{}.{}".format(hook_name, key), {}
[docs] @classmethod def handle(cls, value, context=None, provider=None, **kwargs): """Return the data from ``hook_data``. Args: value (str): Parameter(s) given to this lookup. context (:class:`runway.cfngin.context.Context`): Context instance. provider (:class:`runway.cfngin.providers.base.BaseProvider`): Provider instance. """ try: query, args = cls.parse(value) except ValueError: query, args = cls.legacy_parse(value) hook_data = MutableMap(**context.hook_data) # TODO use context.hook_data directly in next major release result = hook_data.find(query, args.get("default")) if ( isinstance(result, BaseAWSObject) and args.get("get") and not args.get("load") ): args["load"] = "troposphere" if not result: raise ValueError('Could not find a value for "%s"' % value) if result == args.get("default"): # assume default value has already been processed so no need to # use these args.pop("load", None) args.pop("get", None) return cls.format_results(result, **args)