Source code for dynaconf.utils.boxing
from box import Box
from dynaconf.utils import upperfy
[docs]class DynaBox(Box):
"""Specialized Box for dynaconf
it allows items/attrs to be found both in upper or lower case"""
def __getattr__(self, item, *args, **kwargs):
try:
return super(DynaBox, self).__getattr__(item, *args, **kwargs)
except (AttributeError, KeyError):
n_item = item.lower() if item.isupper() else upperfy(item)
return super(DynaBox, self).__getattr__(n_item, *args, **kwargs)
def __getitem__(self, item, *args, **kwargs):
try:
return super(DynaBox, self).__getitem__(item, *args, **kwargs)
except (AttributeError, KeyError):
n_item = item.lower() if item.isupper() else upperfy(item)
return super(DynaBox, self).__getitem__(n_item, *args, **kwargs)
def __copy__(self):
return self.__class__(super(Box, self).copy())
[docs] def copy(self):
return self.__class__(super(Box, self).copy())
[docs] def get(self, item, default=None, *args, **kwargs):
value = super(DynaBox, self).get(item, default, *args, **kwargs)
if value is None or value == default:
n_item = item.lower() if item.isupper() else upperfy(item)
value = super(DynaBox, self).get(n_item, default, *args, **kwargs)
return value