[ANN] Nagare 0.2.0 - Components and continuation-based web framework

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[ANN] Nagare 0.2.0 - Components and continuation-based web framework

Alain Poirier
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
[hidden email]
Web SIG: http://www.python.org/sigs/web-sig
Unsubscribe: http://mail.python.org/mailman/options/web-sig/lists%40nabble.com
Reply | Threaded
Open this post in threaded view
|

Re: [ANN] Nagare 0.2.0 - Components and continuation-based web framework

Etienne Robillard-3
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
> [hidden email]
> Web SIG: http://www.python.org/sigs/web-sig
> Unsubscribe: http://mail.python.org/mailman/options/web-sig/robillard.etienne%40gmail.com
>


--
Etienne Robillard <[hidden email]>
Green Tea Hackers Club <http://gthc.org/>
Blog: <http://gthc.org/blog/>
PGP Fingerprint: AED6 B33B B41D 5F4F A92A  2B71 874C FB27 F3A9 BDCC
_______________________________________________
Web-SIG mailing list
[hidden email]
Web SIG: http://www.python.org/sigs/web-sig
Unsubscribe: http://mail.python.org/mailman/options/web-sig/lists%40nabble.com