kotti.events

This module includes a simple events system that allows users to subscribe to specific events, and more particularly to object events of specific object types.

See also: Events.

Inheritance Diagram

Inheritance diagram of kotti.events

class kotti.events.ObjectEvent(obj, request=None)[source]

Event related to an object.

class kotti.events.ObjectInsert(obj, request=None)[source]

This event is emitted when an object is inserted into the DB.

class kotti.events.ObjectUpdate(obj, request=None)[source]

This event is emitted when an object in the DB is updated.

class kotti.events.ObjectDelete(obj, request=None)[source]

This event is emitted when an object is deleted from the DB.

class kotti.events.ObjectAfterDelete(obj, request=None)[source]

This event is emitted after an object has been deleted from the DB.

Deprecated since version 0.9.

class kotti.events.UserDeleted(obj, request=None)[source]

This event is emitted when an user object is deleted from the DB.

class kotti.events.DispatcherDict(*a, **kw)[source]
copy() a shallow copy of od[source]
class kotti.events.Dispatcher(*a, **kw)[source]

Dispatches based on event type.

>>> class BaseEvent(object): pass
>>> class SubEvent(BaseEvent): pass
>>> class UnrelatedEvent(object): pass
>>> def base_listener(event):
...     print('Called base listener')
>>> def sub_listener(event):
...     print('Called sub listener')
>>> def unrelated_listener(event):
...     print('Called unrelated listener')
...     return 1
>>> dispatcher = Dispatcher()
>>> dispatcher[BaseEvent].append(base_listener)
>>> dispatcher[SubEvent].append(sub_listener)
>>> dispatcher[UnrelatedEvent].append(unrelated_listener)
>>> dispatcher(BaseEvent())
Called base listener
[None]
>>> dispatcher(SubEvent())
Called base listener
Called sub listener
[None, None]
>>> dispatcher(UnrelatedEvent())
Called unrelated listener
[1]
class kotti.events.ObjectEventDispatcher(*a, **kw)[source]

Dispatches based on both event type and object type.

>>> class BaseObject(object): pass
>>> class SubObject(BaseObject): pass
>>> def base_listener(event):
...     return 'base'
>>> def subobj_insert_listener(event):
...     return 'sub'
>>> def all_listener(event):
...     return 'all'
>>> dispatcher = ObjectEventDispatcher()
>>> dispatcher[(ObjectEvent, BaseObject)].append(base_listener)
>>> dispatcher[(ObjectInsert, SubObject)].append(subobj_insert_listener)
>>> dispatcher[(ObjectEvent, None)].append(all_listener)
>>> dispatcher(ObjectEvent(BaseObject()))
['base', 'all']
>>> dispatcher(ObjectInsert(BaseObject()))
['base', 'all']
>>> dispatcher(ObjectEvent(SubObject()))
['base', 'all']
>>> dispatcher(ObjectInsert(SubObject()))
['base', 'sub', 'all']
kotti.events.notify(event)

Call self as a function.

kotti.events.set_owner(event)[source]

Set owner of the object that triggered the event.

Parameters

event (ObjectInsert) – event that triggered this handler.

kotti.events.set_creation_date(event)[source]

Set creation_date of the object that triggered the event.

Parameters

event (ObjectInsert) – event that triggered this handler.

kotti.events.set_modification_date(event)[source]

Update modification_date of the object that triggered the event.

Parameters

event (ObjectUpdate) – event that triggered this handler.

kotti.events.delete_orphaned_tags(event)[source]

Delete Tag instances / records when they are not associated with any content.

Parameters

event (ObjectAfterDelete) – event that triggered this handler.

kotti.events.cleanup_user_groups(event)[source]

Remove a deleted group from the groups of a user/group and remove all local group entries of it.

Parameters

event (UserDeleted) – event that triggered this handler.

kotti.events.reset_content_owner(event)[source]

Reset the owner of the content from the deleted owner.

Parameters

event (UserDeleted) – event that triggered this handler.

class kotti.events.subscribe(evttype=<class 'object'>, objtype=None)[source]

Function decorator to attach the decorated function as a handler for a Kotti event. Example:

from kotti.events import ObjectInsert
from kotti.events import subscribe
from kotti.resources import Document

@subscribe()
def on_all_events(event):
    # this will be executed on *every* event
    print("Some kind of event occured")

@subscribe(ObjectInsert)
def on_insert(event):
    # this will be executed on every object insert
    context = event.object
    request = event.request
    print("Object insert")

@subscribe(ObjectInsert, Document)
def on_document_insert(event):
    # this will only be executed on object inserts if the object is
    # is an instance of Document
    context = event.object
    request = event.request
    print("Document insert")
kotti.events.wire_sqlalchemy()[source]

Connect SQLAlchemy events to their respective handler function (that fires the corresponding Kotti event).

kotti.events.includeme(config)[source]

Pyramid includeme hook.

Parameters

config (pyramid.config.Configurator) – app config