| Trees | Indices | Help |
|
|---|
|
|
1 ###########################################################################
2 #
3 # This program is part of Zenoss Core, an open source monitoring platform.
4 # Copyright (C) 2008, Zenoss Inc.
5 #
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License version 2 as published by
8 # the Free Software Foundation.
9 #
10 # For complete information please visit: http://www.zenoss.com/oss/
11 #
12 ###########################################################################
13
14 __doc__='''
15 ZenPackPersistence
16 '''
17
18 from zope.interface import implements
19 from Products.ZenModel.interfaces import IIndexed
20
21 ZENPACK_PERSISTENCE_CATALOG = 'zenPackPersistence'
22
23 import logging
24 log = logging.getLogger('ZenPackPersistence')
25
27 '''
28 Create the zenPackPersistence catalog if it does not exist.
29 Return the catalog
30 '''
31 from Products.ZCatalog.ZCatalog import manage_addZCatalog
32 from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
33 zcat = getattr(dmd, ZENPACK_PERSISTENCE_CATALOG, None)
34 if zcat is None:
35 manage_addZCatalog(dmd, ZENPACK_PERSISTENCE_CATALOG,
36 ZENPACK_PERSISTENCE_CATALOG)
37 zcat = dmd._getOb(ZENPACK_PERSISTENCE_CATALOG)
38 cat = zcat._catalog
39 cat.addIndex('getZenPackName',makeCaseSensitiveFieldIndex('getZenPackName'))
40 cat.addColumn('id')
41 cat.addColumn('getPrimaryId')
42 return zcat
43
44
46 """
47 Return a list of all the objects in the zenPackPersistence catalog
48 for the given zenPack name.
49 If the catalog is not found, return None.
50 """
51 zcat = getattr(dmd, ZENPACK_PERSISTENCE_CATALOG, None)
52 if zcat is None:
53 result = None
54 else:
55 result = []
56 brains = zcat(dict(getZenPackName=packName))
57 for brain in brains:
58 try:
59 obj = brain.getObject()
60 result.append(obj)
61 except KeyError, e:
62 log.warn('catalog object %s not found in system', e)
63 return result
64
65
67 '''
68 This is a mix-in class that should be used whenever a ZenPack-supplied
69 class is going to be stored persistently in the zodb. It provides
70 for a catalog to associate objects in zodb with the ZenPacks that provide
71 those objects' classes.
72
73 The motivation for this is that we usually need to delete all instances
74 of zenpack-supplied classes when that zenpack is deleted. This is
75 because the class for those objects no longer exists and they are just
76 sad, broken, unloved objects in the zodb at that point. This is
77 undesirable.
78
79 IMPORTANT: This should be the first class listed in any subclasses's
80 list of parents. Otherwise the manage_* methods of the other classes
81 will likely be called and these skipped.
82 '''
83 implements(IIndexed)
84
85 # Subclasses should set this to the id of the ZenPack or they
86 # should override getZenPackName()
87 # ZENPACKID = 'ZenPacks.my.name'
88
90 '''
91 '''
92 if not self.ZENPACKID:
93 from ZenPack import ZenPackException
94 raise ZenPackException('The class %s must define ZENPACKID ' %
95 str(self.__class__) +
96 'or override getZenPackName().')
97 # Should we check to make sure ZENPACKID matches the name of an
98 # installed ZenPack?
99 return self.ZENPACKID
100
101
103 """
104 Return the ZenPack instance that provides this object.
105 """
106 return context.dmd.ZenPackManager.packs._getOb(
107 self.getZenPackName(), None)
108
109
111 """
112 Return the path to the installed ZenPack directory or a subdirectory.
113 Example: zenpack.path('libexec') would return something like
114 $ZENHOME/ZenPacks/ZenPacks.Me.MyZenPack/ZenPacks/Me/MyZenPack/libexec
115 """
116 zp = self.getZenPack(self)
117 return zp.path(*parts)
118
119
120 # index_object and unindex_object are overridden so that instances
121 # can participate in other catalogs, not just the
122 # ZENPACK_PERSISTENCE_CATALOG.
123 # If we used the standard method of just setting default_catalog in
124 # this class then ZenPacks would not be able to override Zenoss
125 # classes that already participate in catalogs, eg DeviceClass.
126
128 """A common method to allow Findables to index themselves."""
129 cat = getattr(self, ZENPACK_PERSISTENCE_CATALOG, None)
130 if cat is not None:
131 cat.catalog_object(self, self.getPrimaryId())
132 super(ZenPackPersistence, self).index_object()
133
134
136 """A common method to allow Findables to unindex themselves."""
137 #FIXME THIS WON'T WORK IF WE DELETE FROM THE ZENPACK PAGE BECAUSE WE CAN'T FIND THE CATALOG -EAD
138 cat = getattr(self, ZENPACK_PERSISTENCE_CATALOG, None)
139 if cat is not None:
140 cat.uncatalog_object(self.getPrimaryId())
141 super(ZenPackPersistence, self).unindex_object()
142
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Mon Oct 19 14:44:26 2009 | http://epydoc.sourceforge.net |