def _class(self, moduleName, className, withSchema, kind, view, afterLoadHooks): if className is None: if kind is None: return Item else: return kind.getItemClass() else: return ClassLoader.loadClass(className, moduleName)
class TypeHandler(object): def typeHandler(cls, view, value): try: for t in cls.typeHandlers[view][type(value)]: if t.recognizes(value): return t except KeyError: pass from repository.item.Item import Item if isinstance(value, Item): return cls.typeHandlers[view][SingleRef][0] try: typeKind = cls.typeHandlers[view][None] except KeyError: print type(value), value raise types = typeKind.findTypes(value) if types: return types[0] raise TypeError, 'No handler for values of type %s' %(type(value)) def makeString(cls, view, value): return cls.typeHandler(view, value).makeString(value) def makeValue(cls, typeName, data): try: return cls.typeDispatch[typeName](data) except KeyError: raise ValueError, "Unknown type %s for data: %s" %(typeName, data) def hashValue(cls, view, value): return cls.typeHandler(view, value).hashValue(value) def clear(cls, view): try: cls.typeHandlers[view].clear() except KeyError: pass typeHandler = classmethod(typeHandler) makeString = classmethod(makeString) makeValue = classmethod(makeValue) hashValue = classmethod(hashValue) clear = classmethod(clear) typeHandlers = {} typeDispatch = { 'str': str, 'unicode': unicode, 'uuid': UUID, 'path': Path, 'ref': lambda(data): SingleRef(UUID(data)), 'bool': lambda(data): data != 'False', 'int': int, 'long': long, 'float': float, 'complex': complex, 'class': lambda(data): ClassLoader.loadClass(data), 'none': lambda(data): None, }
def classEnd(self, itemHandler, attrs): self.cls = ClassLoader.loadClass(self.data, attrs['module'])
def readValue(self, itemReader, offset, data, withSchema, view, name, afterLoadHooks): offset, string = itemReader.readString(offset, data) return offset, ClassLoader.loadClass(string)
def makeValue(self, data): return ClassLoader.loadClass(data)
def classEnd(self, itemHandler, attrs): self.cls = ClassLoader.loadClass(self.data, attrs['module'])