| 303 | self._exception_handler = exception_handler |
| 304 | |
| 305 | def __getitem__(self, key): |
| 306 | if key not in self._values and key in self._value_definitions: |
| 307 | value_definition = self._value_definitions[key] |
| 308 | if value_definition['type'] in self._value_retrieval_steps: |
| 309 | retrieval_step = self._value_retrieval_steps[ |
| 310 | value_definition['type'] |
| 311 | ] |
| 312 | try: |
| 313 | return retrieval_step.run_step(value_definition, self) |
| 314 | except Exception as e: |
| 315 | if self._exception_handler is not None: |
| 316 | return self._exception_handler(e) |
| 317 | raise |
| 318 | return self._values[key] |
| 319 | |
| 320 | def __setitem__(self, key, value): |
| 321 | self._values[key] = value |