From: mike <svn...@pl...> - 2006-07-31 21:34:15
|
Author: mike Date: Mon Jul 31 21:34:11 2006 New Revision: 26561 Modified: CMFBibliographyAT/trunk/Extensions/Install.py Log: the ActionIcon tool is pretty picky with already existing icons, and easily causes product install to fail with a KeyError: 'Duplicate definition!'. To avoid this, the removeActionIcons function is called on install AND uninstall o ('plone', 'downloadBib') -> deprecated, has been renamed to exportBib o ('plone', 'exportBib'), o ('plone', 'download_pdf') -> just in case uninstall ai remove failed on product uninstall o ('controlpanel', 'BibliographySetup') -> in case of an error raised after adding the bibliography tool during last product install Modified: CMFBibliographyAT/trunk/Extensions/Install.py ============================================================================== --- CMFBibliographyAT/trunk/Extensions/Install.py (original) +++ CMFBibliographyAT/trunk/Extensions/Install.py Mon Jul 31 21:34:11 2006 @@ -18,7 +18,7 @@ from Products.CMFBibliographyAT.config import * from Products.CMFBibliographyAT.tool.parsers import * -from Products.CMFBibliographyAT.tool.renderers import * +from Products.CMFBibliographyAT.tool.renderers import * from Products.CMFBibliographyAT.migrations import cmfbib08to09 # helper methods to be called on tool installation @@ -26,29 +26,29 @@ def addParsers(self): """ helper method to set up a few parsers - """ + """ if getattr(self.aq_explicit, 'bibtex', None) is None: - bibparser = BibtexParser('bibtex') - self._setObject('bibtex', bibparser) - if getattr(self.aq_explicit, 'medline', None) is None: - medparser = MedlineParser('medline') - self._setObject('medline', medparser) - if getattr(self.aq_explicit, 'ibss', None) is None: + bibparser = BibtexParser('bibtex') + self._setObject('bibtex', bibparser) + if getattr(self.aq_explicit, 'medline', None) is None: + medparser = MedlineParser('medline') + self._setObject('medline', medparser) + if getattr(self.aq_explicit, 'ibss', None) is None: ibssparser = IBSSParser('ibss') self._setObject('ibss', ibssparser) - if getattr(self.aq_explicit, 'isbn', None) is None: + if getattr(self.aq_explicit, 'isbn', None) is None: isbnparser = ISBNParser('isbn') self._setObject('isbn', isbnparser) - if getattr(self.aq_explicit, 'endnote', None) is None: + if getattr(self.aq_explicit, 'endnote', None) is None: endparser = EndNoteParser('endnote') self._setObject('endnote', endparser) - if getattr(self.aq_explicit, 'ris', None) is None: + if getattr(self.aq_explicit, 'ris', None) is None: risparser = RISParser('ris') self._setObject('ris', risparser) - if getattr(self.aq_explicit, 'xml_mods', None) is None: - xmlparser = XMLParser('xml_mods') - self._setObject('xml_mods', xmlparser) - if getattr(self.aq_explicit, 'citationmanager', None) is None: + if getattr(self.aq_explicit, 'xml_mods', None) is None: + xmlparser = XMLParser('xml_mods') + self._setObject('xml_mods', xmlparser) + if getattr(self.aq_explicit, 'citationmanager', None) is None: citationmanagerparser = CitationManagerParser('citationmanager') self._setObject('citationmanager', citationmanagerparser) @@ -153,7 +153,7 @@ if not cp: out.write("No control panel found. Skipping installation of the setup panel.\n") else: - cp.addAction(id='BibliographySetup', + cp.addAction(id='BibliographySetup', name='Bibliography Setup', action='string:${portal_url}/prefs_bibliography_form', permission='Manage portal', @@ -162,6 +162,7 @@ imageUrl='bib_tool.png', description='Configure global settings of the bibliography tool.') out.write("Installed the bibliography tool configuration panel.\n") + def addActions(self, out): ap=getToolByName(self, 'portal_bibliography') @@ -184,14 +185,9 @@ ai = getToolByName(self, 'portal_actionicons', None) if ai is not None: - # Try to remove the old 'download' action icon - try: - ai.removeActionIcon('plone','downloadBib') - except KeyError: - pass + # Add the 'export' action icon (download icon) - ai.addActionIcon('plone','exportBib','download_icon.gif','Export',0) - # and the pdf action + ai.addActionIcon('plone','exportBib','download_icon.gif','Export',0) ai.addActionIcon('plone','download_pdf','pdf.png','Printable file',0) def changeDefaultViewFor(self, out, type): @@ -247,7 +243,7 @@ If needed, the author data of bib items will be recovered """ bibtool = getToolByName(self, 'portal_bibliography') - if bibtool.needsUpgrade(): + if bibtool.needsAuthorSchemaUpgrade(): bibtool.updateAuthorSchema() out.write("Recovered the author data.\n") @@ -296,17 +292,24 @@ "the 'text/x-html-safe' policy." else: print >>out, "Checked transformation policy" - -def autoMigrate(self, out): - migration = cmfbib08to09.Migration(self, out) - migration.migrate() + +def autoMigrate(self, out): + migration = cmfbib08to09.Migration(self, out) + migration.migrate() def install(self): out = StringIO() + # the ActionIcon tool is pretty picky with already existing icons, and easily causes product install + # to fail with a KeyError: 'Duplicate definition!'. + # + # To avoid this, we try to get rid of all our icons before re-installing them... + # + removeActionIcons(self) + setupTool(self, out) - addActions(self,out) addPrefsPanel(self, out) + addActions(self,out) addToCatalog(self,out) installTypes(self, out, listTypes(PROJECTNAME), @@ -318,12 +321,12 @@ fixBibFolderView(self, out) # for backwards compatibility setFolderWorkflow(self, out) addCTREntry(self, out) - + autoMigrate(self, out) - + updateAuthorSchema(self, out) - print >> out, "Successfully installed %s's content types." % PROJECTNAME - + print >> out, "Successfully installed %s's content types." % PROJECTNAME + return out.getvalue() # the uninstall need's the following functions @@ -343,13 +346,24 @@ acttool.deleteActionProvider('portal_bibliography') def removeActionIcons(self): + ai = getToolByName(self, 'portal_actionicons') - for id in ['exportBib', 'download_pdf']: - try: - ai.removeActionIcon('plone',id) - except KeyError: - pass + # the ActionIcon tool is pretty picky with already existing icons, and easily causes product install + # to fail with a KeyError: 'Duplicate definition!'. + # + # To avoid this, this function is called on install AND uninstall + # + # o ('plone', 'downloadBib') -> deprecated, has been renamed to exportBib + # o ('plone', 'exportBib'), + # o ('plone', 'download_pdf') -> just in case uninstall ai remove failed on product uninstall + # o ('controlpanel', 'BibliographySetup') -> in case of an error raised after adding the bibliography + # tool during last product install + for category, id in [('plone', 'downloadBib'), ('plone', 'exportBib'), ('plone', 'download_pdf'), ('controlpanel', 'BibliographySetup'),]: + try: + ai.removeActionIcon(category,id) + except KeyError: + pass def uninstall_transform(self, out): transform_tool = getToolByName(self, 'portal_transforms') @@ -363,8 +377,8 @@ def uninstall(self): out = StringIO() removeFromActionProviders(self) - removeActionIcons(self) removePrefsPanel(self) + removeActionIcons(self) uninstall_transform(self, out) # all the rest of the cleaning we leave to quickinstaller print >> out, "Uninstalled CMFBibliographyAT." |