CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
python.TagTree.tagTree Class Reference
Inheritance diagram for python.TagTree.tagTree:

Public Member Functions

def __init__
 
def createTagTreeTable
 
def deleteNode
 
def deleteSubtree
 
def existTagTreeTable
 
def getAllLeaves
 
def getNode
 
def getNodeById
 
def getPath
 
def getSubtree
 
def importFromTree
 
def insertNode
 
def nChildren
 
def renameNodes
 
def replaceLeafLinks
 

Private Member Functions

def __closeGap
 
def __openGap
 

Private Attributes

 __session
 
 __tagInventoryTableName
 
 __tagTreeIDs
 
 __tagTreeTableColumns
 
 __tagTreeTableHandle
 
 __tagTreeTableName
 
 __tagTreeTableNotNullColumns
 
 __tagTreeTablePK
 
 __tagTreeTableUniqueColumns
 

Detailed Description

Class manages tag tree. Note: tree name is not case sensitive.
Tree name is always converted to upper case

Definition at line 4 of file TagTree.py.

Constructor & Destructor Documentation

def python.TagTree.tagTree.__init__ (   self,
  session,
  treename 
)

Definition at line 8 of file TagTree.py.

8 
9  def __init__( self, session, treename ):
10  self.__session = session
11  self.__tagTreeTableName = 'TAGTREE_TABLE_'+str.upper(treename)
12  self.__tagTreeIDs = 'TAGTREE_'+str.upper(treename)+'_IDS'
13  self.__tagInventoryTableName = 'TAGINVENTORY_TABLE'
14  self.__tagTreeTableColumns = {'nodeid':'unsigned long', 'nodelabel':'string', 'lft':'unsigned long', 'rgt':'unsigned long', 'parentid':'unsigned long', 'tagid':'unsigned long', 'globalsince':'unsigned long long', 'globaltill':'unsigned long long'}
15  self.__tagTreeTableNotNullColumns = ['nodelabel','lft','rgt','parentid']
16  self.__tagTreeTableUniqueColumns = ['nodelabel']
self.__tagTreeTablePK = ('nodeid')

Member Function Documentation

def python.TagTree.tagTree.__closeGap (   self,
  tableHandle,
  parentlft,
  parentrgt,
  n 
)
private
Update the node lft rgt values after removing. Must be called inside update transaction.\n        

Definition at line 573 of file TagTree.py.

Referenced by python.TagTree.tagTree.deleteNode(), and python.TagTree.tagTree.deleteSubtree().

574  def __closeGap(self, tableHandle,parentlft,parentrgt,n):
575  """Update the node lft rgt values after removing. Must be called inside update transaction.\n
576  """
577  assert (parentlft!=0 and parentrgt!=0 and n!=0)
578  assert (parentrgt>parentlft)
579  delta=2*n
580  editor = tableHandle.dataEditor()
581  setClause1 = 'lft=lft-'+str(delta)
582  condition1 = 'lft>'+str(parentrgt)
583  inputData =coral.AttributeList()
584  editor.updateRows(setClause1,condition1,inputData)
585  setClause2 = 'rgt=rgt-'+str(delta)
586  condition2 = 'rgt>'+str(parentrgt)
editor.updateRows(setClause2,condition2,inputData)
def python.TagTree.tagTree.__openGap (   self,
  tableHandle,
  parentrgt,
  n 
)
private
Update the parent node after inserting. Must be called inside update transaction.\n
Input: rootrgt is the rgt of the parent node. \n
Input: n is the number of positions to add

Definition at line 557 of file TagTree.py.

Referenced by python.TagTree.tagTree.insertNode().

558  def __openGap(self,tableHandle,parentrgt,n):
559  """Update the parent node after inserting. Must be called inside update transaction.\n
560  Input: rootrgt is the rgt of the parent node. \n
561  Input: n is the number of positions to add
562  """
563  delta=2*n
564  inputData = coral.AttributeList()
565  inputData.extend('parentrgt','unsigned long')
566  inputData['parentrgt'].setData(parentrgt)
567  editor = tableHandle.dataEditor()
568  setClause = 'lft=lft+'+str(delta)
569  condition = 'lft>:parentrgt'
570  editor.updateRows(setClause, condition, inputData)
571  setClause = 'rgt=rgt+'+str(delta)
572  condition = 'rgt>=:parentrgt'
editor.updateRows(setClause, condition, inputData)
def python.TagTree.tagTree.createTagTreeTable (   self)
Create tag tree table. Existing table will be deleted. 

