标签: zope

您如何以编程方式重新排序ATFolder子类的子项?

我有Plone产品,它使用自定义文件夹类型来包含一组自定义内容对象.文件夹类型是通过子类化BaseFolder创建的,它有一个包含几个文本字段的模式.目前,当自定义对象添加到自定义文件夹时,对象按其字母顺序排序.如何覆盖此行为并允许我的用户手动对自定义文件夹进行排序,例如通过"内容"视图?

python zope plone archetypes

6
推荐指数
1
解决办法
453
查看次数

从陷入困境的python进程中获取stacktrace

我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.

问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL.

是否还有另一种可能性来确定卡住的过程究竟在哪里?

python debugging zope infinite-loop

6
推荐指数
2
解决办法
6139
查看次数

python包命名空间的背后是什么:z3c,zc,collective?

所以他们都与zope有某种关系.问题是怎么样的?

我对Zope不熟悉.我想,ZC,Z3C代表Zope ComponentZope3 Component,但我想肯定.还有一个collective命名空间.它下面有什么样的套餐?

什么是其他众所周知的python包命名空间?

当包用zc,z3c和其他包命名时,是否有任何约定?

有时我看到以zc开头的包,我无法理解为什么它们是命名空间的.例如,z3c.sqlalchemy有命名空间,因为它是sqlalchemyzope项目的包装器.但另一个例子zc.buildout看起来像一个完全独立的项目.它是否仅仅因为它是由在Zope上工作的人开发而得到名称空间?如果我会在Zope上工作,那就意味着我应该为我的项目添加前缀,zc即使它们与任何其他Zope包都不相关?

python zope

6
推荐指数
1
解决办法
305
查看次数

什么时候在我的tal:条件上使用nocall?

我知道为了性能,最好nocall在a 上使用<tal:condition>以避免调用对象.会欣赏(链接)一些背景,因为这对我来说听起来有点模糊:-)

所以你什么时候使用nocall?把它放在我所有的条件下会不会受伤?

谢谢 !

performance zope plone zpt template-tal

6
推荐指数
2
解决办法
904
查看次数

Zope:无法访问属性装饰器下的REQUEST

我正在尝试在类中使用属​​性装饰器.虽然它本身很好用,但我不能使用任何必须访问的代码REQUEST.

class SomeClass():
   #Zope magic code
   _properties=({'id':'someValue', 'type':'ustring', 'mode':'r'},)

  def get_someValue(self):
    return self.REQUEST

  @property
  def someValue(self):
    return self.REQUEST
Run Code Online (Sandbox Code Playgroud)

虽然打电话get_someValue让我得到了理想的结果,但试图访问someValue会引发一个问题AttributeError.

这种行为背后的逻辑是什么?有没有办法解决这个限制?

(我使用的是Zope 2.13.16,Python 2.7.3)

python zope properties request

6
推荐指数
1
解决办法
224
查看次数

ZCML和ViewPageTemplateFile中的模板有什么区别

在Plone中创建BrowserView时,我知道我可以选择使用ZCML配置模板,如下所示:

<configure

    xmlns:browser="http://namespaces.zope.org/browser"
    >

    <browser:page
        …
        class=".foo.FooView"
        template="foo.pt"
        …
        />

</configure>
Run Code Online (Sandbox Code Playgroud)

或者在代码中:

# foo.py
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.publisher.browser import BrowserPage


class FooView(BrowserPage):
    """
    My View
    """

    def __call__(self):
        return ViewPageTemplateFile('foo.pt')(self)
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别吗?它们似乎都产生相同的结果.

子问题:我知道有一个BrowserView类可以导入,但通常每个人都使用BrowserPage.如果这两个类之间存在任何显着差异怎么办?

python zope plone zcml

6
推荐指数
2
解决办法
454
查看次数

Plone memberdata更新:未触发PropertiesUpdatedEvent

我正在尝试在@@ personal-information上更新成员属性后执行操作,但事件未被触发.在configure.zcml上我放了以下内容:

<subscriber
    for="Products.PluggableAuthService.interfaces.events.IPropertiesUpdatedEvent"
    handler=".subscribers.propertiesUpdated"
/>
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用ipdb检查subscriber.py的propertiesUpdated是否正在执行,但事实并非如此.

我已经检查了https://bugs.launchpad.net/zope-pas/+bug/795086错误报告,该报告说这个错误已经修复,但它仍然无效.

我正在使用PluggableAuthService 1.10.0.

有没有更好的方法来解决这个问题?

python events zope plone event-handling

6
推荐指数
1
解决办法
168
查看次数

SQLAlchemy,Serializable事务隔离和以惯用Python方式重试

PostgreSQL和SQL定义了Serializable事务隔离级别.如果将事务隔离到此级别,则冲突的并发事务将中止并需要重试.

我熟悉Plone/Zope世界的事务重试概念,在发生事务冲突的情况下可以重放整个HTTP请求.如何使用SQLAlchemy(以及可能使用zope.sqlalchemy)实现类似的功能?我试着阅读zope.sqlalchemy和Zope事务管理器的文档,但这对我来说并不明显.

特别想要这样的东西:

  # Try to do the stuff, if it fails because of transaction conflict do again until retry count is exceeded
  with transaction.manager(retries=3):
        do_stuff()

  # If we couldn't get the transaction through even after 3 attempts, fail with a horrible exception
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy zope pyramid

6
推荐指数
1
解决办法
1193
查看次数

以编程方式停止请求

在工作中,我们时不时地要求返回那么久,当它们完成时,前端(nginx)已经杀死了连接,因此用户将看不到输出(无论是好还是坏).

最糟糕的是,平衡器(haproxy)也将终止连接,然后假设服务器可以自由处理另一个请求,这意味着当服务器仍在处理旧请求时,新的请求会进入并争夺资源.

理想情况下,服务器应该一次只处理一个请求以尽可能多地重用与ZEO数据库的连接线程,因此同时运行两个请求会使服务器更慢,然后我们的一个监控系统正确地重新启动plone因为假人证明它发送时间.

所以给定一些逻辑(可能重用我们已经使用的Products.LongRequestLogger)有没有办法告诉线程处理请求停止这样做?

performance zope plone

6
推荐指数
1
解决办法
108
查看次数

sqlalchemy.exc.ResourceClosedError:此事务已关闭

使用 SQLAlchemy 和 Zope 事务管理器时,在 Pyramid 应用程序中遇到以下错误。

这就是我创建范围会话的方式:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import MetaData

from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    )
from zope.sqlalchemy import ZopeTransactionExtension

metadata = MetaData(naming_convention=NAMING_CONVENTION)
Base = declarative_base(metadata=metadata)
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension(keep_session=True)))
Run Code Online (Sandbox Code Playgroud)

我通过以下方式将我的会话创建和删除与我的请求同步:

@view_config(route_name='social_get_individual_assets', renderer='json', effective_principals=2, permission='edit')
def social_get_individual_assets(requestJson):
            session = DBSession()
            try:
                body = requestJson.request.json_body
                search_term = body['text']
                horizontal = body['horizontal']
                vertical = body['vertical']
                log.info("social get individual assets request: %s", str(search_term).encode(encoding='utf_8'))
                json_data = get_individual_assets(session, search_term, horizontal, vertical)
                log.info("social get assets response: %s", str(search_term).encode(encoding='utf_8'))
                transaction.commit()
                DBSession.remove() …
Run Code Online (Sandbox Code Playgroud)

python transactions sqlalchemy zope pyramid

6
推荐指数
1
解决办法
5211
查看次数