| """Private utility methods used by the subset modules""" | |
| def _add_method(*clazzes): | |
| """Returns a decorator function that adds a new method to one or | |
| more classes.""" | |
| def wrapper(method): | |
| done = [] | |
| for clazz in clazzes: | |
| if clazz in done: | |
| continue # Support multiple names of a clazz | |
| done.append(clazz) | |
| assert clazz.__name__ != "DefaultTable", "Oops, table class not found." | |
| assert not hasattr( | |
| clazz, method.__name__ | |
| ), "Oops, class '%s' has method '%s'." % (clazz.__name__, method.__name__) | |
| setattr(clazz, method.__name__, method) | |
| return None | |
| return wrapper | |
| def _uniq_sort(l): | |
| return sorted(set(l)) | |