Definition at line 31 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, python.TagTree.tagTree.__tagTreeTableNotNullColumns, python.TagTree.tagTree.__tagTreeTablePK, and python.TagTree.tagTree.__tagTreeTableUniqueColumns.

Referenced by python.TagTree.tagTree.importFromTree().

31 
32  def createTagTreeTable( self ):
33  """Create tag tree table. Existing table will be deleted.
34  """
35  transaction=self.__session.transaction()
36  try:
37  transaction.start(False)
38  schema = self.__session.nominalSchema()
39  schema.dropIfExistsTable( self.__tagTreeTableName )
40  description = coral.TableDescription();
41  description.setName( self.__tagTreeTableName )
42  for columnName, columnType in self.__tagTreeTableColumns.items():
43  description.insertColumn(columnName, columnType)
44  for columnName in self.__tagTreeTableNotNullColumns :
45  description.setNotNullConstraint(columnName,True)
46  for columnName in self.__tagTreeTableUniqueColumns :
47  description.setUniqueConstraint(columnName)
48  description.setPrimaryKey( self.__tagTreeTablePK )
49  #description.createForeignKey('tagid_FK','tagid',self.__tagInventoryTableName,'tagid')
50  self.__tagTreeTableHandle = schema.createTable( description )
51  self.__tagTreeTableHandle.privilegeManager().grantToPublic( coral.privilege_Select )
52  self.__tagTreeTableHandle.privilegeManager().grantToPublic( coral.privilege_Select )
53  self.__tagTreeTableHandle.privilegeManager().grantToPublic( coral.privilege_Select )
54  self.__tagTreeTableHandle.privilegeManager().grantToPublic( coral.privilege_Select )
55  #create also the associated id table
56  generator=IdGenerator.IdGenerator(self.__session.nominalSchema())
57  generator.createIDTable(self.__tagTreeIDs,True)
58  transaction.commit()
59  except Exception, er:
60  transaction.rollback()
61  raise Exception, str(er)
def python.TagTree.tagTree.deleteNode (   self,
  label 
)
DELETE FROM treetable WHERE nodename=label

Definition at line 533 of file TagTree.py.

References python.TagTree.tagTree.__closeGap(), python.TagTree.tagTree.__tagTreeTableName, MuonAlignmentInputXML.getNode(), python.TagTree.tagTree.getNode(), and python.TagTree.tagTree.getNodeById().

534  def deleteNode( self, label ):
535  """
536  DELETE FROM treetable WHERE nodename=label
537  """
538  assert (label !='ROOT')
539  transaction=self.__session.transaction()
540  try:
541  myparent=self.getNodeById(self.getNode(label).nodeid)
542  parentlft=myparent.lft
543  parentrgt=myparent.rgt
544  transaction.start(False)
545  tableHandle = self.__session.nominalSchema().tableHandle(self.__tagTreeTableName)
546  editor = tableHandle.dataEditor()
547  condition = 'nodelabel = :nodelabel'
548  conditionData = coral.AttributeList()
549  conditionData.extend('nodelabel','string')
550  conditionData['nodelabel'].setData(label)
551  editor.deleteRows( condition, conditionData )
552  self.__closeGap(tableHandle,parentlft,parentrgt,1)
553  transaction.commit()
554  except Exception, er:
555  print str(er)
556  transaction.rollback()
raise Exception, str(er)
def python.TagTree.tagTree.deleteSubtree (   self,
  label = 'ROOT' 
)
Delete the subtree under the specified node(included).\n
Input: label of the top node
query: DELETE FROM treetable WHERE lft >=%me.lft AND rgt<=%me.rgt
__closeGap()

Definition at line 491 of file TagTree.py.

References python.TagTree.tagTree.__closeGap(), python.TagTree.tagTree.__tagTreeIDs, python.TagTree.tagTree.__tagTreeTableName, MuonAlignmentInputXML.getNode(), python.TagTree.tagTree.getNode(), python.TagTree.tagTree.getNodeById(), and python.TagTree.tagTree.nChildren().

