def update(self):
        """
        This method should be called when you want to ensure all cached attributes
        are in sync with the actual object attributes at runtime.
        This happens because attributes could store mutable objects and be
        modified outside the scope of this class.
        The most common idiom that isn't automagically caught is mutating a list
        or dictionary. Lets say 'user' object have an attribute named 'friends'
        containing a list, calling 'user.friends.append(new_friend)' only get the
        attribute, SIWrapper isn't aware that the object returned was modified
        and the cached data is not updated.
        """
        self.holder = siget(self.holder.FullName)  # fix dispatch issues
        for key, value in self.__dict__.iteritems():
            key = self.namespace + key
            if self._validate_key(key):
                if not self.holder.Parameters(key):
                    self.holder.AddParameter3(key, C.siString)
                self.holder.Parameters(key).Value = encode(value)
def update ( self ) : self . holder = siget ( self . holder . FullName ) for key , value in self . __dict__ . iteritems ( ) : key = self . namespace + key if self . _validate_key ( key ) : if not self . holder . Parameters ( key ) : self . holder . AddParameter3 ( key , C . siString ) self . holder . Parameters ( key ) . Value = encode ( value )
This method should be called when you want to ensure all cached attributes
        are in sync with the actual object attributes at runtime.
        This happens because attributes could store mutable objects and be
        modified outside the scope of this class.
        The most common idiom that isn't automagically caught is mutating a list
        or dictionary. Lets say 'user' object have an attribute named 'friends'
        containing a list, calling 'user.friends.append(new_friend)' only get the
        attribute, SIWrapper isn't aware that the object returned was modified
        and the cached data is not updated.