Source code for transit.class_hash

## Copyright 2014 Cognitect. All Rights Reserved.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS-IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.

# Hash that looks up class keys with inheritance.
import collections

[docs]class ClassDict(collections.MutableMapping): """ A dictionary that looks up class/type keys with inheritance""" def __init__(self, *args, **kwargs): self.store = dict() self.update(dict(*args, **kwargs)) def __getitem__(self, key): key = isinstance(key, type) and key or type(key) if key in self.store: return self.store[key] else: for t in key.__bases__: value = t in self.store and self.store[t] if value: return value raise KeyError("No handler found for: " + str(key)) def __setitem__(self, key, value): self.store[key] = value def __delitem__(self, key): del self.store[key] def __iter__(self): return iter(self.store) def __len__(self): return len(self.store)