492  def deleteSubtree( self, label='ROOT' ):
493  """Delete the subtree under the specified node(included).\n
494  Input: label of the top node
495  query: DELETE FROM treetable WHERE lft >=%me.lft AND rgt<=%me.rgt
496  __closeGap()
497  """
498  transaction=self.__session.transaction()
499  try:
500  if label=='ROOT' :
501  transaction.start(False)
502  self.__session.nominalSchema().dropIfExistsTable(self.__tagTreeTableName)
503  self.__session.nominalSchema().dropIfExistsTable(self.__tagTreeIDs)
504  #editor = tableHandle.dataEditor()
505  #conditionData = coral.AttributeList()
506  #editor.deleteRows('',conditionData)
507  #idtableHandle = self.__session.nominalSchema().tableHandle(self.__tagTreeIDs)
508  #ideditor = idtableHandle.dataEditor()
509  #ideditor.deleteRows('',conditionData)
510  transaction.commit()
511  else :
512  myparent=self.getNodeById(self.getNode(label).nodeid)
513  parentlft=myparent.lft
514  parentrgt=myparent.rgt
515  n=self.nChildren(label)
516  transaction.start(False)
517  tableHandle = self.__session.nominalSchema().tableHandle(self.__tagTreeTableName)
518  editor = tableHandle.dataEditor()
519  condition = 'lft >= :parentlft AND rgt <= :parentrgt'
520  conditionData = coral.AttributeList()
521  conditionData.extend('parentlft','unsigned long')
522  conditionData.extend('parentrgt','unsigned long')
523  conditionData['parentlft'].setData(parentlft)
524  conditionData['parentrgt'].setData(parentrgt)
525  editor.deleteRows( condition, conditionData )
526  self.__closeGap(tableHandle,parentlft,parentrgt,n)
527  transaction.commit()
528  except coral.Exception, er:
529  transaction.rollback()
530  raise Exception, str(er)
531  except Exception, er:
532  transaction.rollback()
raise Exception, str(er)
def python.TagTree.tagTree.existTagTreeTable (   self)
Check if tree table exists

Definition at line 17 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName.

17 
18  def existTagTreeTable( self ):
19  """Check if tree table exists
20  """
21  transaction=self.__session.transaction()
22  try:
23  transaction.start(True)
24  schema = self.__session.nominalSchema()
25  result=schema.existsTable(self.__tagTreeTableName)
26  transaction.commit()
27  #print result
28  except Exception, er:
29  transaction.rollback()
30  raise Exception, str(er)
return result
def python.TagTree.tagTree.getAllLeaves (   self)
Get all leaf nodes.\n
Output: list of leaf nodes
Query "SELECT * FROM treetable WHERE lft=rgt-1"

Definition at line 354 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, and data.

355  def getAllLeaves( self ):
356  """Get all leaf nodes.\n
357  Output: list of leaf nodes
358  Query "SELECT * FROM treetable WHERE lft=rgt-1"
359  """
360  result=[]
361  try:
362  transaction=self.__session.transaction()
363  transaction.start(True)
364  schema = self.__session.nominalSchema()
365  query = schema.tableHandle(self.__tagTreeTableName).newQuery()
366  condition = 'lft=rgt-1'
367  conditionData = coral.AttributeList()
368  query.setCondition( condition, conditionData)
369  cursor = query.execute()
370  while ( cursor.next() ):
371  resultNode=Node.Node()
372  resultNode.tagid=cursor.currentRow()['tagid'].data()
373  resultNode.nodeid=cursor.currentRow()['nodeid'].data()
374  resultNode.nodelabel=cursor.currentRow()['nodelabel'].data()
375  resultNode.lft=cursor.currentRow()['lft'].data()
376  resultNode.rgt=cursor.currentRow()['rgt'].data()
377  resultNode.parentid=cursor.currentRow()['parentid'].data()
378  resultNode.globalsince=cursor.currentRow()['globalsince'].data()
379  resultNode.globaltill=cursor.currentRow()['globaltill'].data()
380  result.append( resultNode )
381  transaction.commit()
382  del query
383  return result
384  except coral.Exception, er:
385  transaction.rollback()
386  del query
387  raise Exception, str(er)
388  except Exception, er:
389  transaction.rollback()
390  del query
raise Exception, str(er)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
def python.TagTree.tagTree.getNode (   self,
  label = 'ROOT' 
)
return result of query "select * from treetable where nodelabel=label" in Node structure \n
Input: name of the node to get. Default to 'ROOT' \n
Output: selected node 

Definition at line 279 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, and data.

Referenced by python.TagTree.tagTree.deleteNode(), python.TagTree.tagTree.deleteSubtree(), python.TagTree.tagTree.getPath(), python.TagTree.tagTree.getSubtree(), python.TagTree.tagTree.insertNode(), and python.TagTree.tagTree.nChildren().

