问题标签 [zope.component]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
319 浏览

python - 用工厂和组件定义的 Zope 实用程序有什么区别?

Zope 实用程序的 ZCML 注册可以接受组件或工厂,这有点令人困惑。

<utility component=".some.Class" />

相对

<utility factory=".some.Factory" />

有什么不同?

0 投票
3 回答
4949 浏览

python - 在 Python 中模拟 ImportError

我现在尝试了将近两个小时,没有任何运气。

我有一个看起来像这样的模块:

稍后在代码中:

有任何想法吗?

编辑:

亚历克斯的建议似乎不起作用:

运行测试时:

但是,当我从 python 交互式控制台运行相同的代码时,它确实有效。

更多编辑:

我正在使用zope.testing一个测试文件,shorturl.txt其中包含特定于我模块的这一部分的所有测试。首先,我正在导入zope.component可用的模块,以演示和测试通常的用法。没有zope.*包被认为是一种极端情况,所以我稍后会对其进行测试。因此,我必须以某种方式reload()使我的模块zope.*不可用。

到目前为止,我什至尝试在 tempdir 中使用tempfile.mktempdir()和清空zope/__init__.pyand文件,然后将zope/component/__init__.pytempdir 插入到.sys.path[0]zope.*sys.modules

也没有用。

更多编辑:

与此同时,我试过这个:

它适用于测试套件的命名空间(= 中的所有导入shorturl.txt),但它不在我的主模块中执行,ao.shorturl. 甚至当我reload()它。知道为什么吗?

导入zope.interfaces会引发ImportError,因此它不会到达我 import 的部分zope.component,并且它保留在 ao.shorturl 命名空间中。为什么?!

0 投票
2 回答
515 浏览

python - Python,Zope 组件架构,注册适配器

在一个独立的 python 应用程序中,我使用zope.interfacezope.component包来注册和访问应用程序的适配器。我想我可以使用元类概念从元类的init方法中注册适配器。这将“自动化”适配器的注册过程。您是否看到这种方法存在问题,例如使用 zope 包添加到类的属性?提前感谢您的意见。

0 投票
1 回答
97 浏览

plone - 为 zope 组件提供向后兼容性

我正在开发一个新版本的collective.imagetags,其中浏览器视图(imagetags-manage)承载的所有功能现在都移到了一个新适配器(尚未提交),它提供了与浏览器视图几乎相同的界面:

我真的不知道是否有人在项目中使用这个产品,但是,我认为提供一些向后兼容机制是一个明智的想法,以防有人在外面使用浏览器视图方法。盒子功能。

我应该怎么办?使用在新适配器上中继的存根方法保留浏览器视图的界面?有什么建议吗?

0 投票
1 回答
159 浏览

python - Zope 组件架构组件是否需要声明它实现的接口?

注意:我是ZCA的新手,所以代码可能不正确;但是,我对 ZCA 的工作方式有些熟悉。

举个例子:

是否需要这implements(I1)条线,或者 ZCA 可以自己弄清楚 U1 实现了 I1(有点像 Go 中的接口工作方式)?

0 投票
1 回答
374 浏览

python - 了解 Zope 组件架构和组件依赖性

我的问题很难有一个好的标题。据我了解,Adapter 是在不改变组件的情况下,为组件添加更多的服务。适配器可以从多个组件扩展服务。

但是组件之间的依赖关系呢?如何像这个普通的 Python 代码一样设置组件 A (Person) 和组件 B (Task) 之间的依赖关系

如果我实现了 2 个类

这是一个很好的实现吗?

0 投票
0 回答
237 浏览

plone - getMultiAdapter 失败并出现 ComponentLookupError

我有一个代码可以使用 get multi 适配器查找 iterface。传递给多适配器的元素成员之一是提供该接口,但不提供元素本身。

我无法控制传递给多适配器的内容,但我可以控制包含其中一个元素的元素。我该如何标记它?通知多适配器那里有一些有用的东西,是否有类似provideAdapterFactory(cls, interface)的东西?

代码示例:

声明

抬头

现在,如果我像这样运行代码,它将产生ComponentLookupError,同时我无法修改查找代码或多适配器,或者就此而言,我无法将 'implements(IMarker) 分配给 Parent,因为 parent 已经实现了不同的接口和会破坏很多其他的东西。

更新:

我想我已经从第 6.1 章多适配器中找到了一个我可以理解的解释

更新 2:我认为我没有在我的单元测试代码中正确初始化 zca,这是一个片段

0 投票
1 回答
84 浏览

python - 接口(obj)和getAdapter(obj,接口)之间的Zope组件差异

什么可能导致 Interface(obj) 返回 obj,而 getAdapter(obj, Interface) 返回一个经过适当调整的对象?

0 投票
1 回答
87 浏览

python - zope.component 订户适配器适应多个对象的问题

给定以下代码:

它产生的输出是:

为什么返回 AB 的实例?AB 只声明它适应 A 和 B。有没有一种方法可以实现只返回 AC 的行为?

0 投票
1 回答
300 浏览

zope.interface - 将 Zope 组件注册到 GlobalSiteManager 有什么意义?

我正在阅读关于 zope 组件架构的精彩教程:

http://www.muthukadan.net/docs/zca.html#adapters

我似乎无法理解适配器章节。

如我错了请纠正我。上面的类FrontDeskNG是一个适配器,对吧?正如文章中所写:

FrontDeskNG 是 IDesk 的一个适配器,它适配了 IGuest

好的,现在我有了适配器,为什么我必须先注册GlobalSiteManager才能使用它?

我正在开发手机游戏后端,我想通过查看 Zope 组件架构来使代码更加模块化。我需要能够用任何数据库技术替换我的存储并且让代码仍然有效。这似乎是 ZCA 自豪地宣传的东西。我从未读过著名的 GoF 设计模式书,所以请多多包涵。