def unrelateCalendarOnDeletion(event): """When you delete an object, relationships of it's calendar should be removed >>> from schooltool.relationship.tests import setUp, tearDown >>> from schooltool.testing.setup import setUpCalendaring >>> setUp() >>> setUpCalendaring() >>> import zope.event >>> old_subscribers = zope.event.subscribers[:] >>> from schooltool.app.overlay import unrelateCalendarOnDeletion >>> zope.event.subscribers.append(unrelateCalendarOnDeletion) We will need some object that implements IHaveCalendar for that: >>> from zope.container.btree import BTreeContainer >>> container = BTreeContainer() >>> from schooltool.person.person import Person >>> container = BTreeContainer() >>> container['jonas'] = jonas = Person(username="******") >>> container['petras'] = petras = Person(username="******") Let's add calendar of Petras to the list of overlaid calendars: >>> jonas.overlaid_calendars.add(ISchoolToolCalendar(petras)) <...CalendarOverlayInfo object at ...> >>> list(jonas.overlaid_calendars) [<schooltool.app.overlay.CalendarOverlayInfo object at ...>] If we delete Petras - Jonas should have no calendars in his overlay list: >>> del container['petras'] >>> list(jonas.overlaid_calendars) [] Restore old subscribers: >>> zope.event.subscribers[:] = old_subscribers >>> tearDown() """ if not IObjectRemovedEvent.providedBy(event): return # event.object may be a ContainedProxy obj = getProxiedObject(event.object) if not IHaveCalendar.providedBy(obj): return calendar = ISchoolToolCalendar(obj) linkset = IRelationshipLinks(calendar, None) if linkset is not None: unrelateAll(calendar)
def clearCalendarOnDeletion(event): """When you delete an object, it's calendar should be cleared >>> from schooltool.relationship.tests import setUp, tearDown >>> from schooltool.testing.setup import setUpCalendaring >>> setUp() >>> setUpCalendaring() >>> import zope.event >>> old_subscribers = zope.event.subscribers[:] >>> from schooltool.app.cal import clearCalendarOnDeletion >>> zope.event.subscribers.append(clearCalendarOnDeletion) We will need some object that implements IHaveCalendar for that: >>> from zope.container.btree import BTreeContainer >>> container = BTreeContainer() >>> from schooltool.person.person import Person >>> container = BTreeContainer() >>> container['petras'] = petras = Person(username="******") >>> def clearCalendar(): ... print "Clearing calendar" >>> ISchoolToolCalendar(petras).clear = clearCalendar If we delete Petras his calendar should be cleared: >>> del container['petras'] Clearing calendar Restore old subscribers: >>> zope.event.subscribers[:] = old_subscribers >>> tearDown() """ if IHaveCalendar.providedBy(event.object): ISchoolToolCalendar(event.object).clear()
def haveCalendar(): from schooltool.resource import resource from schooltool.app.interfaces import IHaveCalendar if not IHaveCalendar.implementedBy(resource.Resource): classImplements(resource.Resource, IHaveCalendar)
def haveCalendar(): from schooltool.app.app import SchoolToolApplication from schooltool.app.interfaces import IHaveCalendar if not IHaveCalendar.implementedBy(SchoolToolApplication): classImplements(SchoolToolApplication, IHaveCalendar)
def haveCalendar(): from schooltool.person import person from schooltool.app.interfaces import IHaveCalendar if not IHaveCalendar.implementedBy(person.Person): classImplements(person.Person, IHaveCalendar)
def haveCalendar(): from schooltool.group import group from schooltool.app.interfaces import IHaveCalendar if not IHaveCalendar.implementedBy(group.Group): classImplements(group.Group, IHaveCalendar)
def haveCalendar(): from schooltool.course import section from schooltool.app.interfaces import IHaveCalendar if not IHaveCalendar.implementedBy(section.Section): classImplements(section.Section, IHaveCalendar)