280  def getNode( self, label='ROOT' ):
281  """return result of query "select * from treetable where nodelabel=label" in Node structure \n
282  Input: name of the node to get. Default to 'ROOT' \n
283  Output: selected node
284  """
285  result=Node.Node()
286  if label=='ROOT':
287  return result
288  transaction=self.__session.transaction()
289  try:
290  transaction.start(True)
291  query=self.__session.nominalSchema().tableHandle(self.__tagTreeTableName).newQuery()
292  condition = 'nodelabel =:nodelabel'
293  conditionData = coral.AttributeList()
294  conditionData.extend( 'nodelabel','string' )
295  query.setCondition( condition, conditionData)
296  conditionData['nodelabel'].setData(label)
297  cursor = query.execute()
298  while ( cursor.next() ):
299  result.tagid=cursor.currentRow()['tagid'].data()
300  result.nodeid=cursor.currentRow()['nodeid'].data()
301  result.nodelabel=cursor.currentRow()['nodelabel'].data()
302  result.lft=cursor.currentRow()['lft'].data()
303  result.rgt=cursor.currentRow()['rgt'].data()
304  result.parentid=cursor.currentRow()['parentid'].data()
305  result.globalsince=cursor.currentRow()['globalsince'].data()
306  result.globaltill=cursor.currentRow()['globaltill'].data()
307  transaction.commit()
308  del query
309  return result
310  except coral.Exception, er:
311  transaction.rollback()
312  raise Exception, str(er)
313  except Exception, er:
314  transaction.rollback()
raise Exception, str(er)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
def python.TagTree.tagTree.getNodeById (   self,
  nodeid 
)
return result of query "select * from treetable where nodeid=:nodeid" in Node structure \n
Input: id of the node to get.\n
Output: selected node 

Definition at line 243 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, and data.

Referenced by python.TagTree.tagTree.deleteNode(), and python.TagTree.tagTree.deleteSubtree().

244  def getNodeById( self, nodeid ):
245  """return result of query "select * from treetable where nodeid=:nodeid" in Node structure \n
246  Input: id of the node to get.\n
247  Output: selected node
248  """
249  result=Node.Node()
250  transaction=self.__session.transaction()
251  try:
252  transaction.start(True)
253  schema = self.__session.nominalSchema()
254  query = schema.tableHandle(self.__tagTreeTableName).newQuery()
255  condition = 'nodeid =:nodeid'
256  conditionData = coral.AttributeList()
257  conditionData.extend( 'nodeid','unsigned int' )
258  conditionData['nodeid'].setData(nodeid)
259  query.setCondition( condition, conditionData)
260  cursor = query.execute()
261  while ( cursor.next() ):
262  result.tagid=cursor.currentRow()['tagid'].data()
263  result.nodeid=cursor.currentRow()['nodeid'].data()
264  result.nodelabel=cursor.currentRow()['nodelabel'].data()
265  result.lft=cursor.currentRow()['lft'].data()
266  result.rgt=cursor.currentRow()['rgt'].data()
267  result.parentid=cursor.currentRow()['parentid'].data()
268  result.globalsince=cursor.currentRow()['globalsince'].data()
269  result.globaltill=cursor.currentRow()['globaltill'].data()
270  transaction.commit()
271  del query
272  return result
273  except coral.Exception, er:
274  transaction.rollback()
275  raise Exception, str(er)
276  except Exception, er:
277  transaction.rollback()
278  raise Exception, str(er)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
def python.TagTree.tagTree.getPath (   self,
  label 
)
Get the path to arrive from ROOT to the given node.\n
Input: labe of the node
Output: list of the labels of the nodes in the path
query "SELECT nodelabel FROM treetable WHERE lft<%s AND rgt>%s ORDER BY lft ASC"

Definition at line 315 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, data, MuonAlignmentInputXML.getNode(), and python.TagTree.tagTree.getNode().

