Dict that returns {} for any unknown key, recursively.
| 304 | |
| 305 | |
| 306 | class ScenarioDict(dict): |
| 307 | """Dict that returns {} for any unknown key, recursively.""" |
| 308 | |
| 309 | def __init__(self, data): |
| 310 | def convert(v): |
| 311 | if isinstance(v, abc.Mapping): |
| 312 | return ScenarioDict(v) |
| 313 | if isinstance(v, (str, bytes)): |
| 314 | return v |
| 315 | if isinstance(v, abc.Sequence): |
| 316 | return [convert(item) for item in v] |
| 317 | return v |
| 318 | |
| 319 | dict.__init__(self, [(k, convert(v)) for k, v in data.items()]) |
| 320 | |
| 321 | def __getitem__(self, item): |
| 322 | try: |
| 323 | return dict.__getitem__(self, item) |
| 324 | except KeyError: |
| 325 | # Unlike a defaultdict, don't set the key, just return a dict. |
| 326 | return ScenarioDict({}) |
| 327 | |
| 328 | |
| 329 | class CompareType: |
no outgoing calls
no test coverage detected