# Events Guillotina provides an event/subscriber pattern for dispatching events out to subscribers when "things" happen in Guillotina. ## Subscribing Subscribing to events is done with the `configure` module. All subscribers are configured with: 1. the object type to match subcribe to the event against 2. the type of event you want to subscribe to For example, to subscribe when an object is modified: ```python from guillotina import configure from guillotina.interfaces import IResource from guillotina.interfaces import IObjectModifiedEvent @configure.subscriber(for_=(IResource, IObjectModifiedEvent)) async def modified_object(obj, event): pass ``` ## Creating events You are also able to create your own events to notify on: ```python from guillotina.component.interfaces import IObjectEvent from zope.interface import implementer from guillotina.event import notify class ICustomEvent(IObjectEvent): pass @implementer(IObjectEvent) class CustomEvent: def __init__(self, object): self.object = object await notify(CustomEvent(ob)) ``` ## Events - guillotina.component.interfaces.IObjectEvent: every time anything happens to an object - guillotina.interfaces.IFileStartedUpload - guillotina.interfaces.IFileFinishUploaded - guillotina.interfaces.IFileBeforeFinishUploaded - guillotina.interfaces.IObjectLocationEvent: Base event for remove/rename - guillotina.interfaces.IObjectMovedEvent - guillotina.interfaces.IBeforeObjectMovedEvent - guillotina.interfaces.IObjectAddedEvent: when content added to folder - guillotina.interfaces.IObjectDuplicatedEvent - guillotina.interfaces.IBeforeObjectAddedEvent - guillotina.interfaces.IObjectRemovedEvent - guillotina.interfaces.IBeforeObjectRemovedEvent - guillotina.interfaces.IObjectModifiedEvent - guillotina.interfaces.IObjectPermissionsModifiedEvent - guillotina.interfaces.INewUserAdded