def __getattr__()

in opensearch_dsl/utils.py [0:0]


    def __getattr__(self, name):
        if name.startswith("_"):
            raise AttributeError(
                "{!r} object has no attribute {!r}".format(
                    self.__class__.__name__, name
                )
            )

        value = None
        try:
            value = self._params[name]
        except KeyError:
            # compound types should never throw AttributeError and return empty
            # container instead
            if name in self._param_defs:
                pinfo = self._param_defs[name]
                if pinfo.get("multi"):
                    value = self._params.setdefault(name, [])
                elif pinfo.get("hash"):
                    value = self._params.setdefault(name, {})
        if value is None:
            raise AttributeError(
                "{!r} object has no attribute {!r}".format(
                    self.__class__.__name__, name
                )
            )

        # wrap nested dicts in AttrDict for convenient access
        if isinstance(value, collections_abc.Mapping):
            return AttrDict(value)
        return value