"""Course containers. """ import grok from zope.interface import implementedBy from zope.component.interfaces import IFactory from waeup.sirp.university.interfaces import ICourseContainer, ICourse class CourseContainer(grok.Container): """See interfaces for description. """ grok.implements(ICourseContainer) grok.require('waeup.manageUniversity') def addCourse(self, course): """Add a course. """ if not ICourse.providedBy(course): raise TypeError('CourseContainers contain only ICourse instances') self[course.code] = course return def clear(self): """Remove all objects from course container. """ keys = self.keys() for key in keys: del self[key] class CourseContainerFactory(grok.GlobalUtility): """A factory for course containers. """ grok.implements(IFactory) grok.name(u'waeup.CourseContainer') title = u"Create a new course container.", description = u"This factory instantiates new course containers." def __call__(self, *args, **kw): return CourseContainer(*args, **kw) def getInterfaces(self): return implementedBy(CourseContainer)