Layout and page models for Dolmen applications
dolmen.app.layout provides ready-to-use components to get a fully functional and extensively pluggable User Interface for a Dolmen application (see dolmen.app.site).
Dolmen is an application development framework based on Grok and ZTK which also provides a CMS (Content Management System) out of the box. Dolmen is being made with four main objectives in mind: easily pluggable, rock solid and fast content type development, readability and speed.
We import all the needed dependencies of the tests:
>>> from dolmen import content >>> from grokcore.component import testing >>> from zope.site.hooks import getSite >>> from zope.component import getMultiAdapter >>> from zope.publisher.browser import TestRequest
We import everything needed for the API verification:
>>> from zope.interface import verify >>> from dolmen.app.layout import interfaces as API
We define and intanciate a Context object and a request for our tests to come:
>>> class Mammoth(content.Content): ... content.name(u'Furry Mammoth') >>> testing.grok_component('mammoth', Mammoth) True >>> root = getSite() >>> root['manfred'] = Mammoth() >>> manfred = root['manfred'] >>> request = TestRequest()
>>> from dolmen.app.layout import master>>> API.IGlobalUI.extends(API.IContentProviders) True>>> API.IGlobalUI.providedBy(master) True >>> verify.verifyObject(API.IGlobalUI, master) True
>>> for name, attr in API.IContentProviders.namesAndDescriptions(): ... print "%s: %s" % (name, attr.getDoc()) Footer: Viewlet manager for the bottom part of the body. AboveBody: Viewlet manager located above the main content. BelowBody: Viewlet manager located below the main content. Header: Viewlet manager involved in rendering the HTML head. Top: Viewlet manager for the top part of the body. Resources: Viewlet manager including resources.
>>> interfaceDescription(API.IGlobalUI) Master: Base layout using all the `IContentProviders` components to build a coherent yet overridable rendering.
>>> from dolmen.app.layout import viewlets>>> API.IContextualUI.providedBy(viewlets) True >>> verify.verifyObject(API.IContextualUI, viewlets) True
>>> interfaceDescription(API.IContextualUI) ContextualActions: Viewlet rendering contextual actions. FlashMessages: Viewlet displaying site-wide messages.
>>> from dolmen.app.layout import models
Models are base classes to be used in your own classes. dolmen.app.layout provides a collections of ready-to-use models:
>>> API.IModels.providedBy(models) True >>> verify.verifyObject(API.IModels, models) True
>>> interfaceDescription(API.IModels) Index: Page showing as default view on an object. Form: Generic page form. Page: Page embedded in a layout.
dolmen.app.layout registers some views, out-of-the-box, to allow you to interact with your dolmen.content objects and your application:
>>> API.IBaseViews.providedBy(models) True >>> verify.verifyObject(API.IBaseViews, models) True
>>> interfaceDescription(API.IBaseViews) Edit: Default edit form. Add: Default add form. DefaultView: Display form used as index. Delete: Default delete form.
We can now test to see if our default views are retrieved:
>>> view = getMultiAdapter((manfred, request), name="index") >>> view <dolmen.app.layout.models.DefaultView object at ...> >>> edit = getMultiAdapter((manfred, request), name="edit") >>> edit <dolmen.app.layout.models.Edit object at ...>
The add form is a bit different, as it relies on an adding view (see dolmen.forms.crud and dolmen.content for more information):
>>> from dolmen.forms.crud import Adder >>> adding = Adder(root, request) >>> adding <dolmen.forms.crud.addview.Adder object at ...> >>> adding.traverse("dolmen.app.layout.Mammoth", None) <dolmen.app.layout.models.Add object at ...>
dolmen.app.layout provides a browser layer and a skin, to serve as a base component for your own skins:
>>> from dolmen.app.layout import skin >>> API.ISkin.providedBy(skin) True >>> verify.verifyObject(API.ISkin, skin) True
>>> interfaceDescription(API.ISkin) IBaseSkin: Skin providing the IBaseLayer. Can be applied directly or inherited. IBaseLayer: Layer used to register all the Dolmen centric view components. Resource: Viewlet component used to include resources
All Dolmen packages are sponsorised by NPAI (http://www.npai.fr)
- Update to use grokcore.layout instead of megrok.layout.
- Updated versions dependencies to remove the use of megrok.resource in favor of fanstatic.
- The ContextualMenu viewlet now computes the URL using the ‘url’ attribute of the entries, as it should be.
- Dependencies have been slimmed down : dolmen.app.layout now longer provides coverage for the megrok.z3ctable and zeam.form.composed packages. We now rely on the grokcore packages and no longer on the grok package itself.
- Tests no longer use zope.testing.
- The flash messages are now retrieved thanks to grokcore.message.
- Tests have been corrected and simplified.
- Using now zeam.form instead of z3c.form.
- Using now dolmen.menu instead of megrok.menu.
- dolmen.app.layout now required python2.6 to work. This is due to the use of class decorators.
- Corrected the success message getter for the Delete form. It used to fetch the property object and try to persist it. Now, it gets its value as it should.
- Using now the latest megrok.layout. This removes the need for the ApplicationAwareView mixin. This version of dolmen.app.layout will only work with Grok >= 1.1rc1.
- INotFound errors are not located in the index.html view. This allows to use a layout transparently. The __parent__ is set to the ob attribute of the INotFound object.
- The contextual menu is no longer restricted to IBaseContent objects. It is now registered for Interface.
- The dependencies have been greatly reduced by the removal of all the zope.app packages.
- Bug fix: the success message of a Delete form is a property and can’t be called directly through the class. We need to use fget.
- The layout now provides and uses a way to include resources, using megrok.resourceviewlet. Two components have been added for that: ResourcesManager and Resource, respectively a viewletmanager and a viewlet base class.
- The imports has been modified to avoid using any zope.app package.
- Now the configure.zcml includes the megrok.z3ctable meta.zcml.
- Updated dependencies in setup.py
- Corrected flash messages and redirection in the delete form.
- Added Delete form to complete the CRUD actions.
- Initial release