用于舒适地激活/停用 Zope 的 CMF 兼容插件的工具。
项目描述
Products.CMFQuickInstallerTool
特征
CMFQuickInstallerTool 是一个用于在 Zope/CMF 站点内轻松激活/停用 CMF 兼容产品的工具。
因此,它必须作为工具安装在 CMF 门户中,其中存储有关已安装产品的信息。
使用 QuickInstallerTool 安装产品的要求非常简单(几乎所有现有的 CMF 产品都满足这些要求):
该产品必须在其Extensions目录(旧样式)中的 python 模块Install.py中实现外部方法安装。
或者
插件/产品附带一个 GenericSetup 扩展配置文件(但没有上述安装方法)。如果有多个配置文件,按字母顺序排列的第一个获胜。
可以卸载产品,并且 QuickInstallerTool 会删除产品在安装过程中创建的以下项目:
门户动作,
门户皮肤,
门户类型,
门户对象(在门户的根目录中创建的对象),
工作流程,
左右插槽(也仅检查门户),
资源注册表项
用法
在 ZMI 中单击 portal_quickinstaller。管理屏幕允许您选择要安装和卸载的产品。您可以浏览已安装的产品并查看创建的内容和安装过程的日志。
自定义卸载
要使用自定义卸载,必须满足以下要求:
该产品必须在其Extensions目录中的 python 模块Install.py中实现外部方法卸载。请注意,在标准删除对象之前(以及除此之外)调用自定义卸载方法。
或者
插件/产品必须附带一个后缀为uninstall的 GenericSetup 扩展配置文件。只有在没有外部方法uninstall时才会在卸载时运行。
安装:
安装(门户)或安装(门户,重新安装)
卸载:
卸载(门户)或卸载(门户,重新安装)
重新安装
重新安装产品调用uninstall() 和install()。如果您有特殊代码在重新安装时的工作方式与卸载/安装不同,您可以向名为“重新安装”的安装或卸载方法添加第二个参数,这仅适用于重新安装。在大多数情况下,您不应该在重新安装时做出不同的反应!
变更日志
4.0.4 (2021-03-02)
Bug修复:
需要“管理门户”权限才能访问该工具或已安装的产品。对于大多数方法,情况已经如此,但您可以从对象本身获取一些信息。[maurits] (#24)
4.0.3 (2020-04-23)
Bug修复:
小的包装更新。(#1)
4.0.2 (2020-03-09)
Bug修复:
修复失败的测试。[tschorr] (#23)
4.0.1 (2019-06-19)
Bug修复:
修复从 Plone 4.3 迁移到 5.2 期间的问题。[pbauer] (#22)
4.0.0 (2018-11-05)
重大变化:
从 CMFPlone 添加了功能和测试。添加了卸载配置文件。并且不再指望被 CMFPlone 安装,尤其是在测试中。标记为 Plone 5.2 作为最低版本。此软件包已报废。您应该改用 GenericSetup配置文件。[maurits] (#18)
Bug修复:
Python 2 / 3 兼容性。[ale-rt, jenses, pbauer] (#20)
3.0.16 (2018-01-30)
Bug修复:
添加 Python 2 / 3 兼容性。[毛里求斯]
添加未声明的 Products.ExternalMethod 依赖项。[埃斯蒂尔]
3.0.15 (2017-02-12)
Bug修复:
修复 Zope4 中删除 Globals 后的导入问题 [pbauer]
3.0.14 (2016-10-03)
Bug修复:
在 QI ZMI 表单中添加了附加组件控制面板的链接。并说表单本身已被弃用。[毛里求斯]
为installProducts重定向应用安全修补程序 20160830 。最重要的是,我们需要一个 POST 请求。[毛里求斯]
3.0.13 (2016-01-08)
新的:
使用Products.GenericSetup 1.8.1 中的unsetLastVersionForProfile。[毛里求斯]
3.0.12 (2015-09-21)
卸载产品时,将其安装配置文件标记为 unknown,因此portal_setup也将其视为未安装。[毛里求斯]
3.0.11 (2015-08-22)
修复了为IPloneSiteRoot 而不是 CMFCore ISiteRoot明确注册的配置文件。3.0.10 中引入的错误。参见例如https://github.com/plone/plone.app.mosaic/issues/124 [maurits]
3.0.10 (2015-07-29)
清理:PEP8、security+zca 的装饰器等。[詹森]
3.0.9 (2015-06-15)
卸载时,如果没有找到其他卸载方法,请始终运行配置文件“卸载”。修复https://github.com/plone/Products.CMFQuickInstallerTool/issues/4 [pbauer]
将端口后未运行的 doctest 重新添加到 plone.app.testing [tomgross]
3.0.8 (2015-03-21)
不再阻止 INonInstallable 配置文件被记录为已安装的产品。(实际上它们是自动安装的产品,而不是不可安装的产品。)[davisagli]
3.0.7 (2014-10-24)
允许将跳过某些步骤的选项传递给 GenericSetup 的 runAllImportStepsFromProfile。[pbauer]
切换到对检测到的错误使用 volatile 属性,这样我们就不会在读取时写入 ZODB [vangheem]
修复了列出可安装产品总是会导致交易有效负载的错误。[马尔蒂]
卸载产品时删除 InstalledProduct 实例。留下实例可能会阻止设置在后续安装产品时正确存储。[罗氏公司]
interfaces/portal_quickinstaller.py:不要使用列表作为默认参数值。[克莱斯特]
将测试移植到 plone.app.testing 并删除 CMFTestCase 依赖项 [tomgross]
PEP8 清理 [tomgross]
3.0.6 (2012-03-15)
修复了通过 GenericSetup 配置文件安装的产品会记录来自所有配置文件依赖项的已安装项目的错误。这将导致在卸载产品时删除太多内容。[达维萨利]
添加一些缺少的测试设置。[达维萨利]
3.0.5 - 2011-03-31
仅在需要时注册测试配置文件。仅测试用例更改。[明白了]
3.0.4 - 2011-02-26
保护 isProductInstalled 使其只能由经理调用。[达维萨利]
删除站点管理员字典中的实用程序映射以启用完全卸载。这解决了一个问题,即基于级联的卸载不会完全删除实用程序,而只是从组件注册表中取消注册它们。
3.0.3 - 2010-11-06
更新了 delete portalobjects 方法以不删除实现 IContentish 或 IFolderish 的项目。这将帮助创建自定义产品并将内容容器置于根目录的人安装 [eleddy]
3.0.2 - 2010-10-27
使用 Zope 2.13+ 中新的 get_registered_packages API 来获取已注册的包,而不是 Products 模块的 _registered_packages 属性。[达维萨利]
3.0.1 - 2010-09-09
卸载控制面板。[埃尔罗]
3.0 - 2010-07-18
使用标准库 doctest 模块。[汉诺施]
3.0b3 - 2010-02-04
重新设计了安装机器的最后一部分,以便在没有产品注册表的情况下工作。[汉诺施]
重构公共代码以检查外部安装方法并将其生成为 utils 中的辅助方法。[汉诺施]
将 listInstallableProducts 从其对产品注册表的依赖中释放出来。[汉诺施]
添加了一个 get_packages 辅助方法来减少对持久产品注册表的依赖,并将 getProductFile 方法转换为使用它。[汉诺施]
3.0b2 - 2010-01-02
将可安装产品屏幕限制为仅列出未注册的扩展配置文件for属性(即任何类型的上下文),或为Products.CMFCore.interfaces.ISiteRoot或 Products.CMFPlone.interfaces.IPloneSiteRoot注册。这允许产品使用另一个标记界面将配置文件组合在一起,而不必担心那些出现在portal_quickinstaller中。[光学]
3.0b1 - 2009-12-27
删除不再需要检查 CMF < 2.1。[汉诺施]
添加了对 Products.CMFCalendar 的缺失测试依赖项。[汉诺施]
3.0a1 - 2009-11-13
进一步优化了handleBeforeProfileImportEvent逻辑。我们忽略任何不可安装的配置文件。[汉诺施]
将测试更改为使用 addProfile 而不是 addProduct 来安装这个包,因为我们自己不再有 Extensions.Install 模块。[汉诺施]
更新了包元数据并清理了旧代码。[汉诺施]
声明包依赖关系并修复使用 Globals 的弃用警告。[汉诺施]
2.1.7 (2009-4-4)
不要使用 GenericSetup 配置文件版本:配置文件版本与包版本无关。[威彻特]
不要使用 GenericSetup 配置文件版本:配置文件版本与包版本无关。[威彻特]
固定动作安装测试。[汉诺施]
在事件处理程序中缓存 listInstallableProducts 以缩短门户创建时间。[斯蒂芬]
使用 aq_parent(aq_inner()) 获取门户根目录,否则如果通过自身获得快速安装工具,我们最终可能会意外获得它。[sidnei]
2.1.6 (2008-07-07)
应用了一个微小的修复程序,导致在日志生成期间良好的安装失败。[天哪]
在 InstalledProduct 的级联删除期间对所有属性检索使用 aq_base,这样我们就不会无意中尝试删除通过获取检索到的内容。[rafrombrc]
2.1.5 (2008-06-02)
改进了 getInstallMethod 以记录 ImportError 而不是静默跳过它。即使在实例启动时没有引发错误,也不清楚为什么产品不会出现在 QI 中。[纳罗]
更喜欢按标题而不是 id 对可安装和已安装产品的列表进行排序。[汉诺施]
正确处理具有 CMF2.1 之前样式操作的产品 [wichert]
2.1.4 (2008-04-27)
即使使用旧式安装方法和 GenericSetup 配置文件 [encolpe] 发生相同的错误,它也应该只显示一次
在查找产品的安装方法时,getInstallMethod 应该忽略 ImportError。这使得安装具有工作 GenericSetup 配置文件但安装外部方法损坏的产品成为可能。[威彻特]
2.1.3 (2008-04-21)
修复了来自“产品”命名空间的包的 getInstallProfile 方法。这允许 Quickinstaller 显示配置文件标题而不是产品名称。[encolpe]
2.1.2 (2008-04-20)
当产品来自“产品”命名空间并且在控制面板中同时具有安装配置文件和条目时修复。[encolpe]
添加了 getattr 代码以确保卸载未正确安装的产品不会那么容易失败。[汉诺施,维切特]
为 DEFAULT_CASCADE 中的所有值添加了初始化代码。否则,您可能会在卸载通过 notifyInstalled 安装的产品时出错。[汉诺施,维切特]
当 README 文件包含非 ascii 字符时,显示附加产品 README 文件可能会生成 UnicodeDecodeError。这将关闭 http://dev.plone.org/plone/ticket/7524。[汉诺施]
从 QuickInstaller 中删除了所有错误吞咽选项。如果在产品安装过程中遇到错误,我们现在总是会引发错误。这将关闭http://dev.plone.org/plone/ticket/7536。[汉诺施]
2.1.1 (2008-03-26)
添加了 getProductDescription 方法以公开扩展配置文件中的描述。[汉诺施]
添加了新的 listInstallableProfiles 方法,以在列表中包含没有 Zope2 控制面板条目的产品。[汉诺施]
收紧一些安全设置。[汉诺施]
修复了 CMF 2.1 之前安装的产品的重新/卸载操作。这将关闭http://dev.plone.org/plone/ticket/6974。[汉诺施]
恢复了在 c38815 中意外删除的代码。[汉诺施]
2.1 (2008-03-09)
将 metadata.xml 添加到 GenericSetup 配置文件。[汉诺施]
避免破坏没有 left 或 rightslots 属性的 InstalledProduct 实例。感谢 Cpi Progetti Spa 的 OpenCpi 部门的 Roberto Fontanarosa。[汉诺施]
修复了 utils 中的日志记录代码。这将关闭 http://dev.plone.org/plone/ticket/7093。[布利斯,汉诺施]
还原了 getUtility 的使用。关闭http://dev.plone.org/plone/ticket/7314。[汉诺施]
修复了 InstalledProduct 中的类变量。所有产品将共享相同的左插槽和右插槽属性。感谢 Saverio Mucci 注意到这一点。[汉诺施]
挂钩由 GenericSetup 的开发版本生成的导入事件。这允许我们在成功导入其配置文件时自动将产品标记为已安装。[威彻特]
避免不必要的事务保存点。[汉诺施]
2.0.3 (2007-07-09)
使用新的 GenericSetup 功能,因此我们不必再更改当前的设置工具上下文。[汉诺施]
2.0.2b3 (2007-05-01)
回到 getToolByName。[威彻特]
添加了对实用程序的卸载支持。产品安装的所有附加实用程序现在都已正确记录和卸载。[汉诺施]
2.0.2b2 (2007-03-23)
向 installProduct 方法添加了新的配置文件参数,以显式设置应用于安装的配置文件。[汉诺施]
也将 Products.CMFQI 包标记为可卸载。[汉诺施]
将所有 getToolByName 调用替换为 get/queryUtility。[汉诺施]
2.0.2b1 (2007-03-05)
不要在标准列表中显示已删除的产品。[汉诺施]
调整 listInstallable 和 listInstalled 方法以返回 GenericSetup 配置文件的标题而不是包名称,用于基于扩展配置文件的安装。这些看起来好多了;)这修复了 http://dev.plone.org/plone/ticket/6129。[汉诺施]
2.0.1 (2007-02-10)
调整 installProduct 方法以与 CMF 2.1 兼容(包括将工具转换为实用程序)。[汉诺施]
重构的 ResourceRegistries 支持不要求将产品本身安装在 QI 中。[汉诺施]
添加了 INonInstallable 接口,用于查找提供不可安装产品列表的实用程序。这允许应用程序从可安装产品列表中排除某些产品。[汉诺施]
添加了一个省略快照创建的选项,该选项默认为 True 以加快测试运行和迁移。[汉诺施]
我们现在在安装前后自动创建一个 GenericSetup 快照,因此您至少可以比较产品在安装期间所做的更改。不过,我们还没有更好的卸载方式。[汉诺施]
2.0.0 (2006-10-25)
略微优化基于 GenericSetup 配置文件的安装。[汉诺施]
调整了操作安装跟踪以与 CMF 2.1+ 一起使用。[汉诺施]
使基于配置文件的安装适用于 CMF 2.1+。配置文件 ID 现在可以使用完整的包名称,而不仅仅是产品名称(例如:Products.CMFCalendar 而不是 CMFCalendar)。[汉诺施]
将 GS 配置文件注册更改为基于 zcml。修复了记录调用的一些问题。从测试中删除了一些陈旧的代码。[汉诺施]
删除了许多未使用的和 bbb 代码。此版本至少需要 CMF 1.6。[汉诺施]
添加了对基于 GenericSetup 扩展配置文件的安装的支持。[汉诺施]
1.6.1 (2007-04-28)
禁用产品重新安装的 postonly 保护。这破坏了 Plone 控制面板上的重新安装功能。更改控制面板后,可以启用 postonly 保护。[汉诺施]
1.6.0 (2007-04-22)
对产品卸载和重新安装应用 postonly 保护。[阿莱姆]
1.5.9 (2006-06-01)
修复了 utils.py 中两个缺失的导入。这将关闭 http://dev.plone.org/plone/ticket/5529。[汉诺施]
1.5.8 (2006-05-15)
一些一般的春季大扫除。[汉诺施]
避免产品名称的 DeprecationWarning。[汉诺施]
添加了显示产品目录和调试模式的方法(如果启用)[joelburton]
1.5.7 (2005-12-23)
在添加新类型并安装 ResourceRegistries 时烹饪资源。[fschulze]
如果我们正在重新安装,如果我们看到异常但显示真正的错误消息,请不要说该产品已安装 [wichert]
1.5.6 (2005-12-18)
修复 utils.py 中缺少的导入。这将关闭 http://dev.plone.org/plone/ticket/4817。[汉诺施]
1.5.5
跟踪 ResourceRegistries 条目。[zwork]
1.5.4
listInstalledProducts 和 listInstallableProducts 现在返回按字母顺序排列的列表。[杰夫德]
捕获产品存在但无法通过编译安装的错误,这会拾取语法错误并将它们添加到错误字典中。调用 listInstallableProducts 时,将重新填充错误字典。除了 ConflictErrors 之外,还添加了一些。[安迪姆]
修复 plone 错误 #3113,如果没有选择任何项目,“卸载”按钮会引发异常;这使得 uninstallProducts() 方法与 installProducts() 方法对称 [optilude]
1.5.3
添加了 Extensions.Install 模块和初始测试套件。[斯蒂芬]
为 install() 和 uninstall() 方法添加了可选的重新安装参数 [tiran]
通过使 parser.py 更优雅地处理丢失的产品目录来启用已删除产品的卸载。[特斯达尔]
修复了多个寄存器的错误
QI 不会将对象分配给已经为另一个产品注册的产品。这修复了一些错误,例如当移除本身已安装 Archetypes 的产品时移除原型工具。[蒂兰]
添加了 afterInstall / beforeUninstall 钩子:
out = afterInstall(portal, reinstall=reinstall, qi_product) out, cascade = beforeUninstall(portal, reinstall, qi_product, cascade) [tiran]
1.4
重新安装按钮
与卸载/安装相同,只是它_不_删除已在 portal_level (portal_objects) 上创建的对象
产品版本信息
将 getProductVersion 添加到 API 显示已安装产品的产品版本它还显示安装时产品的版本
安迪·麦凯
从尝试创建外部方法中删除 except: pass,如果导入日志中有错误,则将错误发送到 ZLOG。不幸的是,我们还必须尝试捕获一个字符串错误。当找不到模块时会发生该字符串错误,因此我们应该忽略它。
内容类型注册表支持
QuickInstaller 现在还跟踪 content_type_registry 中的条目。
如果产品已从光盘中删除,请在已安装列表中将其标记为“已删除”
添加了一个变更日志:)