Change log for Ophelia
- 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
- 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.
- 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.
- The navigation tool now allows splitting menus into blocks by inserting
menu entries with empty titles.
- 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
- 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
- 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 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.
- tools: added the Metadata.mtime method which returns the current input
file's modification time as a datetime object
- 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
- 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
- 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
- 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
- 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
- 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
initial "works for me" release
.. Local Variables:
.. mode: rst