| 21 | |
| 22 | |
| 23 | class Context(Mapping): |
| 24 | def __init__(self, context=None, prev=None): |
| 25 | self.context = context if context else TargetVars() |
| 26 | self.prev = prev if prev else {} |
| 27 | |
| 28 | self._items = {**self.prev, **self.context.defined_items()} |
| 29 | |
| 30 | def update_ctx(self, new_ctx): |
| 31 | return self.__class__(new_ctx, self._items) |
| 32 | |
| 33 | def __getitem__(self, x): |
| 34 | return self._items[x] |
| 35 | |
| 36 | def __iter__(self): |
| 37 | return iter(self._items) |
| 38 | |
| 39 | def __len__(self): |
| 40 | return len(self._items) |
| 41 | |
| 42 | |
| 43 | @parameters_attr |