summaryrefslogtreecommitdiff
path: root/django/utils/datastructures.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/utils/datastructures.py')
-rw-r--r--django/utils/datastructures.py18
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]