316  def getPath( self, label ):
317  """Get the path to arrive from ROOT to the given node.\n
318  Input: labe of the node
319  Output: list of the labels of the nodes in the path
320  query "SELECT nodelabel FROM treetable WHERE lft<%s AND rgt>%s ORDER BY lft ASC"
321  """
322  result=[]
323  lft=0
324  rgt=0
325  try:
326  me=self.getNode(label)
327  lft=me.lft
328  rgt=me.rgt
329  transaction=self.__session.transaction()
330  transaction.start(True)
331  schema = self.__session.nominalSchema()
332  query = schema.tableHandle(self.__tagTreeTableName).newQuery()
333  query.addToOutputList('nodelabel')
334  condition = 'lft <:lft AND rgt>:rgt'
335  conditionData = coral.AttributeList()
336  conditionData.extend( 'lft','unsigned long' )
337  conditionData.extend( 'rgt','unsigned long' )
338  conditionData['lft'].setData(lft)
339  conditionData['rgt'].setData(rgt)
340  query.setCondition( condition, conditionData)
341  query.addToOrderList( 'lft' )
342  cursor = query.execute()
343  while ( cursor.next() ):
344  resultNodeLabel = cursor.currentRow()['nodelabel'].data()
345  result.append( resultNodeLabel )
346  transaction.commit()
347  del query
348  return result
349  except coral.Exception, er:
350  transaction.rollback()
351  raise Exception, str(er)
352  except Exception, er:
353  transaction.rollback()
raise Exception, str(er)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
def python.TagTree.tagTree.getSubtree (   self,
  label = 'ROOT' 
)
Get the tree under node(included) with specified label.
Input: node label
Output: subtree in list of Node
Query "SELECT p1.* FROM treetable AS p1, treetable AS p2 WHERE p1.lft BETWEEN p2.lft AND p2.rgt AND p2.nodelabel=%s ORDER BY p1.lft ASC"

Definition at line 391 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableColumns, python.TagTree.tagTree.__tagTreeTableName, data, MuonAlignmentInputXML.getNode(), and python.TagTree.tagTree.getNode().

392  def getSubtree( self, label='ROOT' ):
393  """Get the tree under node(included) with specified label.
394  Input: node label
395  Output: subtree in list of Node
396  Query "SELECT p1.* FROM treetable AS p1, treetable AS p2 WHERE p1.lft BETWEEN p2.lft AND p2.rgt AND p2.nodelabel=%s ORDER BY p1.lft ASC"
397  """
398  result=[]
399  try:
400  if label=='ROOT' :
401  transaction=self.__session.transaction()
402  transaction.start(True)
403  schema = self.__session.nominalSchema()
404  query = schema.tableHandle(self.__tagTreeTableName).newQuery()
405  for columnName in self.__tagTreeTableColumns:
406  query.addToOutputList(columnName)
407  cursor = query.execute()
408  while ( cursor.next() ):
409  resultNode=Node.Node()
410  resultNode.tagid=cursor.currentRow()['tagid'].data()
411  resultNode.nodeid=cursor.currentRow()['nodeid'].data()
412  resultNode.nodelabel=cursor.currentRow()['nodelabel'].data()
413  resultNode.lft=cursor.currentRow()['lft'].data()
414  resultNode.rgt=cursor.currentRow()['rgt'].data()
415  resultNode.parentid=cursor.currentRow()['parentid'].data()
416  resultNode.globalsince=cursor.currentRow()['globalsince'].data()
417  resultNode.globaltill=cursor.currentRow()['globaltill'].data()
418  result.append(resultNode)
419  transaction.commit()
420  del query
421  return result
422  else:
423  me=self.getNode(label)
424  parentlft=me.lft
425  parentrgt=me.rgt
426  transaction=self.__session.transaction()
427  transaction.start(True)
428  schema = self.__session.nominalSchema()
429  query = schema.newQuery()
430  query.addToTableList( self.__tagTreeTableName,'p1' )
431  query.addToTableList( self.__tagTreeTableName,'p2' )
432  for columnname in self.__tagTreeTableColumns.keys():
433  query.addToOutputList( 'p1.'+columnname )
434  condition = 'p1.lft BETWEEN p2.lft AND p2.rgt AND p2.nodelabel = :nodelabel'
435  query.addToOrderList( "p1.lft" );
436  conditionData = coral.AttributeList()
437  conditionData.extend( 'nodelabel','string' )
438  conditionData['nodelabel'].setData(label)
439  query.setCondition( condition, conditionData)
440  cursor = query.execute()
441  while ( cursor.next() ):
442  resultNode=Node.Node()
443  resultNode.tagid=cursor.currentRow()['p1.tagid'].data()
444  resultNode.nodeid=cursor.currentRow()['p1.nodeid'].data()
445  resultNode.nodelabel=cursor.currentRow()['p1.nodelabel'].data()
446  resultNode.lft=cursor.currentRow()['p1.lft'].data()
447  resultNode.rgt=cursor.currentRow()['p1.rgt'].data()
448  resultNode.parentid=cursor.currentRow()['p1.parentid'].data()
449  resultNode.globalsince=cursor.currentRow()['p1.globalsince'].data()
450  resultNode.globaltill=cursor.currentRow()['p1.globaltill'].data()
451  result.append(resultNode)
452  transaction.commit()
453  del query
454  return result
455  except coral.Exception, er:
456  transaction.rollback()
457  raise Exception, str(er)
458  except Exception, er:
459  transaction.rollback()
raise Exception, str(er)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
def python.TagTree.tagTree.importFromTree (   self,
  sourcetreename 
)
fill up this tree by cloning from the given source tree
in the SAME database

