Example #1
0
class BreadcrumbContentProvider(
        grok.MultiAdapter, zope.contentprovider.provider.ContentProviderBase):
    """Content provider rendering the breadcrumbs."""

    grok.adapter(zope.interface.Interface,
                 icemac.addressbook.browser.interfaces.IAddressBookLayer,
                 zope.interface.Interface)
    grok.provides(zope.contentprovider.interfaces.IContentProvider)
    grok.name('breadcrumbs')

    def render(self):
        return '\n'.join(self.rendered_breadcrumbs)

    @property
    def rendered_breadcrumbs(self):
        for bc in reversed(list(self.reversed_breadcrumbs)):
            yield bc.render()

    @property
    def reversed_breadcrumbs(self):
        bc = self.get_breadcrumb(self.__parent__)
        parent = bc.parent
        while parent is not None:
            if bc.show:
                yield bc
            bc = self.get_breadcrumb(parent)
            parent = bc.parent
        assert not bc.show, 'Found a root breadcrumb with show = True'

    def get_breadcrumb(self, context):
        return zope.component.getMultiAdapter((context, self.request),
                                              IBreadcrumb)
Example #2
0
factory4 = CaveHomeFactory(u"four")
factory5 = CaveHomeFactory(u"five")
factory6 = CaveFireplaceHomeFactory(u"six")
factory7a = CaveHomeFactory(u"seven-a")
factory7b = CaveFireplaceHomeFactory(u"seven-b")

# make some direct assertions

implementer(IHome)(factory3)
implementer(IHome)(factory4)
implementer(IHome)(factory5)
implementer(IHome)(factory6)
implementer(IHome)(factory7a)
implementer(IHome)(factory7b)

grok.adapter(Fireplace)(factory5)
grok.adapter(Fireplace)(factory7a)
grok.adapter(Cave, Fireplace)(factory7b)

# should accept single value for adapts
grok.global_adapter(factory1, Cave, IHome)
# should accept tuple for adapts
grok.global_adapter(factory2, (Cave, ), IHome, name=u"two")
# should look at the provided interface
grok.global_adapter(factory3, Cave, name=u"three")
# should pick the canonical context
grok.global_adapter(factory4, name=u"four")
# should use __component_adapts__
grok.global_adapter(factory5, name=u"five")
# should work as multi-adapter
grok.global_adapter(factory6, (
Example #3
0
class CaveFireplaceHomeFactory(object):
    def __init__(self, id):
        self.id = id
    
    def __call__(self, cave, fireplace):
        return Home(self.id)

factory1 = CaveHomeFactory(u"one")
factory2 = CaveHomeFactory(u"two")
factory3 = CaveHomeFactory(u"three")
factory4 = CaveHomeFactory(u"four")
factory5 = CaveHomeFactory(u"five")
factory6 = CaveFireplaceHomeFactory(u"six")

# make some direct assertions

grok.implementer(IHome)(factory3)
grok.implementer(IHome)(factory4)
grok.implementer(IHome)(factory5)
grok.implementer(IHome)(factory6)

grok.adapter(Fireplace)(factory5)

grok.global_adapter(factory1, Cave, IHome)                  # should accept single value for adapts
grok.global_adapter(factory2, (Cave,), IHome, name="two")   # should accept tuple for adapts
grok.global_adapter(factory3, Cave, name="three")           # should look at the provided interface
grok.global_adapter(factory4, name=u"four")                 # should pick the canonical context
grok.global_adapter(factory5, name="five")                  # should use __component_adapts__
grok.global_adapter(factory6, (Cave, Fireplace,))           # should work as multi-adapter
factory4 = CaveHomeFactory(u"four")
factory5 = CaveHomeFactory(u"five")
factory6 = CaveFireplaceHomeFactory(u"six")
factory7a = CaveHomeFactory(u"seven-a")
factory7b = CaveFireplaceHomeFactory(u"seven-b")

# make some direct assertions

implementer(IHome)(factory3)
implementer(IHome)(factory4)
implementer(IHome)(factory5)
implementer(IHome)(factory6)
implementer(IHome)(factory7a)
implementer(IHome)(factory7b)

grok.adapter(Fireplace)(factory5)
grok.adapter(Fireplace)(factory7a)
grok.adapter(Cave, Fireplace)(factory7b)

# should accept single value for adapts
grok.global_adapter(factory1, Cave, IHome)
# should accept tuple for adapts
grok.global_adapter(factory2, (Cave,), IHome, name=u"two")
# should look at the provided interface
grok.global_adapter(factory3, Cave, name=u"three")
# should pick the canonical context
grok.global_adapter(factory4, name=u"four")
# should use __component_adapts__
grok.global_adapter(factory5, name=u"five")
# should work as multi-adapter
grok.global_adapter(factory6, (Cave, Fireplace,))