Pyramid tarafından kullanılan olay sistemi, Sinyaller sistemi ile aynı kullanım durumlarını karşılar. Uygulamanız keyfi etkinlikleri tanımlayabilir ve bunlara abone ekleyebilirsiniz.
from zope.interface import (
Attribute,
Interface,
)
class IMyOwnEvent(Interface):
foo = Attribute('The foo value')
bar = Attribute('The bar value')
Daha sonra olayın gerçek uygulanmasını tanımlamak:
bunun için bir arabirim tanımlamak, yeni bir etkinlik oluşturmak için arayüz aslında isteğe bağlıdır
from zope.interface import implementer
@implementer(IMyOwnEvent)
class MyOwnEvent(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
ama yardımcı olur dokümantasyon ve birden fazla uygulama sunmayı kolaylaştırır. Böylece arayüz tanımı ve @implementer
parçalarının tamamen kaldırılmasıyla birlikte uzaklaşabilirsiniz.
Bu olayı işaret etmek istediğiniz her yerde, registry.notify
yöntemini kullanın; Burada sana kayıt ulaşmak için mevcut bir isteği var varsayalım: Bu, kaydettiğiniz herhangi abonelere istek gönderirsiniz
request.registry.notify(MyOwnEvent(foo, bar))
; Ya config.add_subscriper
veya pyramid.events.subscriber
ile birlikte:
from pyramid.events import subscriber
from mymodule.events import MyOwnEvent
@subscriber(MyOwnEvent)
def owneventsubscriber(event):
event.foo.spam = 'eggs'
Ayrıca MyOwnEvent
sınıfın yerine IMyOwnEvent
arayüzü kullanabilirsiniz ve abone arayüzü, söz konusu etkinliğin sadece belirli uygulanmasını uygulamak tüm olayların bildirilecektir.
Abonelerin bildirilmesinin, özel durumları asla yakalamadığını unutmayın (Django'da send_robust
gibi).