Notes on TurboGears 1.1 Development

Update 2009-11-14: This document has been superseded by the developments roadmap for TurboGears 1.5. Not all goals mentioned here have been accomplished for TurboGears 1.1. See the TG 1.1 changelog for what has been done.


After TurboGears 1.0.4.4 has been released, the team decided to stop working on the 1.0 branch, except for bug-fixes, and work on 1.1 instead.

The 1.1 branch is regarded as an intermediate step towards the Pylons-based 2.0 version which is already under heavy development in parallel since some time.

The following is a summary of the decisions the TG 1.1 team made on IRC meetings on March 15th and 24th 2008.

Goals

TurboGears 1.1 will be a newer version of TurboGears 1.0, which continues to support exactly the same API. The main difference between 1.0 and 1.1 will be the choice of default templating engine and default ORM.

New TurboGears 1.1 projects will be quickstarted with support for the newer components, unless you explicitly ask for the old components. In TG 1.0 the opposite was true.

So the main goals of 1.1 are replacing Kid with Genshi and SQLObject with SQLAlchemy. The former entails replacing TG widgets with ToscaWidgets because TG widgets do not work with Genshi. The latter entails replacing CatWalk and Model Designer since they do not work with SQLAlchemy.

‘’Update: ToscaWidgets will be used in 1.5 and not in 1.1 because we want to have an 1.1 release quite soon. TW has begun to coalesce developers lately and has become a really interesting target for our upcoming 1.5 release.’‘

We decided not to support CherryPy 3 in 1.1, since it breaks a lot of things and TG will move towards Pylons anyway, so it does not make sense to waste our energy for moving to CherryPy 3. We can still decide to do it in a 1.2 release, but this is unlikely if TG2 continues to make good progress.

‘’Update: CherryPy 3.x will be supported in the 1.5 branch.’‘

We also decided to keep the identity component without much changes. This will be probably replaced by authority or repoze.who in TG2.

Besides these goals, we also want to refactor he tg-admin component and the quickstart templates for the 1.1 release, and make other small improvements.

Schedule

We are currently envisaging the 1.1 beta release for July 14th 2008.

‘’Update: After the 1.5 branch started to emerge we had some small adjustments in the 1.1 branch that made is less stable and we had to consolidate before releasing. This first beta is targeted for 28th of August.’‘

Tasks

Replace TG Widgets with ToscaWidgets (reported to 1.5)

‘’Update: Point below regarding TW is no more the case, Alberto is back on track and TW as begun development again this is one problem less.’‘

  • Since TW is currently unmaintained, a prerequisite is that we
    • find somebody who will be a new maintainer and release manager,
      • ChrisP and ChrisZ have some interest
    • get access to the TW website (toscawidgets.org, beta.toscawidgets.org) or that site should be closed and become part of the TG website
    • get access to the ToscaWidgets PyPI page.
    • Florent will talk with Alberto and clarify.
    • TW is already in the SVN repository of the TG site.
  • Provide a good standard set of widgets (“batteries included” idea) including replacements for all TG 1.0 widgets, i.e. AutoComplete etc.
    • These widgets should be based on maximum one JS library (MochiKit as before, or jQuery, or whatever).
    • Florent, ChrisA and ChrisZ will work on this major task.
  • More (not so frequently used) widgets should can be provided in a tg-contrib repository or via the cheeseshop.
  • Idea: Revive FastData2 for TG 1.1? (not yet discussed)
  • Important: Provide a widget browser for Tosca Widgets
    • Who wants to work on this? (Done, see TW’s website for explanation)
  • Improve/write TW docs (joint effort with TG2 team):
    • Chris P and Linden did some good work on TW docs at the sprint
    • still needs a lot of work (improving each day now)
    • Mark wants to work on the docs, who else?
    • We should not only document TW alone, but also create docs and a tutorial about using TW in TG 1.5
  • If moving to ToscaWidgets does not work:
    • Make TG widgets work with Genshi as well
      • Add a config option for the templating enging widgets shall use
      • Add an attribute to widgets for overrading that config option
      • Make sure Genshi widgets work in Kid templates and vice versa

