"""Containers for certificates. """ import grok from waeup.sirp.university.interfaces import ( ICertificateContainer, ICertificate) from zope.component.interfaces import IFactory from zope.catalog.interfaces import ICatalog from zope.component import getUtility from zope.interface import implementedBy class CertificateContainer(grok.Container): """See interfaces for description. """ grok.implements(ICertificateContainer) grok.require('waeup.manageUniversity') def addCertificate(self, certificate): if not ICertificate.providedBy(certificate): raise TypeError('CertificateContainers contain only ' 'ICertificate instances') cat = getUtility(ICatalog, name='certificates_catalog') results = list(cat.searchResults(code=(certificate.code,certificate.code))) if results: dep = results[0].__parent__.__parent__.longtitle() fac = results[0].__parent__.__parent__.__parent__.longtitle() return 'Certificate exists already in %s / %s.' % (fac,dep) self[certificate.code] = certificate return 'Certificate added.' def clear(self): keys = self.keys() for key in keys: del self[key] class CertificateContainerFactory(grok.GlobalUtility): """A factory for certificate containers. """ grok.implements(IFactory) grok.name(u'waeup.CertificateContainer') title = u"Create a new certificate container.", description = u"This factory instantiates new certificate containers." def __call__(self, *args, **kw): return CertificateContainer(*args, **kw) def getInterfaces(self): return implementedBy(CertificateContainer)