Wichert Akkerman: Euphorie: combining grok, dexterity sql content in a single application

published Oct 28, 2009, last modified Oct 29, 2009

By Wichert Akkerman, Simplon, The Netherlands

A case study describing the Euphorie application. Euphorie combines many different types of technology in a single Plone site: dexterity content types, SQL stored content, custom traversal, sphinx documentation and even a grok application.

Euphorie: operational risk assessment tool. Identify risk in your organization and how to take them away. Does this at a European level. Developed by Syslab, TNO, Simplon (myself). Ambitious projects. 27 languages, 20 countries.

We wanted something that is easy to learn, use and extend, maintainable, scalable. Clean, documented, tested code.

It was not a very Plonish problem. So we unploned plone: no redirect tracking, no content rules, no sharing tab. Fairly simple to do.

Content types: archetypes has several problems, one of which is that it is slow. So we used dexterity, which has fewer problems.

In this project we do some very interesting things with Plone. One is dexterity. Another is the input we receive. A lot comes from Word documents, or the user added styles or linebreaks himself. So we had to do some cleanup work there.

HiFi (high fidelity) prototyping for the design in static pages. It at least allows you to share the css and javascript between the prototype and the actual implementation.

Grok-in-Plone. We basically built a grok site inside Plone.

We had to render our content in three different phaes. For the same risks we needed different forms. First: do we run this risk, yes or no; then: how likely is this; then: what are you going to do about it. So we did some url tricks by inserting 'PathGhosts' in the acquisition chain that added a string to the url although the actual object behind the url was still the same. So that got us saner urls.

Session content. The zodb is not fast at writing lots of content. But that was needed for storing the answers the user gave so far in the survey. So we used SQL here, using SQLAlchemy. And we put the user objects in SQL as well.

For documentation we added sphinx to all the packages.

Plone can be fun if you step out of the box.