Replace RuleDispatch with PEAK-rules (finished by August 25th 2008)

  • Reason: Google App Engine only accepts pure Python modules.
  • This has already been accomplished
  • We also need to create and require a new TurboJson release that uses PEAK-rules instead of RuleDispatch.
  • Done also.

Improve the Toolbox (will be 1.5)

  • Toolbox tools should be moved out of the core and become extensions
  • Replace Catwalk with DBSprockets (RUM ?)
    • Make DBSprockets work with SO as well (add SO provider)
      • Deets wants to look into this
      • Needs support by ChrisP
    • Make DBSprockets look a bit nicer and cooler (nicer layout, some AJAX).
    • Alternatively, make Catwalk work with SA as well. The code needs to be simplified and cleaned up a lot, large parts may need to be rewritten (huge task).
    • Alternatively, consider FastData2
  • ModelDesigner should work with SA and Elixir, too.
    • ChrisZ considers doing this if time permits
    • Needs update to latest WWW SQL Designer, and addition of XSLT transformations to generate SA and Elixir models
    • TG2 team may be interested in this, too
  • Replace all Kid templates in toolbox with Genshi templates

Refactor tg-admin and quickstart templates

  • ChrisA will work on this in a separate branch, with support from Florent
  • Make tg-admin only a thin wrapper around paster
  • We should simplify and provide only a small set of templates
    • SQLObject and Elixir templates could become optional extensions not maintained in the core TG package
    • “quickstartbig” should become the default
    • reduce if/else blocks in the templates
    • Better separation of controller, view and model
    • Consistent names of templates, directory, entry points
    • Consider using Tempita instead of Cheetah for the quickstart templates

i18n

Testing

  • Replace testutils with webtest, deprecate create_request (done in 1.5. 1.1 branch will see only refactor to prepare the way)
    • Luke Macken put together a patch at the pycon sprints which could provide a good approach to testing on TG 1.1
  • Add unit tests for SA usage (currently they are mainly testing SO usage)
  • Add unit tests for Genshi usage (currently they are mainly testing Kid usage)
  • Improve test suite, buildbot etc.
  • Buildbot is now runnning. We need to make sure developers use it’s output to fix problems.

Improve flash function

  • A couple of improved versions of flash() have been suggested in the past. Particularly, we want to have to distinguish info, error and warning messages. TG 1.1 should ship with such an improved flash() version. Should be discussed with the TG 2.0 team.

MochiKit

  • If this is not needed by TW and our standard widgets, may become obsolete or replaced by something different.
  • MK 1.4 release will appear when the docs and examples for the visual effects have been improved - ChrisZ and others are currently working on this. If it is released, TG 1.0 and possibly 1.1 should ship with this version instead of 1.3.1.

More small changes and improvements

  • Add config option for making SQLAlchemy sessions autoflush and transactional
  • Make sure that paginate really works with SQLAlchemy and this is documented (see ticket #1115 and @paginate()).

Clean-Up

  • Code Clean-up code, PEP8 etc.
  • Remove Py 2.3 workarounds and cruft, use Py 2.4 decorators.
    • Decorators have now been reorganized in r4363. Using only Py 2.4 syntax now. PEAK decorator syntax is gone, DecoratorTools not required any more.
  • Remove functionality that has been deprecated in 1.0 (search for DeprecationWarnings etc.).

Documentation

  • Consider moving the TG 1.1 docu to Sphinx, using the Wiki only for the “RoughDocs”
  • Create nice tutorial and screencast for TG 1.1

GSoC

  • Some of the tasks above could be done with the help of GSoC students
  • ChrisA will write project ideas (done)

Ticket Management

  • Florent will manage trac tickets and milestones for the tasks above and reallocated old tickets
  • KevinH may help out (Jorge Vargas also expressed interest for this)