Change log for Ophelia

0.4 (2013-01-02)

  • Use xsendfile to deliver files from disk in the event that the requested path couldn’t be traversed using the templates. This makes Ophelia independent of a front-end server for delivering on-disk documents. As a small trade-off, having directory listings created dynamically is presently not possible at all, other than explicitly by writing templates and scripts.
  • Dropped anything related to Apache and mod_python, continue WSGI-only.
  • Dropped support for Python 2.4 and 2.5. This means the wsgiref module is a part of the Python standard library so the egg’s wsgiref extra is gone.
  • Dropped the version restriction on zope.tal, updated tests. Page templates no longer grow a trailing new-line character when rendering themselves.
  • Dropped ophelia.tool.feed since it was never properly designed, tested nor even documented.
  • Dropped the ophelia-dump script which has never been really useful.
  • Simplified the ophelia-wsgiref example server so that it no longer reads a particular section of its configuration file; have Ophelia’s development buildout create a separate configuration file for the included example site.
  • Added a paste application factory and some example configuration for running Ophelia in a WSGI container configured by a paste “ini” file.
  • Allow configuration settings to be passed to the WSGI application upon initialisation.
  • Added a debug mode for the WSGI application.
  • Declared the ophelia package a namespace to allow contribution packages to be called
  • Deprecated the tools package as it was never designed for general use. Need to keep them around for the sake of some known web sites using them.
  • Re-organised the small example site that comes with the source.
  • Re-organised tests, added programmatic tests for the WSGI interface.
  • Use Python’s own doctest module for tests, got rid of using zope.testing’s deprecated fork of it and thus the zope.testing dependency.
  • Applied most of the conventions of tl.pkg to the package source.
  • Made sure that HTTP response headers are of type str.
  • Fixed the locale setting for date formatting introduced in 0.3.5.
  • Fixed the target location link inside the response body of WSGI redirects.

0.3.5 (2012-02-18)

  • Moved the project to the Mercurial version control system with new Bitbucket home at <>.
  • Made sure that HTTP response headers are of type str.
  • Added a method MetaData.header_date that formats a date in RFC 2822 format and C locale regardless of the currently active locale. Also format the expires date in the C locale always. This allows setting up web sites with a non-C locale without risking non-ASCII characters in HTTP headers, and non-english month names appearing in RFC 2822 dates more generally.

0.3.4 (2011-04-14)

  • The navigation tool now allows splitting menus into blocks by inserting menu entries with empty titles.
Bug fixes:
  • Made WSGI error reporting robust against character encoding issues.
  • Added an optional parameter to process_file to allow executing the script in a custom namespace.
  • Added the xml_version attribute to the request as a temporary way to achieve an XML declaration that says “version=1.0”, needed by Atom feeds.
  • Store the current request and file context in thread-local stacks instead of looking them up by inspecting the execution frame stack. Inspecting the stack was a huge time sink, responsible for 75% of a request’s __call__ time on one real-world site.
  • simplified the buildout configuration due to new versions of Sphinx and tl.buildout_apache

0.3.3 (2008-12-02)

Bug fixes:
  • file-specific context variables were not set during template evaluation
  • fixed file positions shown in template traceback supplements skewed by splitting off scripts from files’ beginnings
  • added input request attribute which is a file-like object from which to read the request body
  • added headers request attribute which is a namespace of HTTP headers with leading HTTP_ removed
  • optionally pre-fill response_headers namespace with response headers set earlier by the server environment
  • added setup for generating HTML documentation using Sphinx

0.3.2 (2008-01-08)

  • more helpful tracebacks for broken page templates
  • None is available in the page template evaluation context
  • added request configuration parameter immediate_result that makes the request return the unmodified unicode page body to ease further processing
  • page templates raise ValueError when constructed from broken template text
  • simplified cleaned up egg contents, set zip_safe flag, removed provides flag which is not supported by Python 2.4
  • Un-declared the feedparser dependency since that egg is awkward to install using zc.buildout. The feeds tool will stay until 0.4 for compatibility.

