def update_upstream(self):

        # everything is the same except that we don't update anything
        # upstream of TruePort or FalsePort
        excluded_ports = set(['TruePort', 'FalsePort', 'TrueOutputPorts',
                              'FalseOutputPorts'])
        for port_name, connector_list in self.inputPorts.iteritems():
            if port_name not in excluded_ports:
                for connector in connector_list:
                    connector.obj.update()
        for port_name, connectorList in copy.copy(self.inputPorts.items()):
            if port_name not in excluded_ports:
                for connector in connectorList:
                    if connector.obj.get_output(connector.port) is \
                            InvalidOutput:
                        self.remove_input_connector(port_name, connector)
Deserialize an etree element containing a PROV document or a bundle
dataset/ETHPy150Open VisTrails/VisTrails/vistrails/packages/controlflow/conditional.py/If.update_upstream--crossover with--dataset/ETHPy150Open trungdong/prov/prov/serializers/provxml.py/ProvXMLSerializer.deserialize_subtree