Пример #1
0
def test_clear_resolvers():
    assert OmegaConf.get_resolver('foo') is None
    try:
        OmegaConf.register_resolver('foo', lambda x: int(x) + 10)
        assert OmegaConf.get_resolver('foo') is not None
    finally:
        OmegaConf.clear_resolvers()
        assert OmegaConf.get_resolver('foo') is None
Пример #2
0
    def _resolve_simple_interpolation(
        self,
        key: Any,
        inter_type: str,
        inter_key: str,
        throw_on_missing: bool,
        throw_on_resolution_failure: bool,
    ) -> Optional["Node"]:
        from omegaconf import OmegaConf

        from .nodes import ValueNode

        inter_type = ("str:" if inter_type is None else inter_type)[0:-1]
        if inter_type == "str":
            root_node, inter_key = self._resolve_key_and_root(inter_key)
            parent, last_key, value = root_node._select_impl(
                inter_key,
                throw_on_missing=throw_on_missing,
                throw_on_resolution_failure=throw_on_resolution_failure,
            )

            # if parent is None or (value is None and last_key not in parent):  # type: ignore
            if parent is None or value is None:
                if throw_on_resolution_failure:
                    raise ConfigKeyError(
                        f"{inter_type} interpolation key '{inter_key}' not found"
                    )
                else:
                    return None
            assert isinstance(value, Node)
            return value
        else:
            resolver = OmegaConf.get_resolver(inter_type)
            if resolver is not None:
                root_node = self._get_root()
                try:
                    value = resolver(root_node, inter_key)
                    return ValueNode(
                        value=value,
                        parent=self,
                        metadata=Metadata(ref_type=None,
                                          object_type=None,
                                          key=key,
                                          optional=True),
                    )
                except Exception as e:
                    if throw_on_resolution_failure:
                        self._format_and_raise(key=inter_key,
                                               value=None,
                                               cause=e)
                        assert False
                    else:
                        return None
            else:
                if throw_on_resolution_failure:
                    raise UnsupportedInterpolationType(
                        f"Unsupported interpolation type {inter_type}")
                else:
                    return None
Пример #3
0
    def _resolve_value(root_node, inter_type, inter_key):
        from omegaconf import OmegaConf
        inter_type = ('str:' if inter_type is None else inter_type)[0:-1]
        if inter_type == 'str':
            ret = root_node.select(inter_key)
            if ret is None:
                raise KeyError("{} interpolation key '{}' not found".format(
                    inter_type, inter_key))
        else:
            resolver = OmegaConf.get_resolver(inter_type)
            if resolver is not None:
                ret = resolver(root_node, inter_key)
            else:
                raise ValueError(
                    "Unsupported interpolation type {}".format(inter_type))

        return ret
Пример #4
0
    def _resolve_value(root_node, inter_type, inter_key):
        from omegaconf import OmegaConf

        inter_type = ("str:" if inter_type is None else inter_type)[0:-1]
        if inter_type == "str":
            parent, last_key, value = root_node._select_impl(inter_key)
            if parent is None or (value is None and last_key not in parent):
                raise KeyError("{} interpolation key '{}' not found".format(
                    inter_type, inter_key))
        else:
            resolver = OmegaConf.get_resolver(inter_type)
            if resolver is not None:
                value = resolver(root_node, inter_key)
            else:
                raise UnsupportedInterpolationType(
                    "Unsupported interpolation type {}".format(inter_type))

        return value
Пример #5
0
    def _resolve_interpolation(
        self,
        key: Any,
        inter_type: str,
        inter_key: str,
        throw_on_missing: bool,
    ) -> "Node":
        from omegaconf import OmegaConf

        from .nodes import ValueNode

        root_node = self._get_root()

        inter_type = ("str:" if inter_type is None else inter_type)[0:-1]
        if inter_type == "str":
            parent, last_key, value = root_node._select_impl(
                inter_key)  # type: ignore
            if parent is None or (value is None and last_key not in parent):
                raise KeyError("{} interpolation key '{}' not found".format(
                    inter_type, inter_key))
            if throw_on_missing and isinstance(value,
                                               Node) and value._is_missing():
                raise MissingMandatoryValue(parent._get_full_key(str(key)))
            assert isinstance(value, Node)
            return value
        else:
            resolver = OmegaConf.get_resolver(inter_type)
            if resolver is not None:
                value = resolver(root_node, inter_key)
                assert isinstance(self, Container)
                node = self.get_node(key)
                return ValueNode(
                    value=value,
                    parent=self,
                    key=key,
                    is_optional=node._metadata.optional,
                )
            else:
                raise UnsupportedInterpolationType(
                    "Unsupported interpolation type {}".format(inter_type))
Пример #6
0
def test_clear_resolvers(restore_resolvers: Any) -> None:
    assert OmegaConf.get_resolver("foo") is None
    OmegaConf.register_resolver("foo", lambda x: int(x) + 10)
    assert OmegaConf.get_resolver("foo") is not None
    OmegaConf.clear_resolvers()
    assert OmegaConf.get_resolver("foo") is None
Пример #7
0
def test_get_resolver_deprecation() -> None:
    with warns(
            UserWarning,
            match=re.escape("https://github.com/omry/omegaconf/issues/608")):
        assert OmegaConf.get_resolver("foo") is None