diff options
Diffstat (limited to 'django/utils/datastructures.py')
| -rw-r--r-- | django/utils/datastructures.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py index 7c8669a350..7118c814b5 100644 --- a/django/utils/datastructures.py +++ b/django/utils/datastructures.py @@ -345,3 +345,21 @@ class CaseInsensitiveMapping(Mapping): "Element key %r invalid, only strings are allowed" % elem[0] ) yield elem + + +class DeferredSubDict: + """ + Wrap a dict, allowing deferred access to a sub-dict under a given key. + + The value at ``deferred_key`` must itself be a dict. Accessing + ``DeferredSubDict(parent_dict, deferred_key)[key]`` retrieves + ``parent_dict[deferred_key][key]`` at access time, so updates to + the parent dict are reflected. + """ + + def __init__(self, parent_dict, deferred_key): + self.parent_dict = parent_dict + self.deferred_key = deferred_key + + def __getitem__(self, key): + return self.parent_dict[self.deferred_key][key] |
