diff --git a/decouple.py b/decouple.py index 9873fc9..384eb88 100644 --- a/decouple.py +++ b/decouple.py @@ -106,6 +106,9 @@ def __call__(self, *args, **kwargs): """ return self.get(*args, **kwargs) + def __iter__(self): + return iter(self.repository) + class RepositoryEmpty(object): def __init__(self, source='', encoding=DEFAULT_ENCODING): @@ -117,6 +120,9 @@ def __contains__(self, key): def __getitem__(self, key): return None + def __iter__(self): + return iter(()) + class RepositoryIni(RepositoryEmpty): """ @@ -139,6 +145,9 @@ def __getitem__(self, key): except NoOptionError: raise KeyError(key) + def __iter__(self): + return iter(self.parser[self.SECTION]) + class RepositoryEnv(RepositoryEmpty): """ @@ -165,6 +174,9 @@ def __contains__(self, key): def __getitem__(self, key): return self.data[key] + def __iter__(self): + return iter(self.data) + class RepositorySecret(RepositoryEmpty): """ @@ -187,6 +199,9 @@ def __contains__(self, key): def __getitem__(self, key): return self.data[key] + def __iter__(self): + return iter(self.data) + class AutoConfig(object): """ @@ -225,7 +240,9 @@ def _find_file(self, path): # reached root without finding any files. return '' - def _load(self, path): + def _load(self, path=None): + path = path or self.search_path or self._caller_path() + # Avoid unintended permission errors try: filename = self._find_file(os.path.abspath(path)) @@ -241,9 +258,15 @@ def _caller_path(self): path = os.path.dirname(frame.f_back.f_back.f_code.co_filename) return path + def __iter__(self): + if not self.config: + self._load() + + return iter(self.config) + def __call__(self, *args, **kwargs): if not self.config: - self._load(self.search_path or self._caller_path()) + self._load() return self.config(*args, **kwargs)