def fromXML(self, node):
        if node.nodeName != 'workflowExec':
            return None
        
        module_execs = {}
        
        # read attributes
        id = self.convertFromStr(self.getAttribute(node, 'id'), 'long')
        user = self.convertFromStr(self.getAttribute(node, 'user'), 'str')
        ip = self.convertFromStr(self.getAttribute(node, 'ip'), 'str')
        vt_version = self.convertFromStr(self.getAttribute(node, 'vtVersion'), 'str')
        ts_start = self.convertFromStr(self.getAttribute(node, 'tsStart'), 'datetime')
        ts_end = self.convertFromStr(self.getAttribute(node, 'tsEnd'), 'datetime')
        parent_id = self.convertFromStr(self.getAttribute(node, 'parentId'), 'long')
        parent_type = self.convertFromStr(self.getAttribute(node, 'parentType'), 'str')
        parent_version = self.convertFromStr(self.getAttribute(node, 'parentVersion'), 'long')
        name = self.convertFromStr(self.getAttribute(node, 'name'), 'str')
        
        
        # read children
        for child in list(node.childNodes):
            if child.nodeName == 'moduleExec':
                module_exec = self.getDao('module_exec').fromXML(child)
                module_execs[module_exec.db_id] = module_exec
            elif child.nodeType == child.TEXT_NODE and child.nodeValue.strip() == '':
                # node.removeChild(child)
                pass
            elif child.nodeType != child.TEXT_NODE:
                print child.nodeName % '*** ERROR *** nodeName = %s'
        
        obj = DBWorkflowExec(id=id,
                             user=user,
                             ip=ip,
                             vt_version=vt_version,
                             ts_start=ts_start,
                             ts_end=ts_end,
                             parent_id=parent_id,
                             parent_type=parent_type,
                             parent_version=parent_version,
                             name=name,
                             module_execs=module_execs)
        obj.is_dirty = False
        return obj
dataset/ETHPy150Open VisTrails/VisTrails/vistrails/db/versions/v0_6_0/persistence/xml/auto_gen.py/DBWorkflowExecXMLDAOBase.fromXML/swapped operands of `%`