Definition at line 62 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeIDs, python.TagTree.tagTree.__tagTreeTableName, and python.TagTree.tagTree.createTagTreeTable().

62 
63  def importFromTree( self, sourcetreename ):
64  """fill up this tree by cloning from the given source tree
65  in the SAME database
66  """
67  sourcetagTreeTableName = 'TAGTREE_TABLE_'+str.upper(sourcetreename)
68  sourcetagTreeIDs = 'TAGTREE_'+str.upper(sourcetreename)+'_IDS'
69 
70  transaction=self.__session.transaction()
71  transaction.start(True)
72  schema = self.__session.nominalSchema()
73  r1=schema.existsTable(sourcetagTreeTableName)
74  r2=schema.existsTable(sourcetagTreeIDs)
75  r3=schema.existsTable(self.__tagTreeTableName)
76  r4=schema.existsTable(self.__tagTreeIDs)
77  transaction.commit()
78  if r1 and r2 is False:
79  raise "source tag tree doesn't exist "+str(sourcetreename)
80  if r3 and r4 is True:
81  transaction.start(False)
82  schema.truncateTable(self.__tagTreeTableName)
83  schema.truncateTable(self.__tagTreeIDs)
84  transaction.commit()
85  else:
86  self.createTagTreeTable()
87  transaction.start(False)
88  schema.truncateTable(self.__tagTreeIDs)
89  transaction.commit()
90  nresult=0
91  try:
92  transaction.start(False)
93  insertwtQuery=schema.tableHandle(self.__tagTreeTableName).dataEditor().insertWithQuery()
94  insertwtQuery.query().addToTableList(sourcetagTreeTableName)
95  nresult=insertwtQuery.execute()
96  transaction.commit()
97  del insertwtQuery
98  except Exception, er:
99  transaction.rollback()
100  raise Exception, str(er)
101  #print nresult,' rows copied from ',sourcetagTreeTableName
102 
103  try:
104  transaction.start(False)
105  insertwtQuery=schema.tableHandle(self.__tagTreeIDs).dataEditor().insertWithQuery()
106  insertwtQuery.query().addToTableList(sourcetagTreeIDs)
107  nresult=insertwtQuery.execute()
108  transaction.commit()
109  del insertwtQuery
110  except Exception, er:
111  transaction.rollback()
112  raise Exception, str(er)
113  #print nresult,' rows copied from ',sourcetagTreeIDs
def python.TagTree.tagTree.insertNode (   self,
  node,
  parentLabel = 'ROOT' 
)
Append a new node to specified parent. \n
Silently ignore duplicate entry \n
Input: new node. \n
Input: name of the parent node. \n
Output: result nodeid  

Definition at line 143 of file TagTree.py.

References python.TagTree.tagTree.__openGap(), python.TagTree.tagTree.__tagTreeIDs, python.TagTree.tagTree.__tagTreeTableColumns, python.TagTree.tagTree.__tagTreeTableName, MuonAlignmentInputXML.getNode(), and python.TagTree.tagTree.getNode().

