[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