======================
Change log for Ophelia
======================

0.4.1 (2013-05-07)
==================

- Updated project files to reflect the new secondary, GitHub home at
  <https://github.com/tlotze/ophelia>.

- Updated buildout configuration to keep working with zc.buildout 1.

- Fixed a memory leak in Namespaces that would occur with Python versions
  prior to 2.7.4.


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 ``ophelia.xxx``.

- 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 <https://bitbucket.org/tlotze/ophelia/>.

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

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:
