[Cubicweb] PYRAMID: Integrated sessions & error management (a.k.a. getting rid of 'appli')
Christophe de Vienne
christophe at unlish.com
Tue Jul 15 19:18:56 CEST 2014
Today Aurélien and I worked on pyramid_cubicweb.
The goals were to:
1) clarify the session management.
2) skip CubicWebPublisher.core_handle, if not CubicWebPublisher altogether.
You can find the result of our work in the new pyramid_cubicweb
repository at http://hg.logilab.org/review/pyramid_cubicweb
1) Session Management
The chosen approach is to let pyramid entirely handle sessions and
Because CubicWeb still rely on a "repository session" object, we get a
new one for each request, and its ".data" attribute is replaced by the
pyramid session object.
At the end of the request handling by pyramid, the cubicweb session
object is closed.
This way we have something very compatible for the current cubicweb
applications that totally rely on pyramid for session handling.
core_handle is a big function that:
- use the url resolver to build a rset and obtain a controller id
- select a controller, feed it the request and get a content from it
- handle most of the exceptions that may occur during these two steps
In all the handle errors, a part of them may be raise by any cubicweb
appobject, including views, that we will call 'external errors' for
convenience. The other errors should occur only in a resolver of a
controller, we will call them 'internal errors'.
All there errors have to be translated to their pyramid equivalent.
Since the 'external errors' can be raise by any cubicweb component, they
also have to be translated when we render a view.
To address all that, we implemented a context manager
(cw_to_pyramid(request)) that handle all the external errors. It is used
in render_view as well as in the default handler.
In addition, the default handler now does the resolving + controller
call directly, and handle the internal errors.
We now rely on CubicWebPublisher only to handle validation errors, and
that should be easy to change. So we basically got (almost) rid of
CubicWebPublisher (aka 'application').
For those not used to cubicweb, I will push asap a requirements.txt that
will make working on pyramid_cubiweb a lot easier than it is now.
More information about the Cubicweb