Created: 2011-07-13 10:03
Updated: 2018-06-18 12:16
License: gpl-2.0

CherryPy + Mako + Formish + OOOP boilerplate

This project is my boilerplate codebase I created to integrate some Python components with the goal of publishing OpenERP content on the web.

This stack is composed of:

  • CherryPy to serve web content,
  • it use Mako for HTML templating,
  • Formish for HTML form generation and validation,
  • OOOP to talk to OpenERP server via web services.

This project contains the experiments I did while working at Smile, when I explored the possibility of integrating these components. This code was a proof-of-concept that we leveraged later for a highly specific OpenERP project.

Because of the highly experimental nature of this project, it contains lots of stupid and failed attempts. The whole code base should be thoroughly cleaned up before it can be considered reusable.

How-to install this app

  1. Install system dependencies using your favorite package manager. Here is the example for an Ubuntu machine:

     $ apt-get install python-dev
  2. Initialize the buildout environment:

     $ python ./ --distribute
  3. Run buildout itself:

     $ ./bin/buildout
  4. Run the following command to run the server:

     $ ./bin/web_publisher
  5. Go to the following URL in your browser:



Here is a list of useful external documentation and references to help you work in this environment:


  • Profile the code with CherryPy built-in methods ?

  • Add a CSS compressor and combinator to save few bytes and queries. See for inspiration.

  • Add the hash of the compiled.js file to its name (force cache invalidation).

  • Release dottedish 0.6.1 to Pypi and remove our ugly patch.

  • Use consistent localized dates accross datepickers, HTML, formish and OpenERP.

  • Update formish to make its internal messages translatable (errors, etc...).

  • Make a bug report to formish regarding multi-checkbox widget data deserialization (see: ) ? Here are some relevent debug messages:

    formish.Sequence(name='option_list', attr=schemaish.Sequence(schemaish.Integer())) schemaish.Sequence(schemaish.Integer()) schemaish.Integer() <function string_converter at 0x3018a28> <convertish.convert.IntegerToStringConverter object at 0x34557d0> <bound method IntegerToStringConverter.to_type of <convertish.convert.IntegerToStringConverter object at 0x3455490>> <DottedList "[[u'3'], [u'4']]">

  • Clean and tidy up all that crappy code.

  • Use CherryPy tools decorator to factorize code.

  • Leverage CherryPy cache tools. Example: and

  • Add aggressive caching of static images.



This code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

For full details, please see the file named COPYING in the top directory of the source tree. You should have received a copy of the GNU General Public License along with this program. If not, see

Embedded external projects

This tool uses external softwares, scripts, libraries and artworks:

Copyright (c) 2010-211, Pedro Gracia <>,
Released under the GNU GPL v3 license.

Crystal Project Icons
Copyright (c) 2006-2007, Everaldo Coelho <>,
Released under the LGPL license.

Copyright (c) 2006 Zope Corporation and Contributors
Distributed under the Zope Public License, version 2.1 (ZPL).
Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more