Source code for dotwiz


DotWiz is a ``dict`` subclass that enables accessing (nested) keys
in dot notation.

Sample Usage::

    >>> from dotwiz import DotWiz
    >>> dw = DotWiz({'this': {'works': {'for': [{'nested': {'values': True}}]}}},
    ...             the_answer_to_life=42)
    >>> dw
    ✫(this=✫(works=✫(for=[✫(nested=✫(values=True))])), the_answer_to_life=42)
    >>> dw.the_answer_to_life

For full documentation and more advanced usage, please see

:copyright: (c) 2022 by Ritvik Nag.
:license: MIT, see LICENSE for more details.

__all__ = [

from .main import DotWiz, make_dot_wiz
from .plus import DotWizPlus, make_dot_wiz_plus

[docs]def set_default_for_missing_keys(default=None, overwrite=False): """ Modifies :class:`DotWiz` and :class:`DotWizPlus` to add a custom :meth:`__getattr__`, so that accessing missing or non-existing attributes (keys) returns ``default`` instead of raising an :exc:`AttributeError`. This provides a handy alternative to the builtin :func:`hasattr`. For more details, see Example:: >>> from dotwiz import DotWiz, set_default_for_missing_keys >>> set_default_for_missing_keys('test') >>> dw = DotWiz(hello='world!') >>> assert dw.hello == 'world!' >>> assert == 'test' :param default: The default value to return for missing or non-existing attributes (keys). :param overwrite: True to overwrite a class's `__getattr__()` method, if one already exists; defaults to False. """ for cls in DotWiz, DotWizPlus: cls_dict = cls.__dict__ if not overwrite and '__getattr__' in cls_dict: msg = f'{cls.__qualname__} already defines a __getattr__() - ' \ f'pass `overwrite=True` to continue anyway.' raise ValueError(msg) def __getattr__(self: cls, item: str, __default=default, __get=cls_dict.get): return __get(item, __default) setattr(cls, '__getattr__', __getattr__)