144  def insertNode( self, node, parentLabel='ROOT' ):
145  """Append a new node to specified parent. \n
146  Silently ignore duplicate entry \n
147  Input: new node. \n
148  Input: name of the parent node. \n
149  Output: result nodeid
150  """
151  nodeid=node.nodeid
152  nodelabel=node.nodelabel
153  parentid=0
154  tagid=node.tagid
155  lft=1
156  rgt=2
157  globalsince=node.globalsince
158  globaltill=node.globaltill
159  duplicate=False
160  transaction=self.__session.transaction()
161  try:
162  if parentLabel != 'ROOT':
163  parentNode=self.getNode(parentLabel)
164  if parentNode.empty():
165  raise ValueError,"non-existing parent node "+parentLabel
166  parentid=parentNode.nodeid
167  lft=parentNode.rgt
168  rgt=parentNode.rgt+1
169  ##start readonly transaction
170  transaction.start(False)
171  condition='nodelabel=:nodelabel'
172  conditionbindDict=coral.AttributeList()
173  conditionbindDict.extend('nodelabel','string')
174  conditionbindDict['nodelabel'].setData(nodelabel)
175  dbop=DBImpl.DBImpl(self.__session.nominalSchema())
176  duplicate=dbop.existRow(self.__tagTreeTableName,condition,conditionbindDict)
177  if duplicate is False:
178  generator=IdGenerator.IdGenerator(self.__session.nominalSchema())
179  nodeid=generator.getNewID(self.__tagTreeIDs)
180  if duplicate is False:
181  tabrowValueDict={'nodeid':nodeid, 'nodelabel':nodelabel,
182  'lft':lft, 'rgt':rgt, 'parentid':parentid,
183  'tagid':tagid, 'globalsince':globalsince,
184  'globaltill':globaltill
185  }
186  if parentLabel != 'ROOT':
187  self.__openGap(self.__session.nominalSchema().tableHandle(self.__tagTreeTableName),parentNode.rgt,1 )
188  dbop.insertOneRow(self.__tagTreeTableName,
190  tabrowValueDict)
191  generator.incrementNextID(self.__tagTreeIDs)
192  transaction.commit()
193  return nodeid
194  except coral.Exception, er:
195  transaction.rollback()
196  raise Exception, str(er)
197  except Exception, er:
198  transaction.rollback()
199  raise Exception, str(er)
def python.TagTree.tagTree.nChildren (   self,
  label = 'ROOT' 
)
Number of children nodes of the given node
Input: label of the parent node
Output: number of children

Definition at line 460 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, data, MuonAlignmentInputXML.getNode(), and python.TagTree.tagTree.getNode().

Referenced by python.TagTree.tagTree.deleteSubtree().

461  def nChildren( self, label='ROOT' ):
462  """Number of children nodes of the given node
463  Input: label of the parent node
464  Output: number of children
465  """
466  if label is 'ROOT' :
467  #"select count(*) from tagTreeTable"
468  try:
469  transaction=self.__session.transaction()
470  transaction.start(True)
471  schema = self.__session.nominalSchema()
472  query = schema.tableHandle(self.__tagTreeTableName).newQuery()
473  query.addToOutputList('count(*)', 'ct')
474  mycounts=coral.AttributeList()
475  mycounts.extend('ct', 'unsigned long');
476  query.defineOutput( mycounts );
477  cursor = query.execute();
478  while ( cursor.next() ):
479  n= cursor.currentRow()['ct'].data()
480  transaction.commit()
481  del query
482  return n
483  except coral.Exception, er:
484  transaction.rollback()
485  raise Exception, str(er)
486  except Exception, er:
487  transaction.rollback()
488  raise Exception, str(er)
489  else:
490  me=self.getNode(label)
return int((me.rgt-me.lft)/2)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
def python.TagTree.tagTree.renameNodes (   self,
  nodenamemap 
)
rename selected nodes \n
Input: {oldnodename:newnodename}
Output: [renamednodeid]

Definition at line 200 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName, data, and runtimedef.set().

201  def renameNodes( self, nodenamemap):
202  """
203  rename selected nodes \n
204  Input: {oldnodename:newnodename}
205  Output: [renamednodeid]
206  """
207  transaction=self.__session.transaction()
208  allnodes={}
209  try:
210  transaction.start(True)
211  schema = self.__session.nominalSchema()
212  query = schema.tableHandle(self.__tagTreeTableName).newQuery()
213  query.addToOutputList('nodelabel')
214  cursor = query.execute()
215  while ( cursor.next() ):
216  nodelabel=cursor.currentRow()['nodelabel'].data()
217  if nodenamemap.has_key(nodelabel):
218  allnodes[nodelabel]=nodenamemap[nodelabel]
219  else:
220  allnodes[nodelabel]=nodelabel
221  transaction.commit()
222  del query
223  if len(allnodes.values())!=len(set(allnodes.values())):
224  raise "new node labels are not unique in the tree"
225  transaction.start(False)
226  editor = schema.tableHandle(self.__tagTreeTableName).dataEditor()
227  inputData = coral.AttributeList()
228  inputData.extend('oldnodelabel','string')
229  inputData.extend('newnodelabel','string')
230  for nodelabelpair in nodenamemap.items():
231  inputData['oldnodelabel'].setData(nodelabelpair[0])
232  inputData['newnodelabel'].setData(nodelabelpair[1])
233  editor.updateRows( "nodelabel = :newnodelabel", "nodelabel = :oldnodelabel", inputData )
234  transaction.commit()
235  except coral.Exception, er:
236  transaction.rollback()
237  del query
238  raise Exception, str(er)
239  except Exception, er:
240  transaction.rollback()
241  del query
242  raise Exception, str(er)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
void set(const std::string &name, int value)
set the flag, with a run-time name
def python.TagTree.tagTree.replaceLeafLinks (   self,
  leafnodelinks 
)
modify the tagid link in leafnodes
Input: {oldtagid:newtagid , oldtagid:newtagid}
This function does not check if the nodes are all really leafs. User has to check before passing the input argument

