def get( self, key, default=None, cast=None, fresh=False, dotted_lookup=True, parent=None, ): """ Get a value from settings store, this is the prefered way to access:: >>> from dynaconf import settings >>> settings.get('KEY') :param key: The name of the setting value, will always be upper case :param default: In case of not found it will be returned :param cast: Should cast in to @int, @float, @bool or @json ? :param fresh: Should reload from loaders store before access? :param dotted_lookup: Should perform dotted-path lookup? :param parent: Is there a pre-loaded parent in a nested data? :return: The value if found, default or None """ nested_sep = self._store.get("NESTED_SEPARATOR_FOR_DYNACONF") if nested_sep and nested_sep in key: # turn FOO__bar__ZAZ in `FOO.bar.ZAZ` key = key.replace(nested_sep, ".") if "." in key and dotted_lookup: return self._dotted_get( dotted_key=key, default=default, cast=cast, fresh=fresh, parent=parent, ) if default is not None: # default values should behave exactly Dynaconf parsed values if isinstance(default, list): default = BoxList(default) elif isinstance(default, dict): default = DynaBox(default) key = upperfy(key) if key in self._deleted: return default if ( fresh or self._fresh or key in getattr(self, "FRESH_VARS_FOR_DYNACONF", ()) ) and key not in UPPER_DEFAULT_SETTINGS: self.unset(key) self.execute_loaders(key=key) data = (parent or self.store).get(key, default) if cast: data = get_converter(cast, data, box_settings=self) return data
def _dotted_get( self, dotted_key, default=None, parent=None, cast=None, **kwargs ): """ Perform dotted key lookups and keep track of where we are. :param key: The name of the setting value, will always be upper case :param default: In case of not found it will be returned :param parent: Is there a pre-loaded parent in a nested data? """ split_key = dotted_key.split(".") name, keys = split_key[0], split_key[1:] result = self.get(name, default=default, parent=parent, **kwargs) # If we've reached the end, or parent key not found, then return result if not keys or result == default: if cast and cast in converters: return get_converter(cast, result, box_settings=self) elif cast is True: return parse_conf_data(result, tomlfy=True, box_settings=self) return result # If we've still got key elements to traverse, let's do that. return self._dotted_get( ".".join(keys), default=default, parent=result, cast=cast, **kwargs )
def get( self, key, default=None, cast=None, fresh=False, dotted_lookup=True, parent=None, ): """ Get a value from settings store, this is the prefered way to access:: >>> from dynaconf import settings >>> settings.get('KEY') :param key: The name of the setting value, will always be upper case :param default: In case of not found it will be returned :param cast: Should cast in to @int, @float, @bool or @json ? :param fresh: Should reload from loaders store before access? :param dotted_lookup: Should perform dotted-path lookup? :param parent: Is there a pre-loaded parent in a nested data? :return: The value if found, default or None """ if "." in key and dotted_lookup: return self._dotted_get( dotted_key=key, default=default, cast=cast, fresh=fresh, parent=parent, ) key = upperfy(key) if key in self._deleted: return default if (fresh or self._fresh or key in getattr(self, "FRESH_VARS_FOR_DYNACONF", ())) and key not in dir(default_settings): self.unset(key) self.execute_loaders(key=key) data = (parent or self.store).get(key, default) if cast: data = get_converter(cast, data, box_settings=self) return data
def get_environ(self, key, default=None, cast=None): """Get value from environment variable using os.environ.get :param key: The name of the setting value, will always be upper case :param default: In case of not found it will be returned :param cast: Should cast in to @int, @float, @bool or @json ? or cast must be true to use cast inference :return: The value if found, default or None """ key = upperfy(key) data = self.environ.get(key, default) if data: if cast in converters: data = get_converter(cast, data, box_settings=self) elif cast is True: data = parse_conf_data(data, tomlfy=True, box_settings=self) return data
def converter(converter_key, value, box_settings=None): return get_converter(converter_key, value, box_settings)