0.3.1 (2007-12-07)

  • tools: added the Metadata.mtime method which returns the current input file’s modification time as a datetime object
Bug fixes:
  • Request.render_template uses full context for rendering a template
  • Documented restriction to main_interpreter when run through mod_python.
  • renamed request method interpret_template to render_template
  • Request.traverse and Request.__call__ accept additional context as keyword arguments, the WSGI interface accepts it as a mapping named ophelia.context in the environ dictionary
  • console script entry points accept defaults for some command line options
  • tools: made Metadata.bump_date accept a datetime object
  • simplified buildout configuration

0.3 (2007-07-06)

  • a WSGI application running Ophelia was added along with a basic wsgiref-based server running that application
  • a script for dumping a single Ophelia-generated page to stdout
  • use restructured text format for documentation
  • scripts are now allowed in macro files
  • more informative error pages and logs
  • configuration options changed from CamelCase to lower_case
Bug fixes:
  • Apache-generated directory indexes and PHP pages work now. This needs at least version 3.3 of mod_python.
  • actually use the template text passed to StopTraversal as a template
  • renamed modules, moved classes between modules:
    • publisher.Namespace -> util.Namespace
    • template -> input
    • apache -> modpython
    • publisher.PageTemplate* -> pagetemplate.PageTemplate*
    • publisher.Publisher -> request.Request, publisher -> request, also renamed script variable __publisher__ -> __request__
  • current template moved from request member (template) to pre-defined script and TALES variable __template__

  • request.Redirect exception has an option for replacing the path portion of the target URL (saves the client some urlparse acrobatics) and uses the original request’s complete URI as a default base for the target

  • combined request.StopTraversal exception parameters into one, text

  • added methods insert_template and interpret_template to request, reduced load_macros signature to a single relative file name

  • added the next_name request member as a temporary solution for overriding the file or directory read during the next traversal step

  • replaced request member file_path by dir_path as that’s simpler to use

  • store environment namespace on request as member env instead of the Apache request

  • use zope.pagetemplate instead of fiddling with the TAL engine directly
  • use zope.exceptions instead of log_error to get supplemented tracebacks and cleaner code
  • use zope.interface to formally specify the API exposed to user code
  • some clean-up
  • made egg name lower case
  • made the ophelia egg require needed parts of Zope by egg dependencies
  • added svn:ignore property
  • set up a zc.buildout environment for a development installation
  • added tests

0.2 (2007-02-04)

  • made template and script encodings and the index template name configurable from Apache config
  • renamed SitePrefix config variable to “Site”
  • cleaned up pre-defined script variables, introduced __publisher__ and __file__
  • made script variables directly usable in templates
  • updated and improved documentation and example site
  • switched configuration to using Location directives to get rid of dummy static directories and index.html files
  • added optional redirection of URLs ending with index page to directories
  • added ophelia.tool.feed, providing a download function using the Universal feedparser package, and a feed loader for using the feeds downloaded
Bug fixes:
  • correctly compute ETags from unicode content
  • fixed a typo in the example’s CSS
  • fixed a missing trailing slash in the site variable and spurious leading slashes in the traversal history entries which broke URL synthesis
  • made localized dates with non-ASCII chars in month names usable with templates by adding ophelia.util.strftime
  • made the publisher available to functions called from inside templates
  • made ophelia.publisher.Namespace subclass dict
  • turned publisher and file splitter into objects accessible from scripts
  • removed thus obsolete ophelia.oapi module
  • added set_chapter() to navigation tool, removed the zoo of URI builders
  • added Redirect exception
  • renamed methods to get rid of camel case and comply with current PEP 8
  • added ophelia.util with an strftime function that returns unicode
  • modularized publishing logic
  • straightened out handling of URL and file paths
  • replaced file() calls by open() calls
  • added change log
  • moved roadmap from docs to distribution root, added README.txt to root
  • started using setuptools and distributing Ophelia as a Python egg
  • moved opheliatools package to ophelia.tool for minimal namespace impact

0.1 (2006-07-23)

initial “works for me” release