Annotation of kupuMPIWG/Extensions/Install.py, revision 1.1
1.1 ! dwinter 1: ##############################################################################
! 2: #
! 3: # Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
! 4: #
! 5: # This software is distributed under the terms of the Kupu
! 6: # License. See LICENSE.txt for license text. For a list of Kupu
! 7: # Contributors see CREDITS.txt.
! 8: #
! 9: ##############################################################################
! 10: """Install kupu in CMF and, if available, Plone
! 11:
! 12: This is best executed using CMFQuickInstaller
! 13:
! 14: $Id: Install.py 14575 2005-07-12 20:18:12Z duncan $
! 15: """
! 16: import os.path
! 17: import sys
! 18: import re
! 19: from StringIO import StringIO
! 20:
! 21: from App.Common import package_home
! 22:
! 23: from Products.CMFCore.utils import getToolByName, minimalpath
! 24: from Products.CMFCore.DirectoryView import createDirectoryView
! 25: from Products.kupu import kupu_globals
! 26: from Products.kupu.config import TOOLNAME, PROJECTNAME, TOOLTITLE
! 27: from OFS.ObjectManager import BadRequestException
! 28: from zExceptions import BadRequest
! 29:
! 30: try:
! 31: from Products.MimetypesRegistry import MimeTypeItem
! 32: except ImportError:
! 33: pass # Plone not available
! 34:
! 35: kupu_package_dir = package_home(kupu_globals)
! 36:
! 37: def register_layer(self, relpath, name, out):
! 38: """Register a file system directory as skin layer
! 39: """
! 40: print >>out, "register skin layers"
! 41: skinstool = getToolByName(self, 'portal_skins')
! 42: if name not in skinstool.objectIds():
! 43: kupu_plone_skin_dir = minimalpath(os.path.join(kupu_package_dir, relpath))
! 44: createDirectoryView(skinstool, kupu_plone_skin_dir, name)
! 45: print >>out, "The layer '%s' was added to the skins tool" % name
! 46:
! 47: # put this layer into all known skins
! 48: for skinName in skinstool.getSkinSelections():
! 49: path = skinstool.getSkinPath(skinName)
! 50: path = [i.strip() for i in path.split(',')]
! 51: try:
! 52: if name not in path:
! 53: path.insert(path.index('custom')+1, name)
! 54: except ValueError:
! 55: if name not in path:
! 56: path.append(name)
! 57:
! 58: path = ','.join(path)
! 59: skinstool.addSkinSelection(skinName, path)
! 60:
! 61: def install_plone(self, out):
! 62: """Install with plone
! 63: """
! 64: # register the plone skin layer
! 65: register_layer(self, 'plone/kupu_plone_layer', 'kupu_plone', out)
! 66:
! 67: # register as editor
! 68: portal_props = getToolByName(self, 'portal_properties')
! 69: site_props = getattr(portal_props,'site_properties', None)
! 70: attrname = 'available_editors'
! 71: if site_props is not None:
! 72: editors = list(site_props.getProperty(attrname))
! 73: if 'Kupu' not in editors:
! 74: editors.append('Kupu')
! 75: site_props._updateProperty(attrname, editors)
! 76: print >>out, "Added 'Kupu' to available editors in Plone."
! 77: install_libraries(self, out)
! 78: install_configlet(self, out)
! 79: install_transform(self, out)
! 80: install_resources(self, out)
! 81: install_customisation(self, out)
! 82:
! 83: def _read_resources():
! 84: resourcefile = open(os.path.join(kupu_package_dir, 'plone', 'head.kupu'), 'r')
! 85: try:
! 86: data = resourcefile.read()
! 87: return data
! 88: finally:
! 89: resourcefile.close()
! 90:
! 91: def css_files(resources):
! 92: CSSPAT = re.compile(r'\<link [^>]*rel="stylesheet"[^>]*\${portal_url}/([^"]*)"')
! 93: for m in CSSPAT.finditer(resources):
! 94: id = m.group(1)
! 95: yield id
! 96:
! 97: def js_files(resources):
! 98: JSPAT = re.compile(r'\<script [^>]*\${portal_url}/([^"]*)"')
! 99: for m in JSPAT.finditer(resources):
! 100: id = m.group(1)
! 101: if id=='sarissa.js':
! 102: continue
! 103: yield id
! 104:
! 105: def install_resources(self, out):
! 106: """Add the js and css files to the resource registry so that
! 107: they can be merged for download.
! 108: """
! 109: try:
! 110: from Products.ResourceRegistries.config import CSSTOOLNAME, JSTOOLNAME
! 111: except ImportError:
! 112: print >>out, "Resource registry not found: kupu will load its own resources"
! 113: return
! 114:
! 115: data = _read_resources()
! 116:
! 117: CONDITION = '''python:portal.kupu_library_tool.isKupuEnabled(REQUEST=request)'''
! 118: csstool = getToolByName(self, CSSTOOLNAME)
! 119: jstool = getToolByName(self, JSTOOLNAME)
! 120:
! 121: for id in css_files(data):
! 122: print >>out, "CSS file", id
! 123: csstool.manage_removeStylesheet(id=id)
! 124: csstool.manage_addStylesheet(id=id,
! 125: expression=CONDITION,
! 126: rel='stylesheet',
! 127: enabled=True,
! 128: cookable=True)
! 129:
! 130: for id in js_files(data):
! 131: print >>out, "JS file", id
! 132: jstool.manage_removeScript(id=id)
! 133: jstool.manage_addScript(id=id,
! 134: expression=CONDITION,
! 135: enabled=True,
! 136: cookable=True)
! 137:
! 138: def uninstall_resources(self, out):
! 139: """Remove the js and css files from the resource registries"""
! 140: try:
! 141: from Products.ResourceRegistries.config import CSSTOOLNAME, JSTOOLNAME
! 142: except ImportError:
! 143: return
! 144:
! 145: data = _read_resources()
! 146:
! 147: csstool = getToolByName(self, CSSTOOLNAME)
! 148: jstool = getToolByName(self, JSTOOLNAME)
! 149:
! 150: for id in css_files(data):
! 151: csstool.manage_removeStylesheet(id=id)
! 152:
! 153: for id in js_files(data):
! 154: jstool.manage_removeScript(id=id)
! 155: print >>out, "Resource files removed"
! 156:
! 157: def install_libraries(self, out):
! 158: """Install everything necessary to support Kupu Libraries
! 159: """
! 160: # add the library tool
! 161: addTool = self.manage_addProduct['kupu'].manage_addTool
! 162: try:
! 163: addTool('Kupu Library Tool')
! 164: print >>out, "Added the Kupu Library Tool to the plone Site"
! 165: except BadRequest:
! 166: print >>out, "Kupu library Tool already added"
! 167: except: # Older Zopes
! 168: #heuristics for testing if an instance with the same name already exists
! 169: #only this error will be swallowed.
! 170: #Zope raises in an unelegant manner a 'Bad Request' error
! 171: e=sys.exc_info()
! 172: if e[0] != 'Bad Request':
! 173: raise
! 174: print >>out, "Kupu library Tool already added"
! 175:
! 176: def install_configlet(self, out):
! 177: try:
! 178: portal_conf=getToolByName(self,'portal_controlpanel')
! 179: except AttributeError:
! 180: print >>out, "Configlet could not be installed"
! 181: return
! 182: try:
! 183: portal_conf.registerConfiglet( 'kupu'
! 184: , TOOLTITLE
! 185: , 'string:${portal_url}/%s/kupu_config' % TOOLNAME
! 186: , '' # a condition
! 187: , 'Manage portal' # access permission
! 188: , 'Products' # section to which the configlet should be added:
! 189: #(Plone,Products,Members)
! 190: , 1 # visibility
! 191: , PROJECTNAME
! 192: , 'kupuimages/kupu_icon.gif' # icon in control_panel
! 193: , 'Kupu Library Tool'
! 194: , None
! 195: )
! 196: except KeyError:
! 197: pass # Get KeyError when registering duplicate configlet.
! 198:
! 199: def install_transform(self, out):
! 200: try:
! 201: print >>out, "Adding new mimetype"
! 202: mimetypes_tool = getToolByName(self, 'mimetypes_registry')
! 203: newtype = MimeTypeItem.MimeTypeItem('HTML with captioned images',
! 204: ('text/x-html-captioned',), ('html-captioned',), 0)
! 205: mimetypes_tool.register(newtype)
! 206:
! 207: print >>out,"Add transform"
! 208: transform_tool = getToolByName(self, 'portal_transforms')
! 209: try:
! 210: transform_tool.manage_delObjects(['html-to-captioned'])
! 211: except: # XXX: get rid of bare except
! 212: pass
! 213: transform_tool.manage_addTransform('html-to-captioned', 'Products.kupu.plone.html2captioned')
! 214: except (NameError,AttributeError):
! 215: print >>out, "No MimetypesRegistry, captioning not supported."
! 216:
! 217: def install_customisation(self, out):
! 218: """Default settings may be stored in a customisation policy script so
! 219: that the entire setup may be 'productised'"""
! 220:
! 221: # Skins are cached during the request so we (in case new skin
! 222: # folders have just been added) we need to force a refresh of the
! 223: # skin.
! 224: self.changeSkin(None)
! 225:
! 226: scriptname = '%s-customisation-policy' % PROJECTNAME.lower()
! 227: cpscript = getattr(self, scriptname, None)
! 228: if cpscript:
! 229: cpscript = cpscript.__of__(self)
! 230:
! 231: if cpscript:
! 232: print >>out,"Customising %s" % PROJECTNAME
! 233: print >>out,cpscript()
! 234: else:
! 235: print >>out,"No customisation policy"
! 236:
! 237: def install(self):
! 238: out = StringIO()
! 239:
! 240: # register the core layer
! 241: register_layer(self, 'common', 'kupu', out)
! 242:
! 243: # try for plone
! 244: try:
! 245: import Products.CMFPlone
! 246: except ImportError:
! 247: pass
! 248: else:
! 249: install_plone(self, out)
! 250:
! 251: print >>out, "kupu successfully installed"
! 252: return out.getvalue()
! 253:
! 254: def uninstall_transform(self, out):
! 255: transform_tool = getToolByName(self, 'portal_transforms')
! 256: try:
! 257: transform_tool.manage_delObjects(['html-to-captioned'])
! 258: except:
! 259: pass
! 260: else:
! 261: print >>out, "Transform removed"
! 262:
! 263: def uninstall_tool(self, out):
! 264: try:
! 265: self.manage_delObjects([TOOLNAME])
! 266: except:
! 267: pass
! 268: else:
! 269: print >>out, "Kupu tool removed"
! 270:
! 271: def uninstall(self):
! 272: out = StringIO()
! 273:
! 274: # remove the configlet from the portal control panel
! 275: configTool = getToolByName(self, 'portal_controlpanel', None)
! 276: if configTool:
! 277: configTool.unregisterConfiglet('kupu')
! 278: out.write('Removed kupu configlet\n')
! 279:
! 280: uninstall_transform(self, out)
! 281: uninstall_tool(self, out)
! 282: uninstall_resources(self, out)
! 283:
! 284: print >> out, "Successfully uninstalled %s." % PROJECTNAME
! 285: return out.getvalue()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>