Happy New Year! I decided to do some cleanup on Quixote. This list of changes since version 2.7 follows. Please let me know if you test this version and it works for you. Author: Neil SchemenauerDate: Mon Jan 2 13:49:37 2012 -0600 Remove generated HTML docs from the version control system. Author: Neil Schemenauer Date: Mon Jan 2 13:38:24 2012 -0600 Update documentation for 2.8 changes. Mention the export() decorator. Simplify the explaination of the mini demo. Suggest starting the server using python -m since that avoids platform dependant paths. Explain how to make simple_server listen on a public interface. Include the latest docutils stylesheet. Author: Neil Schemenauer Date: Mon Jan 2 13:30:23 2012 -0600 Use the export() and subdir() decorators for the demo. Author: Neil Schemenauer Date: Mon Jan 2 13:24:00 2012 -0600 Improve the formatting of Quixote generated pages. Introduce the errors.format_page() function and use it to generate all HTML pages produced by Quixote. It provides a single location to "monkey-patch" if applications want to customize the look of the pages. Improve the wording of the messages on some of the error pages. Provide some basic CSS rules to make the pages look a little more modern. Use the HTML 5 doctype. Author: Neil Schemenauer Date: Mon Jan 2 13:19:06 2012 -0600 Enable stricter HTTP request method checking. By default, only allow GET, HEAD, and POST. Allowed methods can be set by the ALLOWED_METHODS config. All methods can be allowed by setting ALLOWED_METHODS to None. Author: Neil Schemenauer Date: Mon Jan 2 01:04:17 2012 -0600 Add export() and subdir() decorators for managing _q_exports. Author: Neil Schemenauer Date: Sun Jan 1 22:22:28 2012 -0600 Have simple_server.py use Quixote access logger. Author: Neil Schemenauer Date: Sun Jan 1 22:21:10 2012 -0600 Increase resolution of elapsed time in access log. To save space, prepend 's', instead of 'sec'. Author: Neil Schemenauer Date: Sun Jan 1 22:18:21 2012 -0600 Add js_escape() utility. Author: Neil Schemenauer Date: Sun Jan 1 21:24:09 2012 -0600 Use Form.is_submitted() to check if Widget should parse. Pass a reference to the form object to widgets. Use Form.is_submitted() to check if form has been submitted. This allows query strings to be provided to forms with a POST method while preventing them from erroneously parsing themselves. Previously the query string would cause them to think the form was submitted. Author: Neil Schemenauer Date: Sun Jan 1 20:51:11 2012 -0600 Set 'id' attribute on form input elements. This is useful when using Javascript to manipulate the form. It also now seems to be standard practice. Author: Neil Schemenauer Date: Sun Jan 1 20:46:10 2012 -0600 Don't auto-set 'Expires' header if it already exists. Author: Neil Schemenauer Date: Sun May 1 15:43:05 2011 -0600 Add the format() method to htmltext. Author: Neil Schemenauer Date: Sun May 1 13:28:06 2011 -0600 Change HTTPRequest to always consume request body. Some clients and middleware expect that the body is always consumed. Previous to this change, raising a PublishError exception (for example) could result in a response being sent without the body being consumed. Requiring the application code to ensure that the body is always consumed seems burdensome. Using a temporary file or StringIO object seems simplest and should not significantly affect performance.