Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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,
    }
Exemplo n.º 3
0
    def classEnd(self, itemHandler, attrs):

        self.cls = ClassLoader.loadClass(self.data, attrs['module'])
Exemplo n.º 4
0
 def readValue(self, itemReader, offset, data, withSchema, view, name,
               afterLoadHooks):
     offset, string = itemReader.readString(offset, data)
     return offset, ClassLoader.loadClass(string)
Exemplo n.º 5
0
 def makeValue(self, data):
     return ClassLoader.loadClass(data)
Exemplo n.º 6
0
    def classEnd(self, itemHandler, attrs):

        self.cls = ClassLoader.loadClass(self.data, attrs['module'])