[Web-SIG] [ANN] Nagare 0.2.0 - Components and continuation-based web framework
Etienne Robillard
robillard.etienne at gmail.com
Fri Jun 26 15:56:32 CEST 2009
Ok.. I promise... I won't make an outrage this time! ;-)
Congratulations for this new release!
Etienne
Alain Poirier wrote:
> Hi all,
>
> The version 0.2.0 of the Nagare web framework is now released !
>
> To read about its features:
> http://www.nagare.org/trac/wiki/NagareFeatures
>
> Release info and download page:
> http://pypi.python.org/pypi/nagare
>
> Release info and download page of the examples:
> http://pypi.python.org/pypi/nagare.examples
>
> Source and documentation available at the website:
> http://www.nagare.org
>
> Mailing lists - the place to ask questions:
> http://groups.google.com/group/nagare-users
>
> About Nagare
> ============
>
> Nagare is a components based framework: a Nagare application
> is a composition of interacting components each one with its
> own state and workflow kept on the server. Each component
> can have one or several views that are composed to generate
> the final web page. This enables the developers to reuse or
> write highly reusable components easily and quickly.
>
> Thanks to Stackless Python, Nagare is also a continuation-based
> web framework which enables to code a web application like a
> desktop application, with no need to split its control flow in
> a multitude of controllers and with the automatic handling of
> the back, fork and refresh actions from the browser.
>
> Its component model and use of the continuation come from the
> famous Seaside Smalltalk framework.
>
> Furthermore Nagare integrates the best tools and standard from
> the Python world. For example:
>
> - WSGI: binds the application to several possible publishers,
> - lxml: generates the DOM trees and brings to Nagare the full
> set of XML features (XSL, XPath, Schemas ...),
> - setuptools: installs, deploys and extends the Nagare framework
> and the Nagare applications too,
> - PEAK Rules: generic methods are heavily used in Nagare, to
> associate views to components, to define security rules, to
> translate Python code to Javascript ...
> - WebOb: for its Request and Response Objects.
>
>
> Examples
> ========
>
> A complete "guess a number" game to taste how easy web coding
> becomes using continuations:
>
>
> import random
> from nagare import component, util
>
> class Number(component.Task):
> """A little game to guess a number
> """
> def go(self, comp):
> """The game algorithm, using continuation for a pure linear Python code
>
> In:
> - ``comp`` -- this component
> """
> self.attempt = 1
> number = random.randint(1, 20)
>
> comp.call(util.Confirm('I choose a number between 1 and 20. Try to guess
> it'))
>
> while True:
> x = comp.call(util.Ask('Try #%d: ' % self.attempt))
> if not x.isdigit():
> continue
>
> x = int(x)
>
> if x > number:
> comp.call(util.Confirm('Choose a lower number'))
>
> if x < number:
> comp.call(util.Confirm('Choose a greater number'))
>
> if x == number:
> comp.call(util.Confirm('You guessed the number in %d attempts' %
> self.attempt))
> break
>
> self.attempt += 1
>
>
> A simple todo list, illustrating the programmatic HTML generation,
> the association of view(s) to Python objects and the direct association
> of callbacks to HTML form elements and links:
>
> from nagare import presentation
> from nagare.namespaces import xhtml
>
> # A plain Python ``TodoList`` class
> class TodoList(object):
> def __init__(self):
> self.todo = []
>
> def add_todo(self, msg):
> self.todo.append(msg)
>
> # The default HTML view, generated in programmatic HTML
> @presentation.render_for(TodoList)
> def render(self, h, comp, model):
> # ``h`` is a (X)HTML renderer
> (http://www.nagare.org/trac/wiki/RendererObjects)
> with h.div:
> for msg in self.todo:
> h << h.blockquote(msg) << h.hr
>
> with h.form:
> h << 'New todo:' << h.br
> h << h.textarea.action(self.add_todo) << h.br
> h << h.input(type='submit', value='Add')
>
> return h.root
>
> 0.2.0 Changelog
> ===============
>
> Python Stackless 2.6.2 is now the recommanded Python version.
>
> New features
> ------------
>
> - When an AJAX update contains CSS or Javascript urls, they are correctly
> fetched.
> - Multiple AJAX updates object added
> - Session lock added (distributed lock when memcached is used)
> - A session can now contains SQLAlchemy (and Elixir) entities
> - LRU management of the sessions and continuations
> - ``nagare-admin create-rules`` administrative command added.
> Generation of the Apache / lighttpd / ngnix rewrite rules to serve the
> statics
> contents. See :wiki:`NagareAdmin`
> - ``nagare-admin batch`` administrative command added. To execute Python
> statements. See :wiki:`NagareAdmin`
> - Easy WSGI pipe creation
> - An application can now be registered under several urls
> - The automatic reloader can be configured with a list of files to watch
> - API to logout and change the user identity/password added
> - automatic generation of a ``link(rel="canonical" ...)`` in the page header
> as an alias without the session and continuation parameters
> - ``min_compress_len`` parameter added in the memcached configuration
> - YUI AJAX modules updated to 2.7.0
> - SQLAlchemy updated to 0.5.x
>
> Changes
> -------
>
> - Complete refactoring of the AJAX communication. The "wire" format is now
> Javascript.
> - ``component.Component.init()`` and ``presentation.init_for()`` API
> changes.
> See :wiki:`RestfulUrl`
>
> Bugs fixed
> ----------
>
> - #19, #23, #26: race condition in the sessions management
> - #22: don't clear the registered callbacks when an image is served
> - #21: set the security context at the beginning of the request handling
> - #13, #14: python to javascript translation updated
>
> Enjoy!
>
> A. Poirier
>
> _______________________________________________
> Web-SIG mailing list
> Web-SIG at python.org
> Web SIG: http://www.python.org/sigs/web-sig
> Unsubscribe: http://mail.python.org/mailman/options/web-sig/robillard.etienne%40gmail.com
>
--
Etienne Robillard <robillard.etienne at gmail.com>
Green Tea Hackers Club <http://gthc.org/>
Blog: <http://gthc.org/blog/>
PGP Fingerprint: AED6 B33B B41D 5F4F A92A 2B71 874C FB27 F3A9 BDCC
More information about the Web-SIG
mailing list