Package Products :: Package ZenUtils :: Module ToManyRebuildKeys
[hide private]
[frames] | no frames]

Source Code for Module Products.ZenUtils.ToManyRebuildKeys

 1  ############################################################################## 
 2  #  
 3  # Copyright (C) Zenoss, Inc. 2007, all rights reserved. 
 4  #  
 5  # This content is made available according to terms specified in 
 6  # License.zenoss under the directory where your Zenoss product is installed. 
 7  #  
 8  ############################################################################## 
 9   
10   
11  __doc__="""CmdBase 
12   
13  Add data base access functions for command line programs 
14   
15  $Id: ToManyRebuildKeys.py,v 1.2 2004/10/19 22:28:59 edahl Exp $""" 
16   
17  __version__ = "$Revision: 1.2 $"[11:-2] 
18   
19  import gc 
20   
21  from Acquisition import aq_parent 
22   
23  from Products.ZenUtils.Utils import getSubObjectsMemo 
24   
25  from ZCmdBase import ZCmdBase 
26   
27  from transaction import get_transaction 
28   
29 -class ToManyRebuildKeys(ZCmdBase):
30
31 - def rebuild(self):
32 ccount = 0 33 for tomany in getSubObjectsMemo(self.dmd, self.filter, self.decend): 34 self.log.debug("rebuilding keys for relation %s on object %s" % 35 (tomany.getId(), aq_parent(tomany).getId())) 36 ccount += tomany.rebuildKeys(self.log) 37 if ccount >= self.options.commitCount and not self.options.noCommit: 38 trans = get_transaction() 39 trans.note('ToManyRebuildKeys rebuilt keys') 40 trans.commit() 41 ccount = 0 42 self.dmd._p_jar.sync() 43 gc.collect() 44 if self.options.noCommit: 45 self.log.info("not commiting any changes") 46 else: 47 trans = get_transaction() 48 trans.note('ToManyRebuildKeys rebuilt keys') 49 trans.commit()
50 51
52 - def filter(self, obj):
53 return obj.meta_type == "To Many Relationship"
54 55
56 - def decend(self, obj):
57 from Products.ZenModel.ZenModelRM import ZenModelRM 58 from Products.ZenRelations.ToManyRelationship \ 59 import ToManyRelationship 60 return (isinstance(obj, ZenModelRM) or 61 isinstance(obj, ToManyRelationship))
62 63
64 - def buildOptions(self):
65 ZCmdBase.buildOptions(self) 66 self.parser.add_option('-x', '--commitCount', 67 dest='commitCount', 68 default=1000, 69 type="int", 70 help='how many lines should be loaded before commit') 71 72 self.parser.add_option('-n', '--noCommit', 73 dest='noCommit', 74 action="store_true", 75 default=0, 76 help='Do not store changes to the Dmd (for debugging)')
77 78 79 if __name__ == "__main__": 80 tmbk = ToManyRebuildKeys() 81 tmbk.rebuild() 82