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@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.etie...@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 _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com