1
2
3
4
5
6
7
8
9
10
11
12
13 import os
14 import string
15 import warnings
16
17 warnings.filterwarnings('ignore', '.*non-existing path.*',
18 UserWarning,
19 '.*DirectoryView.*')
20
22 """
23 Search upwards for the root of a ZenPack.
24
25 >>> import os, tempfile; root = os.path.realpath(tempfile.mkdtemp())
26 >>> skindir = os.path.join(root, 'ZenPacks/ZenPacks.zenoss.NotAPack-1.2.3-py2.6.egg/ZenPacks/zenoss/NotAPack/skins')
27 >>> os.makedirs(skindir)
28 >>> findZenPackRoot(skindir).replace(root, '/opt/zenoss')
29 '/opt/zenoss/ZenPacks/ZenPacks.zenoss.NotAPack'
30 """
31 p = d = os.path.realpath(base)
32 while d:
33 if os.path.isdir(os.path.join(p, 'ZenPacks')):
34
35 if p.endswith('.egg'):
36 fullpath = p.split(os.sep)
37 name = fullpath.pop().split('-')[0]
38 fullpath.append(name)
39 p = os.sep.join(fullpath)
40 return p
41 p, d = os.path.split(p)
42 return None
43
44
46 layers = []
47 for p, ds, fs in os.walk(os.path.join(base, 'skins')):
48 for d in ds:
49 if not d.startswith('.'):
50 layers.append(d)
51
52 break
53 return layers
54
55
57 """setup the skins in a product"""
58 layers = skinDirs(base)
59 try:
60 from Products.CMFCore.utils import getToolByName
61 from Products.CMFCore.DirectoryView import addDirectoryViews
62 skinstool = getToolByName(self, 'portal_skins')
63 for layer in layers:
64 if layer not in skinstool.objectIds():
65 path = os.path.join(base, 'skins')
66 if not os.path.exists(path): os.mkdir(path, mode=0755)
67 root = findZenPackRoot(path).split('/')[-1]
68 addDirectoryViews(skinstool, path, dict(__name__=root))
69 skins = skinstool.getSkinSelections()
70 for skin in skins:
71 path = skinstool.getSkinPath(skin)
72 path = map(string.strip, string.split(path,','))
73 for layer in layers:
74 if layer not in path:
75 try:
76 path.insert(path.index(positionAfter)+1, layer)
77 except ValueError:
78 path.append(layer)
79 path = ','.join(path)
80 skinstool.addSkinSelection(skin, path)
81 except ImportError, e:
82 if "Products.CMFCore.utils" in e.args: pass
83 else: raise
84 except AttributeError, e:
85 if "portal_skin" in e.args: pass
86 else: raise
87
89 """setup the skins in a product"""
90 from Products.ZenUtils.Utils import unused
91 unused(positionAfter)
92 layers = skinDirs(base)
93 if layers is None: return
94 try:
95 from Products.CMFCore.utils import getToolByName
96 skinstool = getToolByName(self, 'portal_skins')
97 for layer in layers:
98 if layer in skinstool.objectIds():
99 try:
100 skinstool._delOb(layer)
101 except AttributeError:
102 pass
103 obs = skinstool._objects
104 goodlayers = filter(lambda x:getattr(skinstool, x['id'], False), obs)
105 skinstool._objects = tuple(goodlayers)
106 except ImportError, e:
107 if "Products.CMFCore.utils" in e.args: pass
108 else: raise
109 except AttributeError, e:
110 if "portal_skin" in e.args: pass
111 else: raise
112