Definition at line 114 of file TagTree.py.

References python.TagTree.tagTree.__tagTreeTableName.

115  def replaceLeafLinks(self, leafnodelinks ):
116  """modify the tagid link in leafnodes
117  Input: {oldtagid:newtagid , oldtagid:newtagid}
118  This function does not check if the nodes are all really leafs. User has to check before passing the input argument
119  """
120  if len(leafnodelinks.keys())==0:
121  raise 'TagTree::replaceLeafLinks: empty input '
122 
123  transaction=self.__session.transaction()
124  transaction.start(False)
125  schema = self.__session.nominalSchema()
126  try:
127  updateAction="tagid = :newtagid"
128  updateCondition="tagid = :oldtagid"
129  updateData=coral.AttributeList()
130  updateData.extend('newtagid','unsigned long')
131  updateData.extend('oldtagid','unsigned long')
132  mybulkOperation=schema.tableHandle(self.__tagTreeTableName).dataEditor().bulkUpdateRows("tagid = :newtagid","tagid = :oldtagid",updateData,1000)
133  for oldtagid in leafnodelinks.keys():
134  updateData['newtagid'].setData(leafnodelinks[oldtagid])
135  updateData['oldtagid'].setData(oldtagid)
136  mybulkOperation.processNextIteration()
137  mybulkOperation.flush()
138  transaction.commit()
139  del mybulkOperation
140  except Exception, er:
141  transaction.rollback()
142  raise Exception, str(er)

Member Data Documentation

python.TagTree.tagTree.__session
private

Definition at line 9 of file TagTree.py.

python.TagTree.tagTree.__tagInventoryTableName
private

Definition at line 12 of file TagTree.py.

python.TagTree.tagTree.__tagTreeIDs
private

Definition at line 11 of file TagTree.py.

Referenced by python.TagTree.tagTree.deleteSubtree(), python.TagTree.tagTree.importFromTree(), and python.TagTree.tagTree.insertNode().

python.TagTree.tagTree.__tagTreeTableColumns
private

Definition at line 13 of file TagTree.py.

Referenced by python.TagTree.tagTree.getSubtree(), and python.TagTree.tagTree.insertNode().

python.TagTree.tagTree.__tagTreeTableHandle
private

Definition at line 49 of file TagTree.py.

python.TagTree.tagTree.__tagTreeTableName
private

Definition at line 10 of file TagTree.py.

Referenced by python.TagTree.tagTree.createTagTreeTable(), python.TagTree.tagTree.deleteNode(), python.TagTree.tagTree.deleteSubtree(), python.TagTree.tagTree.existTagTreeTable(), python.TagTree.tagTree.getAllLeaves(), python.TagTree.tagTree.getNode(), python.TagTree.tagTree.getNodeById(), python.TagTree.tagTree.getPath(), python.TagTree.tagTree.getSubtree(), python.TagTree.tagTree.importFromTree(), python.TagTree.tagTree.insertNode(), python.TagTree.tagTree.nChildren(), python.TagTree.tagTree.renameNodes(), and python.TagTree.tagTree.replaceLeafLinks().

python.TagTree.tagTree.__tagTreeTableNotNullColumns
private

Definition at line 14 of file TagTree.py.

Referenced by python.TagTree.tagTree.createTagTreeTable().

python.TagTree.tagTree.__tagTreeTablePK
private

Definition at line 16 of file TagTree.py.

Referenced by python.TagTree.tagTree.createTagTreeTable().

python.TagTree.tagTree.__tagTreeTableUniqueColumns
private

Definition at line 15 of file TagTree.py.

Referenced by python.TagTree.tagTree.createTagTreeTable().