コード例 #1
0
ファイル: unpacker.py プロジェクト: AnthonyNystrom/YoGoMee
class ValueUnpacker(object):
    
    implements(interface.IValueUnpacker)
    
    def __init__(self, value):
        self.value = interface.IValue(value)
        self.validator = ValueValidator(self.value) 
        
    def unpack_field(self, instance, field):
        
        def validate((instance, field)):
            
            def validate_instance((instance, field)):
                d = self.validator.validate(instance)
                d.addCallback(lambda _: defer.succeed((instance, field)))
                return d
            
            def validate_field((instance, field)):
                d = self.validator.validate_field(field)
                d.addCallback(lambda _: defer.succeed((instance, field)))
                return d
            
            def complete((instance, field)):
                return defer.succeed((instance, field))
            
            d = defer.Deferred()
            
            d.addCallback(validate_instance)
            d.addCallback(validate_field)
            d.addCallback(complete)
            
            reactor.callLater(0, d.callback, (instance, field))
            return d
        
        def unpack((instance, field)):
            
            def unpack((instance, field)):
                return defer.succeed((instance, field, getattr(instance, field)))
            
            def complete((instance, field, value)):
                return defer.succeed((instance, field, value))
            
            d = defer.Deferred()
            
            d.addCallback(unpack)
            d.addCallback(complete)
            
            reactor.callLater(0, d.callback, (instance, field))
            return d
        
        def complete((instance, field, value)):
            return defer.succeed(value)
        
        d = defer.Deferred()
        
        d.addCallback(validate)
        d.addCallback(unpack)
        d.addCallback(complete)
        
        reactor.callLater(0, d.callback, (instance, field))
        return d
    
    def unpack_required(self, instance):
        
        def validate(instance):
            return self.validator.validate(instance)
        
        def unpack(instance):
            
            def complete(results):
                required = {}
                for (name, (success, value)) in map(lambda name, result: (name, result), fields, results):
                    required[name] = value
                return defer.succeed((instance, required))
                
            fields = map(lambda field: field.name, self.value.required_fields())
            list = map(lambda field: self.unpack_field(instance, field), fields)
            
            d = defer.DeferredList(list, fireOnOneErrback = True)
            d.addCallback(complete)
            return d
        
        def complete((instance, required)):
            return defer.succeed(required)
        
        d = defer.Deferred()
        
        d.addCallback(validate)
        d.addCallback(unpack)
        d.addCallback(complete)
        
        reactor.callLater(0, d.callback, instance)
        return d
    
    def unpack_optional(self, instance):
        
        def validate(instance):
            return self.validator.validate(instance)
        
        def unpack(instance):
            
            def complete(results):
                optional = {}
                for (name, (success, value)) in map(lambda name, result: (name, result), fields, results):
                    optional[name] = value
                return defer.succeed((instance, optional))
                
            fields = map(lambda field: field.name, self.value.optional_fields())
            list = map(lambda field: self.unpack_field(instance, field), fields)
            
            d = defer.DeferredList(list, fireOnOneErrback = True)
            d.addCallback(complete)
            return d
        
        def complete((instance, optional)):
            return defer.succeed(optional)
        
        d = defer.Deferred()
        
        d.addCallback(validate)
        d.addCallback(unpack)
        d.addCallback(complete)
        
        reactor.callLater(0, d.callback, instance)
        return d
    
    def unpack_indexed(self, instance):
        
        def validate(instance):
            return self.validator.validate(instance)
        
        def unpack(instance):
            
            def complete(results):
                indexed = {}
                for (name, (success, value)) in map(lambda name, result: (name, result), fields, results):
                    indexed[name] = value
                return defer.succeed((instance, indexed))
                
            fields = map(lambda field: field.name, self.value.indexed_fields())
            list = map(lambda field: self.unpack_field(instance, field), fields)
            
            d = defer.DeferredList(list, fireOnOneErrback = True)
            d.addCallback(complete)
            return d
        
        def complete((instance, indexed)):
            return defer.succeed(indexed)
        
        d = defer.Deferred()
        
        d.addCallback(validate)
        d.addCallback(unpack)
        d.addCallback(complete)
        
        reactor.callLater(0, d.callback, instance)
        return d
コード例 #2
0
ファイル: unpacker.py プロジェクト: AnthonyNystrom/YoGoMee
 def __init__(self, value):
     self.value = interface.IValue(value)
     self.validator = ValueValidator(self.value)