def graftClade( tree, graftingOntoNodeId, graftingClade ): parent = util.getNodeById( tree, graftingOntoNodeId ) parent.add_child( graftingClade ) graftingClade.meta[ 'targetGNode' ] = True parent.meta[ 'affectedCladeId' ] = True
def replaceClade( tree, cladeToBeReplacedId, newClade ): cladeToReplace = util.getNodeById( tree, cladeToBeReplacedId ) parentClade = cladeToReplace.parent parentClade.remove_child( cladeToReplace ) parentClade.add_child( newClade )
def postReplaceDBUpdate( db, session, auth, tree, treeType, replacedCladeId, newCladeId, requestVars ): if treeType == 'source': replacedNode = db( db.snode.id == replacedCladeId ).select()[0] gtreeId = createGTreeRecord( db, auth, requestVars.treeName, requestVars.treeDescription ) index( tree ) util.gatherTreeInfo( tree, session ) reference = dict( newCladeId = newCladeId, targetGNode = None, oldAffectedCladeId = replacedNode.parent, newAffectedCladeId = None ) insertSnodesToGtree( db, gtreeId, tree, None, reference ) createEditRecord( db, auth, gtreeId, 'replace', reference['newAffectedCladeId'], replacedNode.id, newCladeId, requestVars.comment, treeType, auth.user.id, reference['targetGNode'] ) else: replacedNode = db( db.gnode.id == replacedCladeId ).select()[0] index( tree ) util.gatherTreeInfo( tree, session ) updateGtreeDB( db, tree ) reference = dict( newCladeId = newCladeId, targetGNode = None ) insertGNodesToGtree( db, requestVars.treeId, util.getNodeById( tree, newCladeId ), replacedNode.parent, requestVars.clipboardNodeType, reference ) editId = createEditRecord( db, auth, requestVars.treeId, 'replace', replacedNode.parent, replacedNode.id, requestVars.clipboardNodeId, requestVars.comment, treeType, auth.user.id, reference['targetGNode'] ) pruneGNodeRecords( db, requestVars.treeId, replacedNode, editId )
def pruneClade( tree, nodeId ): cladeToPrune = util.getNodeById( tree, nodeId ) parentClade = cladeToPrune.parent parentClade.remove_child( cladeToPrune ) parentClade.meta[ 'affectedCladeId' ] = True
def revertPrune( db, session, tree, editInfo ): prunedClade = \ getattr( build, ''.join( [ editInfo.originalTreeType, 'Clade' ] ) )\ ( db, editInfo.affected_node_id, Storage(), Storage( pruned = True, editId = editInfo.id ) ) parentNode = util.getNodeById( tree, editInfo.affected_clade_id ) parentNode.add_child( prunedClade );
def replaceClade( tree, replacedNodeId, replacingClade ): cladeToReplace = util.getNodeById( tree, replacedNodeId ) parentOfReplaced = cladeToReplace.parent parentOfReplaced.remove_child( cladeToReplace ) parentOfReplaced.add_child( replacingClade ) parentOfReplaced.meta[ 'affectedCladeId' ] = True replacingClade.meta[ 'targetGNode' ] = True
def revertGraft( db, session, tree, editInfo ): graftedClade = util.getNodeById( tree, editInfo.target_gnode ) #graftedClade = build.gnode2tree( db, editInfo.target_gnode ) if( graftedClade is None ): return parentNode = graftedClade.parent parentNode.remove_child( graftedClade )
def revertReplace( db, session, tree, editInfo ): replacedClade = \ getattr( build, ''.join( [ editInfo.originalTreeType, 'Clade' ] ) )\ ( db, editInfo.affected_node_id, Storage(), Storage( pruned = True, editId = editInfo.id ) ) replacingClade = util.getNodeById( tree, editInfo.target_gnode ) parentNode = replacingClade.parent parentNode.remove_child( replacingClade ) parentNode.add_child( replacedClade )
def revertPrune( db, session, clade, editInfo ): if( editInfo.originalTreeType == 'source' ): prunedClade = build.snode2tree( db, editInfo.affected_node_id ) else: prunedClade = build.gnode2tree( db, editInfo.affected_node_id, ( ( db.gnode.id == db.prune_detail.pruned_gnode ) & ( db.gnode.pruned == True ) & ( db.prune_detail.gtree_edit == editInfo.id ) ) ) parentNode = util.getNodeById( clade, editInfo.affected_clade_id ) if( parentNode is None ): return parentNode.add_child( prunedClade );
def revertReplace( db, session, tree, editInfo ): if( editInfo.originalTreeType == 'source' ): replacedClade = build.snode2tree( db, editInfo.affected_node_id ) else: replacedClade = build.gnode2tree( db, editInfo.affected_node_id, ( ( db.gnode.id == db.prune_detail.pruned_gnode ) & ( db.prune_detail.gtree_edit == editInfo.id ) ) ) replacingClade = util.getNodeById( tree, editInfo.target_gnode ) #replacingClade = build.gnode2tree( db, editInfo.target_gnode ) if( replacingClade is None ): return parentNode = replacingClade.parent parentNode.remove_child( replacingClade ) parentNode.add_child( replacedClade )
def revertGraft( db, session, tree, editInfo ): graftedClade = util.getNodeById( tree, editInfo.target_gnode ) parentNode = graftedClade.parent parentNode.remove_child( graftedClade )
def pruneClade( tree, nodeId, hack=None ): cladeToPrune = util.getNodeById( tree, nodeId ) parentClade = cladeToPrune.parent parentClade.remove_child( cladeToPrune )
def graftClade( tree, siblingCladeId, newClade ): sibling = util.getNodeById( tree, siblingCladeId ) parent = sibling.parent parent.add_child( newClade )
def postGraftDBUpdate( db, session, auth): import sys, datetime sys.stdout.write( str( 'update db : ' ) ) sys.stdout.write( str( datetime.datetime.now() ) ) sys.stdout.write( "\n" ) nodeTable = None if( session.TreeViewer.type == 'source' ): nodeTable = db.snode session.TreeViewer.treeId = createGTreeRecord( db, auth, session.treeEdit.treeName, session.treeEdit.treeDescription ) else: nodeTable = db.gnode graftedCladeSiblingRecord = db( nodeTable.id == session.treeEdit.graftedCladeSiblingId ).select().first() index( session.treeEdit.currentTree ) if( session.TreeViewer.type == 'source' ): reference = \ dict( newCladeId = session.treeEdit.graftedCladeNodeId, targetGNode = None, oldAffectedCladeId = graftedCladeSiblingRecord.parent, newAffectedCladeId = None ) insertSnodesToGtree( db, session.TreeViewer.treeId, session.treeEdit.currentTree, None, reference ) createEditRecord( db, auth, session.TreeViewer.treeId, 'graft', reference['newAffectedCladeId'], graftedCladeSiblingRecord.id, session.treeEdit.graftedCladeNodeId, session.treeEdit.comment, session.TreeViewer.type, auth.user.id, reference['targetGNode'] ) updateSessionCauseNewGtree( session ) else: updateGtreeDB( db, session.treeEdit.currentTree ) reference = dict( newCladeId = session.treeEdit.graftedCladeNodeId, targetGNode = None ) insertGNodesToGtree( db, session.TreeViewer.treeId, util.getNodeById( session.treeEdit.currentTree, session.treeEdit.graftedCladeNodeId ), graftedCladeSiblingRecord.parent, session.treeEdit.graftedCladeType, reference ) createEditRecord( db, auth, session.TreeViewer.treeId, 'graft', graftedCladeSiblingRecord.parent, graftedCladeSiblingRecord.id, session.treeEdit.graftedCladeNodeId, session.treeEdit.comment, session.TreeViewer.type, auth.user.id, reference['targetGNode'] ) sys.stdout.write( str( 'done update db : ' ) ) sys.stdout.write( str( datetime.datetime.now() ) ) sys.stdout.write( "\n" ) sys.stdout.write( str( 'preprocess new tree : ' ) ) sys.stdout.write( str( datetime.datetime.now() ) ) sys.stdout.write( "\n" ) #util.gatherTreeInfo( session.treeEdit.currentTree, session, db, True ) sys.stdout.write( str( 'done preprocess new tree : ' ) ) sys.stdout.write( str( datetime.datetime.now() ) ) sys.stdout.write( "\n" )