Nagare web framework 0.4.0

Alain Poirier alain.poirier at net-ng.com
Tue Jan 17 18:20:48 CET 2012


Hi all,

Version 0.4.0 of the Nagare web framework is now released!

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 aware
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.


To read more 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

Release info and download page of the pure web IDE:
    http://www.nagare.org/trac/wiki/NagareIde
    http://pypi.python.org/pypi/nagare.ide

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


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

Enjoy!

A. Poirier


More information about the Python-announce-list mailing list