Python 金字塔订阅服务器谓词不工作

Python 金字塔订阅服务器谓词不工作,python,pyramid,Python,Pyramid,我使用的是金字塔1.4a1,我有一个订户谓词: class RouteName(object): ''' Subscriber predicate to check against route name. ''' def __init__(self, value, config): self.value = value self.config = config def text(self): return

我使用的是金字塔1.4a1,我有一个订户谓词:

class RouteName(object):
    '''
    Subscriber predicate to check against route name.
    '''

    def __init__(self, value, config):
        self.value = value
        self.config = config

    def text(self):
        return 'route_name = %s' % self.value
    phash = text

    def __call__(self, event):
        route_name = event.request.matched_route.name
        return route_name == self.value
我这样补充:

config.add_subscriber_predicate('route_name', RouteName)
但是,每当我尝试使用它时,就像这样:

@subscriber(ContextFound, route_name='user.register')
def check_invitation(event):
    # Check invitation token before running registration view code ...
我得到了这个回溯:

Traceback (most recent call last):
  File "/Workspace/Personal/project/.env/bin/pserve", line 8, in <module>
    load_entry_point('pyramid==1.4a1', 'console_scripts', 'pserve')()
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 47, in main
    return command.run()
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 290, in run
    relative_to=base, global_conf=vars)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py", line 318, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 272, in loadobj
    return context.create()
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 710, in create
    return self.object_type.invoke(self)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 146, in invoke
    return fix_call(context.object, context.global_conf, **context.local_conf)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/util.py", line 56, in fix_call
    val = callable(*args, **kw)
  File "/Workspace/Personal/project/project/__init__.py", line 49, in main
    return config.make_wsgi_app()
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 955, in make_wsgi_app
    self.commit()
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 629, in commit
    self.action_state.execute_actions(introspector=self.introspector)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 1083, in execute_actions
    tb)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/config/__init__.py", line 1075, in execute_actions
    callable(*args, **kw)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/config/adapters.py", line 53, in register
    order, preds, phash = predlist.make(self, **predicates)
  File "/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/config/util.py", line 264, in make
    pred = predicate_factory(val, config)
pyramid.exceptions.ConfigurationExecutionError: <type 'exceptions.TypeError'>: object.__new__() takes no parameters
  in:
  Line 80 of file /Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/events.py:
    config.add_subscriber(wrapped, iface, **self.predicates)
回溯(最近一次呼叫最后一次):
文件“/Workspace/Personal/project/.env/bin/pserve”,第8行,在
加载入口点('pyramid==1.4a1','console\u scripts','pserve')()
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/scripts/pserve.py”,第47行,主目录
return命令。run()
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/scripts/pserve.py”,第290行,正在运行
相对位置=基准,全局位置=变量)
loadapp中的文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/scripts/pserve.py”,第318行
返回loadapp(应用规格,名称=名称,相对到=相对到,**千瓦)
loadapp中的文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第247行
返回loadobj(应用程序,uri,name=name,**kw)
loadobj中的文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第272行
返回context.create()
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第710行,在create中
返回self.object\u type.invoke(self)
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第146行,在invoke中
返回修复调用(context.object、context.global\u conf、**context.local\u conf)
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/util.py”,第56行,在fix_call中
val=可调用(*参数,**kw)
文件“/Workspace/Personal/project/project/_init__.py”,第49行,在main中
return config.make_wsgi_app()
make_wsgi_应用程序中的文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/config/_init__.py”,第955行
self.commit()
提交中的文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/config/_init__.py”,第629行
self.action\u state.execute\u actions(introspector=self.introspector)
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/config/_init__.py”,第1083行,在执行操作中
结核病)
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/config/_init__.py”,执行操作中的第1075行
可调用(*参数,**kw)
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/config/adapters.py”,第53行,在寄存器中
order,preds,phash=predlist.make(self,**谓词)
文件“/Workspace/Personal/project/.env/local/lib/python2.7/site packages/pyramid/config/util.py”,第264行,在make中
pred=谓词工厂(val,config)
pyramid.exceptions.ConfigurationExecutionError::object.\uuu new\uuuu()不接受任何参数
在:
文件/Workspace/Personal/project/.env/local/lib/python2.7/site-packages/pyramid/events.py的第80行:
config.add_订阅服务器(包装、iface、**self.predicates)

我还以同样的方式注册了一个自定义视图谓词,它工作得很好,所以我不知道我在这里做错了什么。

我认为您的代码中有一个输入错误。下面的应用程序 在1.4a1下工作。如果您访问/它打印检查。如果你拜访了另一个人, 它没有:

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.events import subscriber, ContextFound
from pyramid.view import view_config

class RouteName(object):
    '''
    Subscriber predicate to check against route name.
    '''

    def __init__(self, value, config):
        self.value = value
        self.config = config

    def text(self):
        return 'route_name = %s' % self.value

    phash = text

    def __call__(self, event):
        route_name = getattr(event.request.matched_route, 'name', None)
        return route_name == self.value

@subscriber(ContextFound, route_name='home')
def check(event):
    print 'checked'

@view_config(renderer='string', route_name='home')
def home(request):
    return 'home'

@view_config(renderer='string', route_name='another')
def another(request):
    return 'another'

if __name__ == '__main__':
    config = Configurator()
    config.add_subscriber_predicate('route_name', RouteName)
    config.add_route('home', '/')
    config.add_route('another', '/another')
    config.scan()
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()