=======
Changes
=======

0.3.4 (2011-04-14)
==================

User-visible:
  - 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.

API:
  - 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.

Code:
  - 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.

Organization:
  - 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

API:
  - 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

Organization:
  - added setup for generating HTML documentation using Sphinx


0.3.2 (2008-01-08)
==================

User-visible:
  - more helpful tracebacks for broken page templates

  - None is available in the page template evaluation context

API:
  - 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

Organization:
  - simplified setup.py: 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)
==================

User-visible:
  - 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.

API:
  - 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

Organization:
  - simplified buildout configuration


0.3 (2007-07-06)
================

User-visible:
  - 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

API:
  - 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

Code:
  - 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

Organization:
  - 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)
================

User-visible:
  - 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

API:
  - 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

Code:
  - modularized publishing logic

  - straightened out handling of URL and file paths

  - replaced file() calls by open() calls

Organization:
  - 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


.. Local Variables:
.. mode: rst
.. End:
