------------------------------------------------------------------------
r8887 | andrewm | 2007-03-16 20:35:33 +1100 (Fri, 16 Mar 2007) | 6 lines

Previously, if Request did not contain an __albform__ field, all request
fields would be merged. This allows simple GET requests to work, but
could be used to modify unexpected namespace attributes. This change
suppresses the merge if no __albform__ field is found. Application can
request specific fields be merged with the ctx.merge_vars() method.

------------------------------------------------------------------------
r8886 | andrewm | 2007-03-16 20:31:50 +1100 (Fri, 16 Mar 2007) | 2 lines

Added ResponseMixin.

------------------------------------------------------------------------
r8885 | andrewm | 2007-03-15 17:26:22 +1100 (Thu, 15 Mar 2007) | 2 lines

Bump version, initial pass at release notes for 1.36

------------------------------------------------------------------------
r8884 | andrewm | 2007-03-15 15:14:41 +1100 (Thu, 15 Mar 2007) | 2 lines

Switch in "new" fcgiapp module for old. Old is still available as fcgiappold.

------------------------------------------------------------------------
r8883 | andrewm | 2007-03-15 14:14:02 +1100 (Thu, 15 Mar 2007) | 7 lines

Reimplement session server client code to make it more robust. Among
other things, EINTR is handled gracefully by retring the system call,
partial reads and writes are handled, and requests are retried if the
socket is closed (this will be more of an issue when the session server
is persistent). Socket error message text is included in the raised
ServerError when an error occurs.

------------------------------------------------------------------------
r8880 | andrewm | 2007-03-14 18:55:25 +1100 (Wed, 14 Mar 2007) | 5 lines

Introduce ListIteratorLite - a simpler ListIterator for cases were we
don't need pagination, etc. DO not index the sequence, use only the
iterator protocol. This class is used for all al-for iterators except
when pagesize or continue is defined.

------------------------------------------------------------------------
r8879 | andrewm | 2007-03-14 17:54:04 +1100 (Wed, 14 Mar 2007) | 2 lines

Document new <al-for vars="..."> attribute.

------------------------------------------------------------------------
r8878 | andrewm | 2007-03-14 16:38:02 +1100 (Wed, 14 Mar 2007) | 2 lines

Refactor common template test logic. Add a test for iterator paging.

------------------------------------------------------------------------
r8876 | andrewm | 2007-03-14 15:03:33 +1100 (Wed, 14 Mar 2007) | 3 lines

Add support for setting iterator value within an <al-for> with a new
"vars" attribute.

------------------------------------------------------------------------
r8874 | andrewm | 2007-03-14 12:05:59 +1100 (Wed, 14 Mar 2007) | 2 lines

Change doctest/tags-value1 - use of hash() was architecture dependant.

------------------------------------------------------------------------
r8873 | andrewm | 2007-03-14 11:56:47 +1100 (Wed, 14 Mar 2007) | 3 lines

Updated description of validate_request. Thanks to Stan Pinte for pointing
out the problem.

------------------------------------------------------------------------
r8871 | andrewm | 2007-03-14 11:29:57 +1100 (Wed, 14 Mar 2007) | 5 lines

Fix for problem found by Michael Neel: mixing "implicit multi" inputs
with singleton inputs was not raising an error. Fixed by extending the
input tracking logic with an additional state: "multiple inputs returning
single value" (radio, submit).

------------------------------------------------------------------------
r8851 | andrewm | 2007-03-13 16:29:01 +1100 (Tue, 13 Mar 2007) | 2 lines

Use common test_raise method for testing expected template errors.

------------------------------------------------------------------------
r8849 | andrewm | 2007-03-13 15:49:27 +1100 (Tue, 13 Mar 2007) | 4 lines

When testing set_value for raised errors, call it directly. Previously,
it was done by calling the _test method, which also called eval, so an
error raised by eval could mask a failure by set_value to raise an error.

------------------------------------------------------------------------
r8848 | andrewm | 2007-03-13 15:47:43 +1100 (Tue, 13 Mar 2007) | 2 lines

Remove completed items from TODO

------------------------------------------------------------------------
r8846 | andrewm | 2007-03-13 14:56:54 +1100 (Tue, 13 Mar 2007) | 2 lines

Fix incorrect example used in tag-option-labelexpr section.

------------------------------------------------------------------------
r8845 | andrewm | 2007-03-13 14:40:28 +1100 (Tue, 13 Mar 2007) | 2 lines

Update doco for changes to <al-option> tag.

------------------------------------------------------------------------
r8843 | andrewm | 2007-03-13 11:51:26 +1100 (Tue, 13 Mar 2007) | 3 lines

Simplified version of <al-option> fixes in previous check-in. More
tests. Still no doco updates.

------------------------------------------------------------------------
r8842 | andrewm | 2007-03-12 17:04:09 +1100 (Mon, 12 Mar 2007) | 8 lines

Fix the <al-option> tag so that it no longer needs to appear directly
within an <al-select> tag (previously this would silently fail to
generate content). This allows it to be used with <al-for> for cases
where optionexpr is too simplistic. Also added support for "expr" and
"valueexpr" attributes. Added tests for new code, as well as error
conditions. Documentation needs to be updated. Also did a small amount
of refactoring of tests.

------------------------------------------------------------------------
r8841 | andrewm | 2007-03-12 14:13:16 +1100 (Mon, 12 Mar 2007) | 3 lines

Add a test for application flow (page_enter, page_display, page_process,
page_leave). Factor out a common DummyRequest class for tests.

------------------------------------------------------------------------
r8534 | andrewm | 2007-02-13 17:35:34 +1100 (Tue, 13 Feb 2007) | 3 lines

Make a note about <al-option> being silently ignored when not directly
contained in <al-select>.

------------------------------------------------------------------------
r8533 | andrewm | 2007-02-13 17:33:33 +1100 (Tue, 13 Feb 2007) | 2 lines

Add note about <al-select> not supporting <optgroup>

------------------------------------------------------------------------
r8003 | andrewm | 2006-11-20 12:05:51 +1100 (Mon, 20 Nov 2006) | 2 lines

Fix incorrect format string args in al-session-daemon.

------------------------------------------------------------------------
r7027 | andrewm | 2006-08-22 09:38:24 +1000 (Tue, 22 Aug 2006) | 2 lines

Fix FCGI_MAX_DATA (operator precedence mistake picked up by Tom Limoncelli).

------------------------------------------------------------------------
r6957 | djc | 2006-08-15 12:48:22 +1000 (Tue, 15 Aug 2006) | 2 lines

Catch up with official public release.

------------------------------------------------------------------------
r6953 | djc | 2006-08-14 12:36:35 +1000 (Mon, 14 Aug 2006) | 2 lines

Forgot to migrate this from CVS.

------------------------------------------------------------------------
r6639 | andrewm | 2006-06-26 15:50:25 +1000 (Mon, 26 Jun 2006) | 3 lines

Add <al-setdefault> tag to set default value for named macro arguments
(this and the previous checkin from an idea by Greg Bond).

------------------------------------------------------------------------
r6638 | andrewm | 2006-06-26 13:39:25 +1000 (Mon, 26 Jun 2006) | 3 lines

Added "simple" macro arguments (<al-expand fooarg="..."> and <al-expand
fooargexpr="...">).

------------------------------------------------------------------------
r6623 | andrewm | 2006-06-23 18:40:43 +1000 (Fri, 23 Jun 2006) | 2 lines

Additional tests for macros.

------------------------------------------------------------------------
r6622 | andrewm | 2006-06-23 18:07:39 +1000 (Fri, 23 Jun 2006) | 3 lines

Simplify macro arg handling in Expand tag (avoid recreating copy of arg dict
each time).

------------------------------------------------------------------------
r6621 | andrewm | 2006-06-23 18:04:17 +1000 (Fri, 23 Jun 2006) | 3 lines

Simplify macro arg handling (avoid searching parent name-spaces by using
cloned dictionaries).

------------------------------------------------------------------------
r6620 | andrewm | 2006-06-23 17:32:54 +1000 (Fri, 23 Jun 2006) | 3 lines

Put generalised versions of ...expr and ...bool attribute processing on
Tag class.

------------------------------------------------------------------------
r6619 | andrewm | 2006-06-23 14:56:26 +1000 (Fri, 23 Jun 2006) | 4 lines

Add get_param() method to fcgiapp.Request class, which allows base
class to access http "environment" variables in a portable way (for CGI,
they're try environment variables, but FastCGI does it differently).

------------------------------------------------------------------------
r6618 | andrewm | 2006-06-23 14:44:26 +1000 (Fri, 23 Jun 2006) | 3 lines

Merge from branch py2k: changes to use more python 2 constructs, rename
local variables that conflict with builtins.

------------------------------------------------------------------------
r6617 | andrewm | 2006-06-23 14:41:22 +1000 (Fri, 23 Jun 2006) | 4 lines

Merge from branch: Add proof-of-concept tool to spawn a fastcgi-enabled
app as a stand-alone FastCGI server (inet or unix socket). Still needs
"daemonisation".

------------------------------------------------------------------------
r6570 | andrewm | 2006-06-20 19:58:15 +1000 (Tue, 20 Jun 2006) | 2 lines

Add 1.35 release announcement.

------------------------------------------------------------------------
r6569 | andrewm | 2006-06-20 19:46:17 +1000 (Tue, 20 Jun 2006) | 4 lines

Change the way the doc Makefile finds the python doc tools (previous way failed
if python was installed to /usr/local). Changed dia invocation to support dia
0.95 (with comment for 0.94 version). Updated ChangeLog and TODO.

------------------------------------------------------------------------
r6568 | andrewm | 2006-06-20 18:10:53 +1000 (Tue, 20 Jun 2006) | 3 lines

Expand "Developing Custom Tags" documentation and update documention "changes"
information.

------------------------------------------------------------------------
r6567 | djc | 2006-06-20 16:52:27 +1000 (Tue, 20 Jun 2006) | 2 lines

Use the installed documentation tools for building.

------------------------------------------------------------------------
r6563 | andrewm | 2006-06-20 13:14:57 +1000 (Tue, 20 Jun 2006) | 2 lines

Fix file broken by cvs2svn.

------------------------------------------------------------------------
r6562 | andrewm | 2006-06-20 12:40:42 +1000 (Tue, 20 Jun 2006) | 2 lines

Check for session server - if not running, warn and skip test.

------------------------------------------------------------------------
r6561 | andrewm | 2006-06-20 11:35:51 +1000 (Tue, 20 Jun 2006) | 3 lines

In test Makefiles, allow python interpreter to be overridden by user
from command line, for example: "make PYTHON=python2.4"

------------------------------------------------------------------------
r6267 | andrewm | 2006-05-29 15:18:04 +1000 (Mon, 29 May 2006) | 3 lines

If client closed connection while server had write data pending, a subsequent
del_write_file would generate an exception, killing the server.

------------------------------------------------------------------------
r6266 | andrewm | 2006-05-03 12:11:23 +1000 (Wed, 03 May 2006) | 2 lines

- update ChangeLog, bump version to 1.35

------------------------------------------------------------------------
r6265 | andrewm | 2006-05-03 12:10:54 +1000 (Wed, 03 May 2006) | 2 lines

- update ChangeLog, bump version to 1.35

2006-04-07 17:40  andrewm

	* albatross/tags.py: Input tags needed to be taught about
	  disabledbool attribute.

2006-03-24 12:07  andrewm

	* albatross/fcgiappnew.py:
	  - fastcgi: break stdout data up into chunks < 64k (16 length field),
	    check for oversized data in send method.

2006-03-20 17:23  andrewm

	* albatross/fcgiappnew.py:
	  - fix a bug in the code that unpacks large attribute-value pairs
	    (headers) in the new FastCGI implementation.

2006-02-23 18:13  andrewm

	* albatross/: context.py, template.py:
	  - when a user registers an extension tag, check the name against the
	    template parsing regexp to ensure the name can be matched.

2006-02-20 10:57  djc

	* redhat/albatross.spec: Bump release to 1.34.

2006-02-14 18:00  andrewm

	* setup.py, albatross/__init__.py, albatross/sessionfile.py,
	  doc/albatross.tex, doc/installation.tex:
	  - bump version to 1.34

2006-02-10 17:05  andrewm

	* albatross/template.py: Give the AnyTag knowledge of HTML tags for
	  which the close tag is forbidden, so it can avoid generating XHTML
	  empty tag (which can cause the doc to fail HTML validation).

2006-02-09 21:26  andrewm

	* albatross/cgiapp.py: Some minor refactoring to support the
	  fcgiappnew module.

2006-02-09 21:22  andrewm

	* albatross/fcgiappnew.py: Drop-in replacement for fcgiapp.py -
	  this version implements the FastCGI protocol itself, rather than
	  relying on an external module to implement the protocol (we have not
	  been able to clarify the license of the fcgi.py module). This new
	  module seems to address several problems with fcgi.py, and should be
	  faster, although it hasn't received much testing yet (but it works
	  for me with Apache 1.3).

2006-01-10 15:56  andrewm

	* test/templates/: macro.py, macro/unnamed.html:
	  - add test for "unnamed" macro argument.

2006-01-09 15:49  andrewm

	* doc/: tags.tex, doctest/tags-anytag-tr, doctest/tags-exception:
	  - document the "anytag" functionality.
	  - fix mangled al-for paging example.

2006-01-09 15:47  andrewm

	* doc/test_examples.py:
	  - reimplemented the doc examples tester to make the code slightly
	    more readable and to make it's handling of trailing whitespace a
	    little more explicit.

2005-12-16 17:04  andrewm

	* ChangeLog, dist/release-1.33: Update changelog and release notes.

2005-12-16 16:59  andrewm

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/changes.tex, doc/installation.tex:
	  - bump version to 1.33

2005-12-16 16:19  andrewm

	* albatross/context.py, test/namespace/__init__.py,
	  test/namespace/set_value.py:
	  - In NamespaceMixin.set_value, use state machine for evaluating
	    iterator backdoors, rather than calling get_value.
	  - Add tests for set_value state machine.
	  - Improve error set_value state machine error reporting.

2005-08-16 16:47  andrewm

	* dist/release-1.32:
	  * add release notice.

2005-08-16 16:30  andrewm

	* ChangeLog, doc/albatross.tex, doc/changes.tex:
	  - Update ChangeLog and doc "Changes" appendix for 1.32 release.

2005-08-16 15:32  andrewm

	* albatross/app.py:
	  - Greg noted earlier that using set_page within the start page would
	    result calls to page_enter, page_display, etc on the wrong page
	    object (the initial page, rather than the requested page) - this is
	    a more comprehensive fix to the problem.

2005-08-16 10:02  djc

	* albatross/app.py: Fixed incorrect empty argument list for
	  page_enter() in load_page().

2005-08-15 16:04  andrewm

	* albatross/: app.py, branchingsession.py, context.py, fcgiapp.py,
	  pidfile.py, request.py, sessionfile.py, tags.py, template.py:
	  - whitespace normalisation

2005-08-15 15:59  andrewm

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/installation.tex:
	  - bump version to 1.32.

2005-08-15 15:49  andrewm

	* albatross/context.py:
	  - _caller_globals was raising and catching an exception, then
	    referencing sys.exc_traceback to get the frame objects -
	    sys.exc_traceback was deprecated in python 1.5, and appears to be
	    unreliable in 2.4, so _caller_globals now uses sys._getframe().

2005-08-15 15:39  andrewm

	* setup.py:
	  - revert change of #! line back to /usr/bin/env

2005-08-05 14:15  gregh

	* albatross/app.py:
	  - load_page sets start_page manually instead of calling set_page.
	    Avoids possible nested calls to set_page which can result in a very
	    confused session.

2005-07-28 15:04  djc

	* ChangeLog, setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/installation.tex: 
	  - Bump release to 1.31

2005-06-21 15:30  gregh

	* albatross/randompage.py:
	  - handle ImportError for pages with '/' in the path.

2005-06-21 12:45  gregh

	* albatross/randompage.py:
	  - fixed broken error handling for attempt to access unknown page
	    using RandomPageModuleMixin

2005-05-31 15:23  andrewm

	* ChangeLog, setup.py, albatross/__init__.py, dist/release-1.30,
	  doc/albatross.tex, doc/changes.tex, doc/installation.tex:
	  - updates for 1.30 release.

2005-05-31 12:28  andrewm

	* albatross/app.py:
	  - covert a tab to spaces.

2005-05-20 00:04  andrewm

	* albatross/context.py, doc/mixins.tex, test/namespace/recorder.py,
	  test/templates/albatross_test.py:
	  - add discard_file_resources method to ResourceMixin - drops macros
	    and lookups associated with a given file when the template is
	    reloaded.
	  - restructured application and context objects used by unit tests to
	    be more like normal application usage (specifically TemplaterLoader
	    on app, rather than ctx).
	  - start with a fresh application object for each unit test - macros
	    and lookups are cached on the application object, and these were
	    previously carried across multiple tests.

2005-05-19 11:18  andrewm

	* albatross/fcgiapp.py: 
	  - call fcgi.Finish() method from fcgiapp
	    return_code() method (which is somewhat of a hack) - otherwise
	    the fcgi stdout and stderr buffers are not reliably written
	    to the web server.

2005-05-19 11:16  andrewm

	* albatross/app.py: 
	  - Explicitly delete traceback from local namespace (otherwise
	    cycles result)

2005-05-12 15:11  andrewm

	* albatross/context.py: Add test to prevent macros and lookups
	  being redefined (duplicate definitions cause obscure application
	  failures).

2005-05-06 12:25  gregh

	* albatross/context.py: default args to imp_hook match args to
	  __import__

2005-05-05 18:14  andrewm

	* TODO, albatross/tags.py, doc/albatross.tex, doc/tags.tex,
	  test/templates/lookup.py, test/templates/lookup/inline.html,
	  test/templates/lookup/lookup.html,
	  test/templates/lookup/no-close.html,
	  test/templates/lookup/no-default.html:
	  - add "inline" form of al-lookup tag.

2005-04-19 19:57  andrewm

	* albatross/tags.py:
	  - bugfix - when used on al-select, albatross-specific "list"
	    attribute was leaking into resulting markup.

2005-04-19 19:53  andrewm

	* albatross/tags.py, doc/doctest/tags-form-action,
	  doc/doctest/tags-form-file, test/templates/form.py,
	  test/templates/tree.py,
	  test/templates/form/select-name-expr.html:
	  - bugfix - "expr" attribute used with al-select resulted in
	    invalid markup.
	  - tests - update for <div> wrapping hidden fields.

2005-04-17 22:54  andrewm

	* albatross/branchingsession.py, albatross/context.py: 
	  - Issue raised by Robert Fendt: Albatross-generated hidden field
	    input element must not appear naked inside a form element
	    for strict HTML conformance.  Solution is to wrap input
	    elements in div's.

2005-03-01 14:12  andrewm

	* setup.py, albatross/__init__.py, albatross/tags.py,
	  albatross/template.py, doc/albatross.tex, doc/installation.tex,
	  doc/tags.tex, test/templates/__init__.py,
	  test/templates/albatross_test.py, test/templates/require.py:
	  - Add <al-require> tag and bump version.

2005-03-01 10:53  andrewm

	* albatross/branchingsession.py:
	  - reinstate "session id" in branching sessions - if session
	    id or transaction id is not valid, the session has
	    expired. This allows us to invalidate a group of transaction
	    id's when a user logs out, preventing the browser <back>
	    button being used to return to a previous logged in state.

2004-11-03 16:48  gregh

	* albatross/app.py: Added 'Cache-Control: no-cache' to HTTP headers
	  because IE sometimes ignores 'Pragma: no-cache'.

2004-10-27 16:51  djc

	* albatross/session.py, albatross/sessionfile.py: 
	  - Remove timeout on session cookie.  Change session
	    loading to that it raises SessionExpired only when
	    a session id was present but no session was at the
	    server.  No special casing on GET requests any more.
	    Added SessionServerContextMixin.new_session() method which
	    creates a new session in the context and session server.
	    SessionServerContextMixin.remove_session() no longer creates
	    a new session, it removes the session and clears the session
	    id so that the session cookie is sent with an empty id.

2004-10-21 17:02  andrewm

	* albatross/template.py:
	  - Add new "AnyTag" wildcard tag. Any HTML tag can be prefixed
	    with "al-", and the *expr or *bool attribute evalution will
	    be applied.

2004-10-21 15:44  andrewm

	* albatross/template.py:
	  - Base Tag class can now evaluate any attribute. If attribute
	    name ends with "expr", the attribute string is evaluated
	    and the result substituted.  If the attribute name ends with
	    "bool", an attribute is only output if the value evaluates
	    to true.

2004-10-20 16:44  andrewm

	* albatross/tags.py, albatross/template.py:
	  - moved eval_attrib() method to Tag class
	  - renamed EvalAttribMixin to InputNameValueMixin

2004-10-20 16:38  andrewm

	* TODO, albatross/fcgiapp.py, albatross/tags.py,
	  albatross/template.py, doc/customtags.tex:
	  - move "assert_has_attribs" from EvalAttribMixin to Tags class,
	    rename "assert_any_attrib" and add documentation.

2004-10-20 14:31  andrewm

	* doc/appuser.tex:
	  - add examples of cgi and fastcgi mainlines.
	  - added documention of albatross exception classes.

2004-10-20 13:07  andrewm

	* doc/: albatross.tex, appuser.tex, mixins.tex:
	  - Add new subsection on Application Deployment Options to the
	    manual, and collect all information about Request classes
	    there (and write documentation on FastCGI and stand-alone
	    deployment).

2004-10-19 23:50  andrewm

	* dist/release-1.20:
	  - add short "changes" list to release announcement.

2004-10-19 23:24  andrewm

	* dist/release-1.20, doc/changes.tex: More 1.2 -> 1.20 changes

2004-10-19 23:21  andrewm

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/installation.tex:
	  - changed version from 1.2 to 1.20 so it will sort correctly.

2004-10-19 22:57  andrewm

	* test/sessions/request.py:
	  - dummy request object used by session tests was missing
	    get_method().

2004-10-19 17:57  andrewm

	* ChangeLog, setup.py, albatross/__init__.py, dist/release-1.20,
	  doc/albatross.tex, doc/installation.tex:
	  - Bump version to 1.2
	  - Update ChangeLog

2004-10-19 17:41  andrewm

	* .cvsignore, doc/.cvsignore, doc/packaged.tex:
	  * Reorganise "Prepackaged Application and Execution Context Classes"
	    into Application classes, Context classes, and other stuff.

2004-10-19 17:31  djc

	* doc/: Makefile, appcontext.dia, application.dia,
	  branchingsessioncontext.dia, modularapp.dia, modularsessapp.dia,
	  modularsessfileapp.dia, randmodapp.dia, randmodsessapp.dia,
	  randmodsessfileapp.dia, sessionappcontext.dia,
	  sessionfileappcontext.dia, simpleapp.dia, simpleappcontext.dia,
	  simplecontext.dia, simplesessapp.dia, simplesessfileapp.dia:
	  Re-align the diagrams - dia buggers this up from time to time.

2004-10-19 14:35  andrewm

	* ChangeLog, setup.py, albatross/__init__.py,
	  albatross/branchingsession.py, dist/release-1.2,
	  doc/AlbatrossObjects.dia, doc/Makefile, doc/albatross.tex,
	  doc/branchingsessioncontext.dia, doc/installation.tex,
	  doc/mixins.tex, doc/packaged.tex:
	  * Update doco for BranchingSession functionality.
	  * Run dia export with --export-to-format=eps-builtin for better font
	    rendering.

2004-10-19 10:14  andrewm

	* doc/changes.tex:
	  * Updated changes.tex with 1.2 changes.

2004-10-18 22:01  andrewm

	* doc/changes.tex:
	  * Update doco changes list to include differences between pre1 and
	  pre2

2004-10-18 21:48  andrewm

	* ChangeLog:
	  * ChangeLog included items from baseline (not just branch).

2004-10-18 18:32  andrewm

	* ChangeLog:
	  * refresh ChangeLog

2004-10-18 17:58  andrewm

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/installation.tex:
	  * package 1.11 release (which is just 1.11pre2 with the version
	    numbers changed).

2004-10-15 14:32  andrewm

	* albatross/: .cvsignore, __init__.py, branchingsession.py:
	  * Add BranchingSessionMixin - a context mixin that stores sessions
	    server-side, encoding a fresh session id in a hidden field for
	    every interaction with the server. By maintaining a large number
	    of "old" session contexts, and storing a session identifier in a
	    hidden field, we can match sessions with browser state (in the face
	    of reloads and "back" button usage).

2004-08-24 16:07  andrewm

	* doc/mixins.tex:
	  * fix typo

2004-03-23 16:54  andrewm

	* dist/dist-albatross.sh: Quick fix to version munging in dist
	  building script.

2004-03-23 16:52  andrewm

	* samples/templates/: content1/content.py, content2/content.py:
	  Quick fix to abs template path problem.

2004-03-15 19:53  andrewm

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/installation.tex: Bumped version numbers.

2004-03-15 19:47  andrewm

	* albatross/: session.py, sessionfile.py: Issue a new session after
	  remove_session is called - this is wrong, but makes server side
	  sessions consistent with hidden field behaviour, and satisfies other
	  assumptions that a valid sesion always exist.

2004-03-15 14:18  andrewm

	* albatross/: apacheapp.py, cgiapp.py, common.py, fcgiapp.py,
	  httpdapp.py, session.py, sessionfile.py: Raise SessionExpired if
	  request method is not GET (i.e. POSTing form data) and there is no
	  session (either no cookie, or session data missing). Also try to
	  clear cookie after a remove_session (unlikely to work in many
	  cases).

2004-03-10 13:02  andrewm

	* albatross/: session.py, sessionfile.py:
	  * Don't attempt to save or remove a session after it has been
	  removed.

2004-03-10 12:04  andrewm

	* albatross/: session.py, sessionfile.py:
	  * Set cookie max-age based on session server age param

2004-03-10 11:49  andrewm

	* albatross/app.py, albatross/session.py, albatross/sessionfile.py,
	  test/sessions/ses_file.py, test/sessions/ses_server.py:
	  * Set "secure" attribute on cookies used via https (which, in
	    theory, prevents their later use via http).
	  * Pulled cookie setting and getting code out of
	    SessionServerContextMixin and SessionFileContextMixin into new
	  SessionCookieMixin
	  * Exposed request URI parsing method of app.py as
	  parsed_request_uri()

2004-02-03 11:16  andrewm

	* ChangeLog, setup.py, albatross/__init__.py, doc/albatross.tex,
	  doc/installation.tex: Updated for development snapshot 20040203

2004-01-15 16:31  andrewm

	* albatross/apacheapp.py, albatross/app.py, albatross/cgiapp.py,
	  albatross/httpdapp.py, albatross/request.py, doc/albatross.tex,
	  doc/mixins.tex, test/misc/pagemodule.py: Created new RequestBase
	  class containing RequestField and RequestStatus classes, changed
	  apacheapp, cgiapp, fcgiapp and httpdapp over to use the new base.
	  Added new return_code() method to Request objects. Fixed mod_python
	  (apacheapp) status handling (always return apache.OK).

2004-01-15 16:28  andrewm

	* test/misc/uriparse.py: Some tests for URI parsing (missed from
	previous checkin).  

2004-01-14 16:10  andrewm

	* ChangeLog, setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Update for 1.2-dev-20040114 

2004-01-14 15:22  andrewm

	* albatross/app.py, test/misc/__init__.py: Fixes to redirect_url()
	suggested by Sheila King and Michael Neel, and some associated
	tests.  

2004-01-14 13:57  andrewm

	* albatross/app.py, albatross/context.py, doc/.cvsignore,
	doc/mixins.tex, test/all.py, test/misc/.cvsignore,
	test/misc/__init__.py, test/misc/pagemodule.py,
	test/misc/modules/.cvsignore, test/misc/modules/missing_methods.py,
	test/misc/modules/run_template.py, test/misc/modules/simple.html,
	test/misc/modules/simple_module.py, test/misc/modules/submod.py,
	test/misc/modules/submod/.cvsignore,
	test/misc/modules/submod/module_decode.py,
	test/misc/modules/submod/module_hierarchy.py: Import page modules
	into a dummy module to prevent them from poluting the python module
	namespace. Use an import hook to load page modules, rather than
	prefixing sys.path around the cPickle.loads in decode_session().  
	Added tests for the new page module loader.  

2004-01-14 11:19  andrewm

	* albatross/tags.py: 
	- minor rationalisation of <input> attribute handling.  

2004-01-09 23:46  andrewm

	* albatross/cgiapp.py: 
	* fix last minute typo in previous check-in.  

2004-01-09 23:38  andrewm

	* albatross/apacheapp.py, albatross/app.py, albatross/cgiapp.py,
	albatross/common.py, albatross/httpdapp.py,
	standalone-server/al-httpd: 
	* added HTTP/1.0 status header definitions from RFC1945 as well as
	  some helper methods to classify status codes and a method to convert
	  a status code into a string. Converted all hard coded status codes
	  to use the new symbolic HTTP_* names.  
	* in cgiapp.Request, if status is not "200 OK", then emit a
	"Status:" header.  
	* when an exception occurs, set status to HTTP_INTERNAL_SERVER_ERROR 
	* refactored httpdapp - it's Request class now proxies requests
	  directly to the handler - previously it saved the data and the
	  handler pulled it out and called methods on the base.  
	* httpdapp status_resources is now a list of tuples, although a
	  dictionary will still be accepted. This allows the resources to be
	ordered by priority.  
	* httpdapp: output content even when status != 200 (otherwise no
	tracebacks!) 
	* changed al-httpd's argument parsing to give the usage message when 
	  the status resources aren't paired.  

2004-01-09 15:34  andrewm

	* TODO, albatross/apacheapp.py, albatross/app.py,
	albatross/httpdapp.py, doc/mixins.tex: 
	* bugfix - response header handling should not have been case
	sensitive.  
	* enhancement - allow multiple headers with the same name (Cookies,
	  in particular). NOTE: that ResponseMixin.get_header() now returns a
	list.  
	* Changed httpdapp to store headers in a list, rather than a
	  dictionary (allows multiple headers of the same name).  

2004-01-09 11:32  andrewm

	* TODO, albatross/app.py, doc/appuser.tex, doc/tags.tex,
	samples/popview1/popview.py, samples/popview2/popview.py: 
	* Fixed: <al-input type="image"> is confusing. Consider having
	  ctx.req_equals() check for "name.x" if "name" doesn't exist?
	(Michael C. Neel) 

2003-11-10 11:35  djc

	* albatross/app.py: Fix Cookie path bug noticed in Safari where
	absolute_base_url() was generating /path/app.cgi/ instead of
	/path/app.cgi.  This was causing problems for requests like
	/path/app.cgi?blah in that Safari did not send the cookie (probably
	correctly).  

2003-10-03 13:56  djc

	* dist/dist-albatross.sh, doc/Makefile, doc/albatross.tex,
	doc/installation.tex, doc/pstumble: Remove the PostScript booklet
	from the distribution - acroread 5 doesn't like the PDF created by
	pdflatex while converting to PS.  

2003-10-03 11:46  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Prepare for 1.11pre2 release.  

2003-10-03 11:32  djc

	* albatross/tags.py: Make <al-select> work exactly the same way as
	<al-input> with respect to name and value attributes.  

2003-09-21 16:58  djc

	* doc/installation.tex: Explain how to make an application private
	installation.  

2003-09-21 15:59  djc

	* dist/dist-albatross.sh: Do not specify DISPLAY.  

2003-09-21 14:45  djc

	* ChangeLog: Update changelog for new release.  

2003-09-21 14:40  djc

	* albatross/context.py, doc/doctest/tags-form-action,
	doc/doctest/tags-form-file, doc/doctest/tags-img,
	doc/doctest/tags-img-noescape, doc/doctest/tags-input-checkbox,
	doc/doctest/tags-input-file, doc/doctest/tags-input-generic,
	doc/doctest/tags-input-image, doc/doctest/tags-input-nameexpr,
	doc/doctest/tags-input-nextpage, doc/doctest/tags-input-noescape,
	doc/doctest/tags-input-radio1, doc/doctest/tags-input-radio2,
	doc/doctest/tags-input-radio3, doc/doctest/tags-input-treeselect,
	doc/doctest/tags-input-treeselect-node, test/namespace/recorder.py,
	test/sessions/request.py, test/sessions/ses_file.py,
	test/sessions/ses_server.py, test/templates/basic.py,
	test/templates/form.py, test/templates/tree.py: Forgot to update
	the unittests - ooooooops.  

2003-09-21 14:06  djc

	* doc/changes.tex: Forgot to document a change.  

2003-09-21 14:03  djc

	* setup.py, albatross/__init__.py, albatross/app.py,
	albatross/fcgiapp.py, albatross/session.py,
	albatross/sessionfile.py, doc/albatross.tex, doc/appcontext.dia,
	doc/changes.tex, doc/doc_methods.py, doc/installation.tex,
	doc/packaged.tex, doc/sessionappcontext.dia,
	doc/sessionfileappcontext.dia, doc/simpleappcontext.dia: Remove the
	new page module loader - now releasing 1.11pre1 not 1.20pre1.  Make
	sure that all of the fixes on the mailing list were applied.  Bring
	documentation up to date.  

2003-09-20 22:49  djc

	* doc/changes.tex: Document the changes since 1.10 

2003-09-20 22:27  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Prepare for 1.20pre1 release.  

2003-09-20 22:26  djc

	* albatross/app.py: Improved page module loader.  Does not pollute
	sys.modules.  WARNING will cause breakage - but it is worth it.  

2003-09-20 22:16  djc

	* doc/: albatross.tex, appuser.tex, customtags.tex, fakeapp.py: 
	Update documentation to match changes to samples.  

2003-09-20 21:54  djc

	* standalone-server/al-httpd: Very nasty hack to override base_url
	member in Application.  This allows the RandomPageModuleMixin to
	work without the browser having to explicitly specify the base_url
	in the request.  

2003-09-20 21:45  djc

	* samples/random/: install.py, paginate.html, paginate.py,
	tree.html, tree.py, pages/paginate.html, pages/paginate.py,
	pages/tree.html, pages/tree.py: Allow sample to be run via
	al-httpd.  

2003-09-20 21:20  djc

	* samples/: mpperf/mpperf.py, sybase/sybase.py, tree1/tree.py,
	tree2/tree.py, tree3/tree.py: More samples working under al-httpd.  

2003-09-20 21:07  djc

	* standalone-server/al-httpd: Allow uri/fs static resource pairs to
	be specified on the command line.  

2003-09-20 20:46  djc

	* samples/random/: install.py, randompage.py, tree.py, utils.py: Do
	not define Node in a page module.  This breaks the MVC idea (and
	stops the page module from working with the new page module
	loader...).  

2003-09-20 20:00  djc

	* doc/Makefile: Clean up more files.  

2003-09-20 19:59  djc

	* samples/random/: install.py, random.py, randompage.py: Rename
	random.py to randompage.py to prevent clash with Python standard 
	module.  

2003-09-20 17:32  djc

	* samples/: extension/cal.py, form4/form.py, paginate/paginate.py,
	popview1/popview.py, popview2/popview.py, popview3/popview.py,
	popview4/popview.py, popview5/popview.py, random/random.py: Make
	use of al-httpd possible for samples.  

2003-09-08 10:11  djc

	* samples/templates/: form2/form.html, form3/form.html: Added
	name="" attribute to <al-input type="submit"> tags to fix reported 
	error.  

2003-08-17 21:17  djc

	* samples/extension/cal.py: Works with al-httpd.  

2003-08-17 21:00  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Bump release number in preparation for next
	release.  

2003-08-17 20:59  djc

	* albatross/httpdapp.py: Applied latest and greatest patches from
	Matt Goodall.  

2003-08-17 20:39  djc

	* albatross/cgiapp.py: Applied get_Servername() patch from Damien
	Elmes.  

2003-08-10 22:02  djc

	* albatross/tags.py: Added patch from Matt Goodall to make
	<al-input> and <al-img> produce XHTML.  

2003-08-10 21:22  djc

	* albatross/: session.py, sessionfile.py: Cookie path fix from Matt
	Goodall.  

2003-08-10 21:20  djc

	* albatross/cgiapp.py: Yet another mod_python problem fixed by Greg
	Bond.  

2003-08-10 21:18  djc

	* doc/: albatross.tex, tags.tex: Added explanation that
	non-recognised tag attrivutes are passed through to output
	unchanged.  

2003-07-20 17:27  djc

	* ChangeLog, setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Chnage release to 1.10.  

2003-07-20 17:16  djc

	* dist/release-1.10, doc/albatross.tex: Wrote 1.10 release notice.  

2003-07-13 16:41  djc

	* albatross/app.py: SMall bugfix - decided to test this time...  

2003-07-13 16:28  djc

	* doc/: albatross.tex, appcontext.dia, sessionappcontext.dia,
	sessionfileappcontext.dia, simpleappcontext.dia: Added
	send_redirect() to ResponseMixin diagrams.  

2003-07-13 16:13  djc

	* setup.py, albatross/__init__.py, albatross/app.py,
	doc/albatross.tex, doc/installation.tex, doc/mixins.tex: Some idiot
	introduced an new redirect() method in ResposeMixin that was
	shadowed by AppContext.  Renamed to send_redirect().  

2003-07-13 12:27  djc

	* albatross/app.py, doc/mixins.tex: Added redirect() method to
	ResponseMixin so that it sets cookie on a redirect.  

2003-07-13 12:26  djc

	* albatross/randompage.py: Added latest randompage patch from Matt.
	Hopefully this is the one.  

2003-07-12 17:19  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Bump release ready for pre3 release.  

2003-07-12 17:00  djc

	* doc/mixins.tex: Added some more explanation of ResponseMixin.  

2003-07-12 16:49  djc

	* doc/: albatross.tex, mixins.tex: Documented the ResponseMixin
	class.  

2003-07-12 14:42  djc

	* albatross/: apacheapp.py, app.py, cgiapp.py, fcgiapp.py,
	httpdapp.py: Added get_path_info() to all requests as per Matt
	Goodalls patch.  Reverted previous changes to base_url setup in
	Application constructor.  

2003-07-12 14:09  djc

	* albatross/httpdapp.py: Return only path in get_uri().  Thanks
	Matt.  

2003-07-08 22:56  djc

	* albatross/context.py, albatross/randompage.py, doc/albatross.tex,
	doc/mixins.tex, doc/randmodapp.dia, doc/randmodsessapp.dia,
	doc/randmodsessfileapp.dia, doc/sessionappcontext.dia,
	doc/sessionfileappcontext.dia, doc/simpleappcontext.dia: Couldn't
	help myself - I implemented session_vars() and get_page_from_uri().  

2003-07-08 09:55  andrewm

	* albatross/fcgiapp.py: Fix from Matt Goodall - get_header was
	using __req, rather than __fcgi.  

2003-07-07 23:08  djc

	* albatross/app.py: Applied new and improved random page patch from
	Matt Goodall.  

2003-07-07 22:35  djc

	* doc/: Makefile, TODO, albatross.tex, doc_methods.py,
	packaged.tex: Automatically generate method location tables.  

2003-07-07 22:35  djc

	* doc/modularsessfileapp.dia: Fixed inheritance error spotted by
	Dougal Scott.  

2003-07-06 14:51  djc

	* doc/mixins.tex: First pass at making mixin reference match the
	current code.  

2003-07-06 14:06  djc

	* doc/customtags.tex: Documented the Tag.set_attrib_order() method.  

2003-07-06 13:40  djc

	* samples/: paginate/paginate.py, popview1/popview.py,
	popview2/popview.py, popview3/popview.py, popview4/popview.py,
	random/random.py, tree1/tree.py, tree2/tree.py, tree3/tree.py: Make
	all samples runnable via al-httpd.  

2003-07-06 13:40  djc

	* doc/Makefile: Run pstumble from current directory.  

2003-07-06 13:40  djc

	* doc/doctest/tags-comment: Improved example by adding before and
	after content.  

2003-07-05 20:46  djc

	* doc/: changes.tex, tempuser.tex: Final documentation updates
	before release.  

2003-07-05 20:29  djc

	* albatross/httpdapp.py, standalone-server/al-httpd: Added
	copyright message for Matt Goddall's contributed code.  

2003-07-05 17:52  djc

	* albatross/: app.py, randompage.py: Applied Matt Goodall's patch
	for fixing random page applications with standalone server.  

2003-07-05 17:36  djc

	* doc/changes.tex: Added change notice for FastCGI and
	BaseHTTPServer support.  

2003-07-05 17:35  djc

	* samples/templates/: content1/content.py, content2/content.py: Use
	TemplateLoadError exception.  

2003-07-05 17:08  djc

	* doc/doctest/tags-textarea: Renamed to tags-textarea1 

2003-07-05 17:08  djc

	* doc/introduction.tex: More points in introduction as per Matt
	Goodall suggestion.  

2003-07-05 17:07  djc

	* doc/thanks.tex: More thanks for Matt Goodall.  

2003-07-05 17:07  djc

	* doc/albatross.tex: Added more see also links.  

2003-07-05 17:06  djc

	* doc/installation.tex: Small update clarifying dia release and
	Python release for documentation building.  

2003-07-05 17:06  djc

	* doc/: tags.tex, doctest/tags-img-noescape,
	doctest/tags-input-noescape, doctest/tags-textarea1,
	doctest/tags-textarea2: Documented the new noescape tags.  

2003-07-05 13:49  djc

	* albatross/: app.py, cgiapp.py, context.py, session.py,
	sessionfile.py: PEP-8 compliant imports.  

2003-07-05 13:48  djc

	* albatross/tags.py: Forgot to include noescape in
	write_attribs_except().  

2003-07-05 13:12  djc

	* albatross/apacheapp.py, albatross/app.py, albatross/cgiapp.py,
	albatross/common.py, albatross/context.py, albatross/fcgiapp.py,
	albatross/pidfile.py, albatross/randompage.py,
	albatross/session.py, albatross/sessionfile.py,
	albatross/simpleserver.py, albatross/tags.py,
	albatross/template.py, samples/extension/cal.py,
	samples/form4/form.py, samples/mpperf/mpperf.py,
	samples/paginate/paginate.py, samples/popview1/popview.py,
	samples/popview1/popviewlib.py, samples/popview2/popview.py,
	samples/popview2/popviewlib.py, samples/popview3/popview.py,
	samples/popview3/popviewlib.py, samples/popview4/detail.py,
	samples/popview4/list.py, samples/popview4/login.py,
	samples/popview4/popview.py, samples/popview4/popviewlib.py,
	samples/popview5/detail.py, samples/popview5/list.py,
	samples/popview5/login.py, samples/popview5/popview.py,
	samples/popview5/popviewlib.py, samples/random/random.py,
	samples/random/tree.py, samples/sybase/sybase.py,
	samples/templates/tree/tree.py, samples/tree1/tree.py,
	samples/tree2/tree.py, samples/tree3/tree.py,
	session-server/al-session-daemon, standalone-server/al-httpd: Went
	through all files and applied PEP-8 rules on blank lines.  

2003-07-05 12:53  djc

	* albatross/httpdapp.py, samples/form4/form.py,
	standalone-server/al-httpd: Small fixes for al-httpd.  Tested with
	samples/form4.  

2003-07-05 12:38  djc

	* MANIFEST.in, setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Preparing for release 1.10pre2 

2003-07-05 12:38  djc

	* albatross/httpdapp.py, standalone-server/al-httpd: Added the
	standalone server from Matt Goodall.  Still need to put a copyright
	notice on it.  

2003-07-04 11:49  djc

	* albatross/tags.py: Add noescape attribute to <al-input
	value="...">, <al-img src="...">, <al-select optionexpr="...">
	(values returned by expression), and <al-textarea>.  

2003-07-03 22:41  djc

	* doc/appuser.tex: Added more execution context/application
	explanation as per Tim's suggestion.  

2003-07-01 21:42  andrewm

	* albatross/: cgiapp.py, context.py: Fix a couple of Python2.1
	incompatibilities (True/False and list/str being factory functions
	rather than types).  

2003-07-01 20:15  djc

	* doc/appuser.tex: Fixed unclear popview3 sample documentation.  

2003-06-29 19:47  djc

	* TODO: Removed tasks that have been completed.  

2003-06-29 19:32  djc

	* doc/tags.tex: Added small explanation of how to detect and
	process browser input for some <al-input> types.  

2003-06-29 15:56  djc

	* doc/doctest/tags-for7: Simplified example.  

2003-06-29 15:44  djc

	* doc/: tags.tex, doctest/tags-for7: Expanded explanation of
	<al-for> in response to concerns from Sheila King and Matt Goodall.  

2003-06-29 14:21  djc

	* doc/thanks.tex: Make html and pdf more consistant.  

2003-06-29 14:21  djc

	* doc/copyright.tex: Update years (not sure this is really
	necessary).  

2003-06-29 14:20  djc

	* doc/Makefile: Move to Python2.3 for correct verbatiminput
	downloads.  

2003-06-29 14:03  djc

	* doc/: albatross.tex, tags.tex, doctest/tags-macro8: Finished
	reorganising the tags reference.  Yay! 

2003-06-23 15:10  djc

	* albatross/tags.py: Do not need the content trap for macro
	arguments anymore.  

2003-06-19 23:08  andrewm

	* test/templates/: form.py, form/missing-name.html,
	form/null-name.html: Added tests for missing name and null name on
	input tags.  

2003-06-19 23:07  andrewm

	* albatross/tags.py: Added check for null name attribute.  

2003-06-19 22:33  andrewm

	* albatross/tags.py: Refactored tags.py: 
	* moved duplicated 'name', 'alias' and 'nameexpr' code into a common
	method 
	* made compilation of expr attributes lazy (compilation now occurs
	  at template run time, rather than template load time, and only when
	  the attribute is accessed).  
	* other *expr-style attributes now use common code object caching
	  and lazy compilation.  
	
	The result has some minor semantic differences - previously an
	attribute was tested for __nonzero__, the changed code tests against
	attribute existance.  This will effect cases such as <al-input
	name="" nameexpr="foo()">, 

2003-06-19 18:41  andrewm

	* doc/: changes.tex, mixins.tex, tempuser.tex: Reinstate
	TemplateLoadError as a subclass of ApplicationError.  

2003-06-19 18:28  andrewm

	* albatross/: common.py, context.py: Reinstate TemplateLoadError as
	a subclass of ApplicationError.  

2003-06-19 18:20  andrewm

	* albatross/context.py, test/templates/form.py,
	test/templates/form/nested-form.html: Added __needs_close attribute
	to NameRecorderMixin - raise an ApplicationError in form_close if
	not set (i.e., form_close() has already been called, which implies
	the template contains nested forms).  

2003-06-19 13:21  andrewm

	* albatross/app.py: Added optional "pop until" page name argument
	to pop_page().  

2003-06-17 21:58  djc

	* doc/: appuser.tex, changes.tex: Name more documentation nodes for
	HTML version.  

2003-06-17 21:28  djc

	* doc/tags.tex: Restructured the <al-tree> documentation.  Could
	probably do with more examples and text explaining the various
	attribute subsubsections.  

2003-06-17 21:03  djc

	* doc/: albatross.tex, tags.tex, doctest/tags-item: Updated
	<al-lookup> and <al-item> documentation.  

2003-06-17 14:59  andrewm

	* albatross/apacheapp.py: Mod_python 3 has done away with the
	"server" member of the "connection" object - use request.hostname
	member instead (Paul Hart).  

2003-06-15 21:04  djc

	* doc/: albatross.tex, tags.tex, doctest/tags-for4,
	doctest/tags-for5, doctest/tags-for6: Restructured the <al-for>
	documentation.  

2003-06-13 14:29  andrewm

	* albatross/tags.py: Unknown <al-input type="..."> was causing an
	exception in the exception handler - wrong variable used in diag
	string.  

2003-06-12 13:04  andrewm

	* albatross/tags.py: Don't record inputs that are "disabled".  

2003-06-09 20:00  andrewm

	* albatross/: apacheapp.py, app.py, context.py, randompage.py,
	session.py, simpleserver.py, tags.py, template.py: Replace
	apply(fn, args) with fn(*args) (apply is 300 times slower due to 
	Deprecation warning). Use string methods rather than string module.  

2003-06-09 16:18  djc

	* doc/: tags.tex, doctest/tags-exec, doctest/tags-exec1,
	doctest/tags-exec2: Expanded and segmented the <al-exec>
	documentation.  

2003-06-09 16:06  djc

	* doc/: tags.tex, doctest/tags-value3: Split <al-value>
	documentation into attribute subsubsections.  

2003-06-09 15:56  djc

	* doc/: tags.tex, doctest/tags-if, doctest/tags-if1,
	doctest/tags-if2, doctest/tags-if3: Expanded the documentation of
	the <al-if> tag.  

2003-06-09 15:29  djc

	* doc/: tags.tex, doctest/tags-include, doctest/tags-include1,
	doctest/tags-include2: Updated documentation for <al-img> and
	<al-include>.  

2003-06-09 14:49  djc

	* doc/: albatross.tex, tags.tex: Updated <al-a> documentation.  

2003-06-09 11:12  djc

	* doc/thanks.tex: Add some more thanks.  

2003-06-08 16:29  djc

	* LICENCE: Not sure we need to update the year in the copyright. 
	Did it anyway as per Matt Goodalls suggestion.  

2003-06-08 16:24  djc

	* albatross/fcgiapp.py: Changes from Matt Goodall.  

2003-06-08 00:35  djc

	* setup.py: Forgot the version in the setup.py - D'oh.  Time to
	update wiki page.  

2003-06-08 00:33  djc

	* dist/dist-albatross.sh: Attempting to version the HTML
	documentation tar file.  

2003-06-08 00:29  djc

	* ChangeLog, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Final changes for 1.10pre1 release - just
	following wiki instructions.  

2003-06-07 18:54  djc

	* samples/sybase/traceback.html: More meaningful title in exception
	template.  

2003-06-07 18:53  djc

	* albatross/fcgiapp.py: Fixed module so that it actually works.  

2003-06-07 18:53  djc

	* albatross/context.py: Oops - default_session_var() was obviously
	never tested.  

2003-06-07 15:22  djc

	* doc/appuser.tex: Fixed documentation for installing mod_python
	applications.  

2003-06-07 15:17  djc

	* samples/sybase/: sybase.py, table-view.html, traceback.html: 
	Fixes for latest Albatross.  

2003-06-07 15:16  djc

	* albatross/app.py: Handle exception during execution context
	constructor.  

2003-06-07 00:21  andrewm

	* albatross/fcgiapp.py: Added Matt Goodall's FastCGI application
	deployment support module.  

2003-06-07 00:13  andrewm

	* albatross/: apacheapp.py, cgiapp.py: Added support for file
	uploads to mod_apache deployed applications.  Restructured cgiapp
	and apacheapp to use a common RequestFields class. Upated cgiapp to
	Python2 constructs (list comprehensions, string methods).  

2003-06-06 23:00  andrewm

	* albatross/app.py: Fix bug in <input type="file"> when used with
	SimpleAppContext (need_enc_type flag was not being returned by
	form_close method.  

2003-06-05 21:49  djc

	* doc/tags.tex: Finished <al-textarea> documentation.  

2003-06-05 21:32  djc

	* doc/: tags.tex, doctest/tags-input-select5: Added another
	<al-select> example.  

2003-06-05 21:21  djc

	* TODO: Added two tasks for 1.10pre1 release.  

2003-06-05 21:15  djc

	* doc/: albatross.tex, tags.tex: Removed the <al-form> subsection
	on Mixin functions used.  Reworked the <al-select> and <al-option>
	docuementation.  

2003-06-05 21:04  djc

	* doc/changes.tex: List each change item as a subsubsection rather
	than a description item.  

2003-06-05 15:33  andrewm

	* setup.py, albatross/tags.py, doc/tags.tex,
	doc/doctest/tags-input-select1, doc/doctest/tags-input-select2,
	doc/doctest/tags-input-select3, doc/doctest/tags-input-select4,
	doc/doctest/templ-white2, doc/doctest/templ-white3,
	doc/doctest/templ-white4, doc/doctest/templ-white5,
	test/templates/form.py: Minor bugfix, doctest and unittest fixes,
	change package name to albatross_utf8.  

2003-05-29 15:15  andrewm

	* albatross/context.py: Use cPickle.dumps(..., -1), which selects
	the highest pickling protocol in all versions of python (in
	particular, in 2.3, this allows us to pickle slotted objects).  

2003-05-23 00:14  djc

	* doc/: albatross.tex, tags.tex: Whew!  Almost finished the
	<al-input> tag reference.  

2003-05-23 00:13  djc

	* doc/packaged.tex: Caption fixup from Sheila King.  

2003-05-21 21:22  djc

	* doc/tags.tex: Small fix before I call it a night.  

2003-05-21 21:09  djc

	* doc/: albatross.tex, fakeapp.py, tags.tex, test_examples.py,
	doctest/tags-form-action, doctest/tags-form-file,
	doctest/tags-input-generic, doctest/tags-input-hidden,
	doctest/tags-input-nextpage, doctest/tags-input-password,
	doctest/tags-input-submit, doctest/tags-input-text,
	doctest/tags-input-treeselect, doctest/tags-input-treeselect-node: 
	Made significant progress on improving the <al-input> tag
	documentation.  Still needs more work though.  

2003-05-21 14:13  djc

	* albatross/tags.py: Ooops - was ignoring node attribute on
	treeselect,... input tags.  

2003-05-20 22:34  djc

	* albatross/tags.py: Ooops - forgot to pass ctx to
	Lookup._build_item_dict().  

2003-05-18 19:04  djc

	* doc/appuser.tex: Fixed up for all latest changes.  One day Ben
	will fix the sample popview application.  

2003-05-18 19:03  djc

	* doc/albatross.tex: Changes are now an appendix.  

2003-05-14 22:41  djc

	* doc/: albmvc.dia, appcontext.dia, application.dia, dataflow.dia,
	modularapp.dia, modularsessapp.dia, modularsessfileapp.dia,
	mvc.dia, pagemap.dia, randmodapp.dia, randmodsessapp.dia,
	randmodsessfileapp.dia, sessionappcontext.dia,
	sessionfileappcontext.dia, simpleapp.dia, simpleappcontext.dia,
	simplecontext.dia, simplesessapp.dia, simplesessfileapp.dia,
	twolayer.dia, twolayerctx.dia: Update diagrams to match current
	code.  Funny dia crap still in files due to downgrade to 0.88 to get
	back to useable result.  

2003-05-14 16:32  andrewm

	* TODO: Added samples/popview1 todo points raised by Sheila King.  

2003-05-10 23:42  djc

	* doc/tempuser.tex: Checked for correctness with new changes. 
	Small wording improvements.  

2003-05-10 23:03  djc

	* albatross/tags.py: Item dictionary *must* be created when lookup
	is executed (if not already created by early lookup).  

2003-05-10 22:41  djc

	* doc/mixins.tex, doc/tempuser.tex,
	samples/templates/content1/content.py,
	samples/templates/content2/content.py: TemplateLoadError is now
	ApplicationError.  

2003-05-10 22:15  djc

	* doc/introduction.tex: Remove fixed number of Application classes
	- just say "many".  

2003-05-10 22:14  djc

	* doc/installation.tex: If we depend on at least Python 2.1 we do
	not need distutils.  

2003-05-10 22:13  djc

	* doc/: albatross.tex, changes.tex: Included a chapter on changes
	between releases.  Should probably be an appendix.  

2003-05-02 14:12  andrewm

	* albatross/app.py, albatross/context.py, doc/appcontext.dia,
	doc/packaged.tex, test/namespace/recorder.py: Implemented a stack
	for application pages (push_page, pop_page).  

2003-05-02 14:10  andrewm

	* albatross/simpleserver.py: Add crude counting of memory usage to
	the session server.  

2003-05-01 16:40  andrewm

	* albatross/tags.py: Fix bug in checkbox "checked" logic.  

2003-04-28 12:43  djc

	* TODO: Macro argument evaluation now happens when <al-usearg>
	evaluated.  

2003-04-28 12:42  djc

	* albatross/context.py, albatross/tags.py, doc/albatross.tex,
	doc/doctest/tags-macro6: Delay evaluation of macro arguments until
	they are referenced by an <al-usearg> tags.  <al-usearg> now
	temporarily pops argument stack before evaluating argument content
	to avoid infinite recursion.  

2003-03-24 17:10  djc

	* TODO: Added task to reorder macro argument evaluation.  

2003-03-21 16:43  djc

	* albatross/context.py: Force unicode strings to utf-8.  

2003-03-21 16:33  djc

	* albatross/context.py: Clear all parts of the ExecuteMixin when
	reset_content() is called.  

2003-03-21 15:50  djc

	* albatross/context.py: Undo unicode handling.  

2003-03-21 15:20  djc

	* albatross/context.py: Change ExecuteMixin.reset_content() so it
	resets trap_stack and macro_stack as well as content_parts.  This
	lets exception handling code get the execution context back to a
	known state.  Any content traps on the stack will prevent
	flush_content() from producing output.  

2003-02-14 16:35  andrewm

	* albatross/: app.py, context.py, tags.py, template.py: Unicode
	output largely works now - the context gains a new method, 
	set_content_charset, which is the character set used to encode the
	content - this probably should be on the request object. The
	TemplateLoader mixins gained a set_template_encoding method
	(defaults to utf-8). Calls to str() in template.py have been
	replaced with calls to unicode() - however this isn't a drop in
	replacement - it tries to decode strings using the "ascii" codec,
	which will throw an exception if it's input isn't 7-bit clean - the
	user now has to be careful to pass a unicode string or a 7 bit clean
	string.  

2003-02-14 15:08  andrewm

	* albatross/tags.py, doc/doctest/tags-input-select1,
	doc/doctest/tags-input-select2, test/templates/form.py: Missed
	another instance of this bug: The option tag was never being closed
	- remarkably the tests were also expecting this erroneous result.  

2003-02-14 14:54  andrewm

	* doc/tags.tex: Added note to <al-comment> tag about enclosed
	content needing to be syntactically correct.  

2003-02-14 14:43  andrewm

	* albatross/tags.py, doc/doctest/tags-input-select3,
	doc/doctest/tags-input-select4, test/templates/form.py: Bugfix -
	The option tag was never being closed - remarkably the tests were 
	also expecting this erroneous result.  

2003-01-28 16:17  andrewm

	* albatross/cgiapp.py: Use the dict get method to fetch REQUEST_URI
	and SERVER_NAME, which allows scripts to be run from the command
	line - suggested by Greg Bond.  

2003-01-27 21:23  djc

	* albatross/apacheapp.py, albatross/app.py, albatross/cgiapp.py,
	albatross/randompage.py, doc/albatross.tex,
	test/sessions/request.py, test/sessions/ses_file.py,
	test/sessions/ses_server.py: Moved all header management into
	HeadersMixin which was renamed as ResponseMixin.   Application
	send_content() method moved into ResponseMixin so end of headers can
	be detected automatically.  Now raises exception if application
	attempts to set headers after they have been sent.  Headers
	automatically sent when the application sends content.  
	__sent_headers removed from cgiapp and apacheapp.  

2003-01-24 23:45  andrewm

	* albatross/context.py: When encoding session, don't silently
	discard unpickleable elements (raise ApplicationError instead,
	including the name of the offending element). cPickle will raise all
	sorts of garbage exceptions - make sure we catch the common ones.  

2003-01-24 23:35  andrewm

	* albatross/common.py: Forgot the most important bit - the
	exception definitions! 

2003-01-24 22:34  andrewm

	* TODO, albatross/__init__.py, albatross/app.py,
	albatross/context.py, albatross/randompage.py,
	albatross/session.py, albatross/sessionfile.py,
	albatross/simpleserver.py, albatross/tags.py,
	albatross/template.py, test/namespace/request.py,
	test/templates/basic.py, test/templates/control_flow.py,
	test/templates/form.py, test/templates/include.py,
	test/templates/iterator.py, test/templates/lookup.py,
	test/templates/macro.py, test/templates/whitespace.py: Rationalised
	Albatross's use of exceptions, all exceptions are now subclasses of
	AlbatrossError, moved all exceptions to a "common" module. Also
	fixed a minor glitch in the tests where template execution output
	needed to be suppressed.  

2003-01-24 22:24  andrewm

	* albatross/tags.py: Make single_select on the LazyTreeIterator an
	optional argument (defaults to "no").  

2003-01-24 14:48  andrewm

	* doc/appuser.tex: Added a little more information about setting up
	mod_python.  

2002-12-28 16:47  djc

	* albatross/: app.py, randompage.py: Move call to
	ctx.flush_content() into Application.run() to allow session to be
	saved back at server before the HTML is sent to the browser.  This 
	allows applications to embed image tags for dynamically generated
	images.  

2002-12-27 16:40  djc

	* albatross/tags.py: Added load_children() method to
	LazyTreeIterator so applications can stop abusing the node_is_open()
	method.  

2002-12-27 12:34  djc

	* albatross/app.py: Create exception formatting context using
	different name so the we remove the original session when we call
	ctx.remove_session.  Derrr.  

2002-12-24 21:02  djc

	* albatross/app.py: Move escaping into formatted exception user.  

2002-12-24 20:53  djc

	* albatross/app.py: Move exception formatting into separate method
	to allow subclasses to make use of formatting without needing to
	roll it themselves.  

2002-12-23 16:48  djc

	* albatross/: app.py, context.py, randompage.py: Patches for
	problems reported by Greg Bond.  Changed the way that
	_caller_globals() locates the desired stack frame it now searches by
	function name.  run_template_once() now generates the same exception
	message as run_template().  

2002-12-23 12:07  djc

	* albatross/tags.py: Added NODE attribute to <al-input> and <al-a>
	tags which perform tree navigation.  This allows tree navigation
	requests to be generated outside of the <al-tree> tag.  Something
	like this: <al-for iter="j" expr="node.children"> <tr><td><al-a
	treeselect="hn" node="j.value()"> 

2002-12-23 12:04  djc

	* albatross/context.py: Place the execution context into the
	execution context for the duration of expression evaluation under
	the name __ctx__.  This allows you to do things like: <al-exec
	expr="hn.node_is_open(__ctx__, node)"> 

2002-12-18 17:06  andrewm

	* albatross/tags.py: 
	* Added select_alias and open_alias to TreeIterators.  
	* Move Lookup registration into object initialisation, lazy
	  evaluation of item_dict (defered until first lookup_html) -
	  to_html() method of Lookup becomes a NOOP.  

2002-12-17 12:21  gregh

	* albatross/app.py: handle_exception now gets 'ctx' aswell as 'req' 

2002-12-17 11:28  andrewm

	* albatross/context.py: Bugfix - If a user's session expires at the
	server side but not at the client, method="get" is being used, and
	the form contains a iterator, a traceback would result (attempt to
	call set_backdoor() on None).  

2002-12-15 19:32  djc

	* albatross/tags.py: Implemented a single select option on
	LazyTreeIterator which is activated via the SINGLE attribute on the
	<al-tree> tag.  

2002-12-11 19:36  andrewm

	* test/namespace/request.py: Added tests for file input handling
	(single field single file, multiple field, single field multiple
	file, __albform__, etc).  

2002-12-11 16:08  andrewm

	* albatross/cgiapp.py, test/Makefile, test/namespace/__init__.py,
	test/namespace/request.py: Added first cut at request merging tests
	(tests for GET and POST exist cgi methods exist, although
	__albform__ functionality isn't being exercised yet).  

2002-12-11 15:10  andrewm

	* albatross/: cgiapp.py, context.py, tags.py: Added support for
	<input type="file">. For inputs of this sort, the local context now
	gets a list of FileField instances. The FileField class contains 
	attributes for filename (filename), open file object (file), and
	mime type 
	(type).  
	
	The NameRecorder Mixin tracks whether a type="file" input has been
	seen, and the to_html method of the Form class generates the
	appropriate enctype attribute if seen (otherwise file inputs simply
	pass back the filename).  
	
	On type="file" inputs, "value" attributes are now ignored.  
	
	Currently this is only supported on the cgiapp request class, and no 
	documentation or tests have been written.  

2002-12-11 12:23  djc

	* albatross/tags.py: Included explanation of why the content trap
	is needed for the <al-option> tag.  

2002-12-06 18:06  andrewm

	* albatross/context.py, doc/mixins.tex: 
	- Raise an exception (SessionError) if add_session_vars is called
	  when the named variable isn't in the local namespace (minor
	compatibility breakage).  
	- New method on SessionBase, default_session_var, which adds a
	  variable to the local namespace if it isn't already defined, and
	  registers the variable in the session dictionary.  
	- Update doco for the above changes.  

2002-12-06 18:01  andrewm

	* doc/doctest/tags-input-text: Doco example fix for this bugfix: 
	- <al-value> was not generating a value attribute when the value
	  evaluated to 0 
	(zero) - fixed and added test. Bug discovered by Michael Neel
	(thanks).  

2002-12-05 15:11  andrewm

	* albatross/app.py: New improved version of req_equals (one less
	hash lookup!) 

2002-12-05 14:45  andrewm

	* albatross/app.py: Make req_equals return true if the request
	evaluates true, rather than "not None" - this allows null strings to
	return false (found by Michael C. Neel).  

2002-12-05 11:26  djc

	* albatross/randompage.py, test/templates/basic.py,
	test/templates/include.py: Ran tabnanny and noticed some problems.  

2002-12-05 11:17  djc

	* TODO: Added some suggestions from Michael C. Neel.  

2002-11-29 21:12  djc

	* albatross/: apacheapp.py, app.py, cgiapp.py: Apply proposed
	changes for altering the status returned to the browser.  

2002-11-29 14:58  andrewm

	* TODO: Added a couple of items from the albatross-users list to
	the TODO list.  

2002-11-28 16:35  andrewm

	* albatross/context.py: NamespaceMixin.set_value() now has a funky
	exception handler. This method is responsible for parsing form
	elements (a somewhat critical task) and it was possible to cause it
	to throw an exception that was completely lacking in any useful
	information. The exception handler now identifies the field by name,
	attempts to identify where in the field name the exception occured,
	and includes the current "index" where an IndexError is raised, and
	re-raises the original exception (in case it really is a bug in
	set_value()).  

2002-11-28 15:40  djc

	* albatross/app.py, albatross/session.py, albatross/sessionfile.py,
	doc/albatross.tex, test/sessions/ses_file.py,
	test/sessions/ses_server.py: Change the way that response headers
	are managed to allow applications to do things like: 
	    ctx.set_header('Content-Type', 'image/gif') 
	    if ctx.get_header('Pragma') == 'no-cache': 
	        ctx.del_header('Pragma') The defaults are established in
	HeadersMixin.__init__() so the application is free to alter them at
	any point during processing.  

2002-11-21 13:49  andrewm

	* albatross/sessionfile.py: 
	- SessionFileContextMixin._get_sesid_from_cookie was not coping with
	  cookies other than the one we wanted being in the Cookie header sent
	  by the browser (it was catching the wrong exception). Found by Greg
	Bond.  

2002-11-19 10:18  andrewm

	* albatross/tags.py, test/templates/form.py: 
	- <al-value> was not generating a value attribute when the value
	  evaluated to 0 
	(zero) - fixed and added test. Bug discovered by Michael Neel
	(thanks).  

2002-11-10 12:24  djc

	* albatross/randompage.py: Fixed import error problem reported by
	Brian Brown.  

2002-10-28 22:51  djc

	* dist/release-checklist: Documented in the OcWiki.  

2002-10-28 12:41  djc

	* dist/dist-albatross.sh: Fix up script which moves files to web
	server.  

2002-10-28 12:16  djc

	* albatross/__init__.py: Fixed up release numbers.  

2002-10-28 12:15  djc

	* setup.py, dist/dist-albatross.sh: Fix release numbers.  

2002-10-28 11:55  djc

	* ChangeLog, dist/release-1.01, doc/albatross.tex,
	doc/installation.tex, doc/mixins.tex, doc/tags.tex: Release 1.01.  

2002-10-28 10:43  djc

	* dist/: dist-albatross.sh, index.ahtml, make_webpage.py: Release
	process does not alter web page any more.  

2002-10-28 10:40  djc

	* dist/release-1.01: All changes for 1.0.1 

2002-10-26 12:36  djc

	* albatross/app.py: Work around problem where reloading a module
	causes the pickler to refuse to dump existing instances from that
	module.  

2002-10-24 16:52  djc

	* albatross/context.py: Be a bit more careful with the pickle
	exceptions and log them when they occur.  

2002-10-04 16:34  andrewm

	* test/templates/: basic.py, basic/null-attr.html: 
	- Added test for the bug Detlef Lannert picked up in null attribute
	handling.  

2002-09-25 15:18  andrewm

	* albatross/template.py: 
	- Applied bugfix from Detlef Lannert - null attributes would raise a
	  TypeError (for example: <al-img expr="..." alt="">). Once fixed,
	  this exposed another bug where an attribute with a null value would
	  lose it's value altogether (XHTML requires attributes to have a
	value, null or otherwise).  

2002-09-10 20:17  andrewm

	* albatross/context.py, test/namespace/recorder.py: 
	- Prevent variables starting with an underscore from being merged
	  into the context local namespace from request objects. This prevents
	  attackers spoofing variables such as __page__, and any user
	  variables such as authentication data.  

2002-09-05 00:07  andrewm

	* albatross/tags.py: 
	- bugfix - TextArea wasn't accepting "nameexpr".  

2002-09-04 15:04  andrewm

	* albatross/tags.py: Radio input was converting "value_attr" to
	str(), but not "value", which was causing the "checked" test to fail
	if value was anything but a string.  Also changed checkbox input to
	convert both to strings before doing the comparison.  

2002-09-04 13:33  andrewm

	* albatross/app.py: Exception text wasn't being escaped.  

2002-08-30 00:46  djc

	* setup.py, doc/albatross.tex, doc/installation.tex: Fixed some
	version numbers and improved checking in setup.py sdist.  

2002-08-23 23:17  andrewm

	* albatross/tags.py: 
	- bugfix - <al-option> mandatory attribute test didn't include
	nameexpr.  

2002-08-23 12:38  andrewm

	* TODO: Added "build debian package".  

2002-08-21 14:16  andrewm

	* dist/release-checklist: 
	- first pass at a release checklist.  

2002-08-20 22:54  djc

	* dist/release-1.0: Speeling error.  

2002-08-20 22:37  djc

	* dist/release-1.0: Get recipient list correct.  

2002-08-20 22:30  djc

	* dist/release-1.0: Added information about mailing list.  

2002-08-20 22:28  andrewm

	* dist/release-1.0: Slight formatting change for release notice.  

2002-08-20 22:21  djc

	* dist/release-1.0: Initial release notice.  

2002-08-20 21:40  djc

	* dist/dist-albatross.sh: Gets files to staging location in
	/var/www/projects/albatross/.new 

2002-08-20 20:51  djc

	* dist/dist-albatross.sh: First attempt at new distribution
	process.  

2002-08-17 23:49  djc

	* doc/appuser.tex, samples/form4/form.html, samples/form4/form.py,
	samples/form4/install.py: Added new version of the form sample in
	the application guide.  

2002-08-17 21:45  djc

	* doc/: Makefile, packaged.tex, randmodsessfileapp.dia: Added
	documentation for RandomModularSessionFileApp.  Fixed documentation
	for create_context() for all *SessionFileApp classes, returns
	SessionFileAppContext not SessionAppContext.  

2002-08-17 21:23  djc

	* doc/: albatross.tex, mixins.tex, sessionappcontext.dia,
	sessionfileappcontext.dia, simpleappcontext.dia, simplecontext.dia,
	tags.tex: Removed get_field_names() from all RecorderMixin classes.  
	Added merge_request() to all RecorderMixin classes.  Documented
	usage of list attribute in <al-input> tags and NamespaceMixin.  

2002-08-17 21:21  djc

	* albatross/tags.py: Added 'list' to write_attribs_except() in
	<al-textarea>.  

2002-08-16 10:48  andrewm

	* dist/release-1.0: Changed "MULTIPLE" to "LIST" and reformat
	several paragraphs to be less than 75 characters (to allow e-mail
	reply quoting).  

2002-08-13 12:30  andrewm

	* ChangeLog, setup.py, albatross/tags.py,
	doc/doctest/tags-input-checkbox, doc/doctest/tags-input-file,
	doc/doctest/tags-input-password, doc/doctest/tags-input-radio1,
	doc/doctest/tags-input-radio2, test/templates/form.py: Extensive
	work on the <input> tag class to make it's behaviour more consistent
	- a common generic_to_html() method is shared by most input types,
	and "value=" is now honoured for these types (all except checkbox, 
	radio and image). These changes altered the order in which
	attributes appear in the generated html, necessitating minor
	alterations to the tests.  

2002-08-12 16:43  andrewm

	* albatross/tags.py: 
	* Silently enable "list" mode when a <select> tag has a "multiple"
	attribute.  

2002-08-12 16:27  andrewm

	* albatross/tags.py, doc/doctest/tags-input-image,
	doc/doctest/tags-input-submit: 
	- oops - messed up when converting keyword arguments to positional
	arguments.  

2002-08-12 16:05  andrewm

	* albatross/context.py, albatross/tags.py, doc/Makefile,
	doc/doctest/tags-input-checkbox, doc/doctest/tags-input-file,
	doc/doctest/tags-input-hidden, doc/doctest/tags-input-image,
	doc/doctest/tags-input-password, doc/doctest/tags-input-radio1,
	doc/doctest/tags-input-radio2, doc/doctest/tags-input-radio3,
	doc/doctest/tags-input-submit, doc/doctest/tags-input-text,
	test/namespace/recorder/recorder.html,
	test/templates/form/defined-multiple.html,
	test/templates/form/defined-single.html,
	test/templates/form/illegal-multiple.html,
	test/templates/form/input-checkbox.html: 
	* Changed "multiple" input attribute to "list" to avoid overloading
	  additional meaning on the HTML multiple attribute.  
	* Removed implicit_multiple argument to input_add() method - now
	  hard-coded within input_add based in the input type.  
	* Updated tests to match above changes.  

2002-08-08 19:53  andrewm

	* albatross/sessionfile.py: 
	* Fixed usage of OSError (was os.OSError, which doesn't exist).  
	* Added prepackaged RandomModularSessionFileApp app class.  

2002-08-01 19:48  djc

	* TODO: Added tasks to fix distribution script.  

2002-08-01 19:48  djc

	* dist/release-1.0: Minor change - include () on method names.  

2002-08-01 17:01  andrewm

	* setup.py: Include pre-release checks in the sdist command (checks
	version numbers in key files).  

2002-08-01 14:18  andrewm

	* setup.py: 
	* Don't include entire licence text in lincece attribute - it's
	  intended to be a one line summary.  

2002-07-31 12:22  andrewm

	* MANIFEST.in: Added MANIFEST.in file - this allows us to use the
	standard "setup.py sdist" mechanism to produce the
	albatross-n.nn.tar.gz file.  

2002-07-30 17:33  andrewm

	* LICENCE, setup.py, albatross/__init__.py, albatross/apacheapp.py,
	albatross/app.py, albatross/cgiapp.py, albatross/context.py,
	albatross/pidfile.py, albatross/randompage.py,
	albatross/session.py, albatross/sessionfile.py,
	albatross/simpleserver.py, albatross/tags.py,
	albatross/template.py, doc/albatross.tex, doc/appuser.tex,
	doc/copyright.tex, doc/customtags.tex, doc/installation.tex,
	doc/introduction.tex, doc/mixins.tex, doc/packaged.tex,
	doc/tags.tex, doc/tempuser.tex, session-server/al-session-daemon,
	test/all.py, test/namespace/__init__.py,
	test/namespace/recorder.py, test/sessions/__init__.py,
	test/sessions/basic.py, test/sessions/concurrent.py,
	test/sessions/request.py, test/sessions/ses_file.py,
	test/sessions/ses_hiddenfield.py, test/sessions/ses_server.py,
	test/templates/__init__.py, test/templates/albatross_test.py,
	test/templates/all.py, test/templates/basic.py,
	test/templates/control_flow.py, test/templates/env.py,
	test/templates/form.py, test/templates/include.py,
	test/templates/iterator.py, test/templates/lookup.py,
	test/templates/macro.py, test/templates/tree.py,
	test/templates/whitespace.py: Moved licence out of every file and
	into LICENCE file in top level directory.  LICENCE is now a verbatim
	BSD-style licence. Note - there is still a copy of the licence in
	doc/copyright.tex.  

2002-07-29 17:27  andrewm

	* doc/: installation.tex, test_examples.py: 
	* Bump version number to 1.00 in installation doco 
	* Make test_examples skip files with leading dot.  

2002-07-29 17:24  andrewm

	* doc/doctest/: tags-for2, tags-input-checkbox, tags-input-file,
	tags-input-hidden, tags-input-image, tags-input-password,
	tags-input-radio1, tags-input-radio2, tags-input-radio3,
	tags-input-submit, tags-input-text: Updated examples to work with
	current albatross ("multiple" attribute changes, and python 2.2
	breaking dir()).  

2002-07-29 17:13  andrewm

	* setup.py, albatross/__init__.py, doc/albatross.tex: Bump version
	number to 1.0, change contact e-mail to albatross@OC 

2002-07-29 17:11  andrewm

	* dist/release-1.0: Misc updates to release notice.  

2002-07-29 17:08  andrewm

	* albatross/tags.py: Explicitly specify keyword args for input_add.  

2002-07-29 16:55  andrewm

	* albatross/context.py: Use binary mode on cPickle.dumps() - it's
	*much* faster, and who can read the "text" mode anyway? 

2002-07-29 16:45  andrewm

	* test/: sessions/request.py, templates/basic.py,
	templates/control_flow.py, templates/env.py, templates/form.py,
	templates/include.py, templates/iterator.py, templates/lookup.py,
	templates/macro.py, templates/tree.py, templates/whitespace.py: 
	Deleted a bunch of orphaned whitespace (indents with no code).  

2002-07-29 16:40  andrewm

	* albatross/: app.py, pidfile.py, session.py, tags.py, template.py: 
	Deleted a bunch of orphaned whitespace (indents with no code).  

2002-07-28 20:01  djc

	* dist/release-1.0: More stuff found.  

2002-07-28 19:36  djc

	* dist/release-1.0: More stuff worked out.  

2002-07-28 17:27  djc

	* dist/release-1.0: Start accumulating 1.0 release notice.  

2002-07-28 16:33  djc

	* albatross/: __init__.py, app.py, context.py, randompage.py,
	session.py, sessionfile.py, tags.py, template.py: Replaced all
	relative imports with absolute imports.  

2002-07-26 14:41  andrewm

	* ChangeLog: Updated ChangeLog 

2002-07-10 14:14  andrewm

	* albatross/context.py, albatross/tags.py, albatross/template.py,
	doc/customtags.tex: 
	* Register macros at load time, rather than execution (to_html) -
	  this allows forward references, and other tricks. This change
	  required passing the ctx through to all Tag constructors (and
	  updating the doco for custom tags), and thus introduces an API
	change.  
	* Include filename in template load errors - when templates are
	  loaded by any means other than <al-include>, the filename was often
	  not in the traceback.  

2002-07-02 16:30  andrewm

	* albatross/context.py: "multiple" attribute addition broke "GET"
	  form submission method - fixed.  

2002-06-12 14:30  andrewm

	* session-server/rc.d-script: 
	* Bugfix - mkdir didn't check for directory existance.  

2002-06-12 11:04  andrewm

	* albatross/sessionfile.py: 
	* additional checks on SessionFile session id.  

2002-06-07 17:39  andrewm

	* samples/: install.py, images/.cvsignore, images/close.png,
	images/ellipsis.png, images/install.py, images/open.png,
	tree2/tree.html, tree3/tree.html: Copy images needed for tree
	samples.  

2002-06-07 16:00  andrewm

	* doc/tags.tex, samples/tree3/install.py, samples/tree3/tree.html,
	samples/tree3/tree.py: Added sample code for the ellipsis mode on
	the tree tag.  

2002-06-07 15:33  andrewm

	* doc/tags.tex: 
	* Doco for LazyTreeIterator and EllipsisTreeIterator, as well as the 
	  treeellipsis attribute for input tags.  

2002-06-07 12:46  andrewm

	* doc/: appuser.tex, tags.tex: 
	* Added footnote to mod_python section giving URL for mod_python
	  site.  
	* Added doco for get_open_aliases and set_open_aliases of
	  LazyTreeIterator.  

2002-06-06 16:35  andrewm

	* TODO: Removed TODO item from Neil Beattie regarding problems with
	  SessionFile under Windows.  

2002-06-06 15:58  andrewm

	* albatross/sessionfile.py: Added import of "struct" for platforms
	  without /dev/urandom.  

2002-06-06 15:57  andrewm

	* albatross/__init__.py: Renamed the "random" module to
	  "randompage" to avoid collision with standard module random.  

2002-06-06 15:18  andrewm

	* test/namespace/recorder.py: 
	* Added test for form submission request merging (more NameRecorder
	  testing).  

2002-06-06 11:09  andrewm

	* test/: all.py, namespace/.cvsignore, sessions/__init__.py,
	sessions/basic.py, sessions/concurrent.py, sessions/request.py,
	sessions/ses_file.py, sessions/ses_hiddenfield.py,
	sessions/ses_server.py, templates/__init__.py,
	templates/albatross_test.py, templates/all.py, templates/basic.py,
	templates/control_flow.py, templates/env.py, templates/form.py,
	templates/include.py, templates/iterator.py, templates/lookup.py,
	templates/macro.py, templates/tree.py, templates/whitespace.py: 
	Added a bunch of Copyright messages.  

2002-06-05 20:52  andrewm

	* test/: all.py, namespace/__init__.py, namespace/recorder.py,
	namespace/recorder/recorder.html, sessions/ses_hiddenfield.py: 
	* First pass at writing some tests for the name-space functions 
	  (only NameRecorderMixin is done).  

2002-06-05 16:13  andrewm

	* albatross/tags.py, test/templates/form.py,
	test/templates/form/illegal-multiple.html: 
	* pass "multiple" flag to input_add even when the input is
	  implicit_multi - allow input_add to raise an exception.  
	* added test case for illegal multiple flags (those on
	  implicit_multi inputs).  

2002-06-05 15:58  andrewm

	* test/all.py, test/templates/form.py,
	test/templates/form/defined-single.html,
	test/templates/form/input-radio-expr.html,
	test/templates/form/input-radio.html,
	test/templates/form/missing-multiple.html, albatross/app.py,
	albatross/context.py, albatross/tags.py: 
	* Moved Point class into context to keep it near NamespaceMixin 
	* Fixed NameRecorder validation - was a little too simplistic before
	  (some tags can appear multiple times, but only return single values
	  - inputs of this type are now flagged, and input_add's validation
	  behaviour modified appropriately.  
	* Disallow "multiple" on inputs that are defined as appearing
	  multiple times but returning a single value.  
	* Added missing "check_missing_multiple" test.  
	* Removed "multiple" flag from radio input tests.  

2002-06-04 14:44  andrewm

	* albatross/tags.py: 
	* Bugfix - select tag was striping "multiple" attribute from emitted
	html.  

2002-06-03 17:09  andrewm

	* albatross/app.py: Added test to ensure a page module defines one
	of page_enter, page_leave, page_process or page_display. Raise
	PageModuleError if now.  

2002-06-03 15:28  andrewm

	* samples/: .cvsignore, extension/.cvsignore, mpperf/.cvsignore,
	paginate/.cvsignore, popview1/.cvsignore, popview2/.cvsignore,
	popview3/.cvsignore, popview4/.cvsignore, popview5/.cvsignore,
	random/.cvsignore, sybase/.cvsignore,
	templates/content1/.cvsignore, templates/content2/.cvsignore,
	templates/form1/.cvsignore, templates/form2/.cvsignore,
	templates/form3/.cvsignore, templates/simple1/.cvsignore,
	templates/simple2/.cvsignore, templates/simple3/.cvsignore,
	templates/simple4/.cvsignore, templates/simple5/.cvsignore,
	templates/stream/.cvsignore, templates/tree/.cvsignore,
	tree1/.cvsignore, tree2/.cvsignore: Added a bunch of .cvsignore
	files (what a pain).  

2002-05-31 00:44  djc

	* albatross/app.py, albatross/context.py, albatross/tags.py,
	doc/albatross.tex, test/templates/albatross_test.py,
	test/templates/form.py, test/templates/tree.py,
	test/templates/form/defined-multiple.html,
	test/templates/form/defined-single.html,
	test/templates/form/input-checkbox.html,
	test/templates/form/input-radio-expr.html,
	test/templates/form/input-radio.html,
	test/templates/tree/tree-input.html: When you use FormRecorderMixin
	you must now specify MULTIPLE attribute on <AL-INPUT> and
	<AL-TEXTAREA> tags if more than one field in a form has the same
	name.  This also causes the request merging to always place those
	input values into a list in the local namespace regardless of how
	many values were sent by the browser.  

2002-05-11 21:10  djc

	* samples/mpperf/: htaccess, install.py, main.html, main.py,
	mpperf.py: Simple program to demonstrate minimum latency of simple
	mod_python deployed program.  

2002-04-24 23:12  andrewm

	* albatross/tags.py: 
	* Add "valueexpr" attribute to <al-input type="submit"> - we need to
	  go through all the input tags and add this where it makes sense.  
	
	* Added "get_open_aliases" and "set_open_aliases" to the lazy tree 
	  iterator to allow applications to command nodes to open, and save
	  the open state.  

2002-04-16 13:48  andrewm

	* TODO, albatross/__init__.py, albatross/tags.py: Added "ellipsis"
	tree iterator that condenses shallower parts of the tree as the user
	browses deeper. Also split "lazy" functionality out of the base
	TreeIterator and made it a sub-class. A number of things remain to
	be done: 
	
	    - doco the changes to the TreeIterator 
	    - doco the ellipsis tree attribute 
	    - write tests for the ellipsis mode 
	    - consider how to arrange the sub-classes of the TreeIterator so
	      that lazy and ellipsis modes can be enabled seperately.  

2002-04-16 13:23  andrewm

	* albatross/sessionfile.py: Use "rb" and "wb" mode on open of
	session files for windows portability.  

2002-04-12 13:12  andrewm

	* test/sessions/ses_server.py: Removed unnecessary import of
	simpleserver.  

2002-04-05 17:13  andrewm

	* TODO: Added comments about ModularSessionFileApp problems under
	windows.  

2002-03-30 16:46  djc

	* samples/sybase/sybase.py: Reset row iterator when chaning tables.  

2002-03-27 16:36  andrewm

	* session-server/rc.d-script: Rudementary rc.d script for the
	session server.  

2002-03-27 15:56  andrewm

	* doc/appuser.tex, session-server/al-session-daemon: Fixed
	al-session-daemon usage message.  

2002-03-27 15:51  andrewm

	* setup.py, session-server/al-session-daemon, session-server/TODO: 
	Updated setup.py to install al-session-daemon into scripts
	directory. This required moving
	session-server/{simpleserver.py,pidfile.py} into albatross directory
	(although "from albatross import *" won't pick them up).  

2002-03-19 21:06  djc

	* doc/: albatross.tex, appuser.tex, tags.tex, thanks.tex: More doc
	fixes from Lewis Bergman - added him to the thanks section.  

2002-03-19 21:05  djc

	* dist/index.ahtml: Add reference to mailing list - copied from
	Andrew's web page.  

2002-03-15 22:42  andrewm

	* doc/: appuser.tex, mixins.tex, tags.tex, tempuser.tex: Undid the
	overzelous conversion of 'z' into 's' in instances of "-ise".  

2002-03-15 22:20  djc

	* dist/dist-albatross.sh: Fixed small program in distribution
	process.  

2002-03-15 21:45  djc

	* ChangeLog: This time for sure! 

2002-03-15 21:42  djc

	* doc/tempuser.tex: Added documentation fixes submitted by Lewis
	Bergman.  

2002-03-15 21:40  djc

	* albatross/sessionfile.py: Trap IOError as well as OSError when
	opening /dev/urandom.  

2002-03-15 17:14  andrewm

	* test/sessions/: ses_file.py, ses_hiddenfield.py, ses_server.py: 
	Dummy up module_path() method on the app's.  

2002-03-15 17:08  andrewm

	* albatross/: context.py, session.py, sessionfile.py: Removed a
	bunch of promiscuous "try: ... except:" clauses.  

2002-03-15 15:23  andrewm

	* doc/: albatross.tex, appuser.tex, mixins.tex, tags.tex,
	tempuser.tex: Spelling and typo fixes. Note: there were a bunch of
	z->s substitutions (such as authorisation vs authorization). I was a
	little wary of changing these last time, but this time I've checked
	each instance in the 1998 edition of the New Oxford Dictionary of
	English, and it has recommended the 'z' in each case.  

2002-03-15 15:03  andrewm

	* doc/appuser.tex: Added some basic comments on session server
	security.  

2002-03-15 14:49  andrewm

	* albatross/context.py, albatross/session.py,
	albatross/sessionfile.py, doc/mixins.tex: Make all Session classess
	(SessionServerAppMixin and SessionFileAppMixin) report a common
	SessionError. In fact, they raise SessionServerError and
	SessionFileError respectively, but both of these are subclasses of
	SessionError (which has been moved to Context, as it belongs with 
	SessionBase). Doco updated.  

2002-03-14 23:50  djc

	* doc/: albatross.tex, installation.tex, introduction.tex: Added
	small cheesy introduction.  

2002-03-14 22:15  djc

	* doc/appuser.tex: Added some documentation for the random sample
	application.  

2002-03-14 21:16  djc

	* doc/: albatross.tex, modularsessfileapp.dia,
	sessionfileappcontext.dia, simplesessfileapp.dia: Brought diagrams
	in sync with latest changes in mixin operations.  

2002-03-14 20:57  djc

	* doc/: albatross.tex, packaged.tex: Missing comma typo fixed.  

2002-03-12 17:28  andrewm

	* doc/appuser.tex: Initial attempt at unix session server daemon
	doco.  

2002-03-12 11:33  andrewm

	* doc/: Makefile, mixins.tex, modularsessfileapp.dia, packaged.tex,
	sessionfileappcontext.dia, simplesessfileapp.dia: Added doco for
	SessionFile related classes: SessionFileContextMixin, 
	SessionFileAppMixin, SessionFileAppContext, SimpleSessionFileApp,
	and ModularSessionFileApp. Mostly a cut-and-paste job from the
	SessionServer classes.  

2002-03-12 11:20  andrewm

	* albatross/sessionfile.py: save_session() should check
	should_save_session() - added.  

2002-03-11 22:57  djc

	* doc/sessionappcontext.dia: Made SimpleAppContext and
	SessionAppContext diagrams look the same.  

2002-03-11 22:39  djc

	* doc/mixins.tex: Forgot to document Request.status() and the
	changes to SessionBase add_session_var() and del_session_vars().  

2002-03-11 22:23  djc

	* doc/: tags.tex, doctest/tags-a3: Templates reference now up to
	date again.  

2002-03-11 22:00  djc

	* doc/: appcontext.dia, mixins.tex, packaged.tex, randmodapp.dia,
	sessionappcontext.dia, simpleapp.dia, simpleappcontext.dia,
	simplecontext.dia: Mixin and Prepackaged reference now in-sync with
	code again - whew! 

2002-03-11 21:57  djc

	* albatross/: apacheapp.py, cgiapp.py: Renamed location argument to
	redirect() to loc.  

2002-03-11 21:57  djc

	* albatross/: context.py, app.py: Moved req_equals() out of
	NamespaceMixin into AppContext where it belongs.  

2002-03-11 19:30  djc

	* albatross/app.py, albatross/random.py, doc/AlbatrossObjects.dia,
	doc/albatross.tex, doc/appcontext.dia, doc/application.dia,
	doc/modularapp.dia, doc/modularsessapp.dia, doc/packaged.tex,
	doc/randmodapp.dia, doc/randmodsessapp.dia,
	doc/sessionappcontext.dia, doc/simpleapp.dia,
	doc/simpleappcontext.dia, doc/simplecontext.dia,
	doc/simplesessapp.dia: Rearranged a few methods so that the
	documentation and the code matched.  Updated all prepackaged
	diagrams to match the current code - now all related daigrams
	actually look related.  

2002-03-11 11:39  andrewm

	* session-server/TODO: Added a few more session server TODO's.  

2002-03-11 10:54  andrewm

	* albatross/sessionfile.py: Move session dir creation to new
	session creation exception handler - this way the code only has an
	impact if needed. Also set file and directory permissions to 0700 -
	while the sessionfile mixin isn't "high security", not setting the
	permissions just makes it too easy: being able to see session file
	names means you can steal the session. They're still visible to the
	web user, which is pretty bad.  

2002-03-10 18:11  djc

	* albatross/: app.py, random.py: Change RandomPageModuleMixin so it
	inherits from PageModuleMixin.  This grossly simplifies the
	RandomPageModuleMixin code.  On a simplistic level all it does now
	is use the URI from the browser request to obtain the page name. 
	The page module loading code from PageModuleMixin has been moved
	into a method called load_page_module() so it can be used by
	RandomPageModuleMixin.  A start_page() method has been added to
	PageModuleMixin and PageObjectMixin to allow subclasses to query the
	start_page setting.  RandomModularApp and RandomModularSessionApp
	now inherit from CachingTemplateLoaderMixin since the functionality
	was removed from RandomPageModuleMixin.  

2002-03-10 01:27  djc

	* samples/random/: install.py, login.html, login.py, paginate.html,
	paginate.py, random.py, tree.html, tree.py: Changed the random
	sample to better illustrate the basic functions of the
	RandomPageModuleMixin.  

2002-03-10 01:25  djc

	* albatross/tags.py: Subtle change to <al-a href="">.  If the href
	does not contain a '?' it now looks for an '='.  If not found it
	uses the text as a redirect_url().  
	
	For example <al-a href="there"> with current_uri of 
	"/cgi-bin/prog.py/here" and base_url of "prog.py" would yield an
	output of <a href="http://server/cgi-bin/prog.py/there">.  If the
	tag had been <al-a href="there=1"> then the redirect_url is not
	done.  In this case the output will be <a href="prog.py?there=1"> 
	
	This change should not impact any existing code.  

2002-03-10 00:54  djc

	* albatross/app.py: Moved code to build a redirect URL into
	redirect_url() method.  

2002-03-10 00:27  djc

	* albatross/app.py, albatross/context.py, albatross/random.py,
	albatross/sessionfile.py, samples/random/random.py: Removed bogus
	SessionBase set_syspath_prefix() method and all references to the
	method.  Now SessionBase asks the application for a module_path 
	which is temporarily inserted into sys.path at posn 0.  The
	PageObjectMixin just returns None and all is working again.  Fixed
	bug in current_url() - need to isolate the path component of current
	URI.  

2002-03-10 00:22  djc

	* albatross/apacheapp.py: Remove useless import.  

2002-03-09 23:29  djc

	* samples/random/random.py: Call set_syspath_prefix() on new
	execution context.  

2002-03-09 23:28  djc

	* albatross/sessionfile.py: Changed ModularSessionFileApp
	create_context() method to call set_syspath_prefix() on new
	execution context.  

2002-03-09 23:27  djc

	* albatross/random.py: Deleted kludgey load_session() method in
	RandomPageModuleMixin and added a module_path() method.  Modified
	application create_context() method to call set_syspath_prefix() 
	with module_path on new context.  

2002-03-09 23:25  djc

	* albatross/context.py: Added set_syspath_prefix() method to
	StubSessionMixin and SessionBase to allow session pickles to load
	objects defined in page modules not visible to sys.path.  

2002-03-09 23:23  djc

	* albatross/app.py: Replace try-to-be-clever current_url() with
	something which just returns request.get_uri().  The relative URL's
	were just causing mayhem with the RandomPageModuleMixin.  Added
	module_path() method to PageModuleMixin so the path can be added to
	sys.path in SessionBase during session pickle loading.  Added code
	to retrieve the module_path and pass it to the SessionBase during
	create_context() for application classes which inherit from 
	PageModuleMixin.  Not really happy with this solution.  

2002-03-09 22:16  djc

	* doc/: albatross.tex, doctest/tags-a1, doctest/tags-a2,
	doctest/tags-a3: Tags now use current_url() instead of base_url()
	to generate URLs in HTML output.  

2002-03-09 22:10  djc

	* samples/random/random.py: Named application constructor arguments
	to improve clarity.  

2002-03-09 22:09  djc

	* samples/sybase/sybase.py: No longer need to return own
	mod_python.apache error code - this is now done for us in the
	application run() method.  Removed unused import.  

2002-03-09 22:08  djc

	* samples/popview5/popview.py: No longer need to return own
	mod_python.apache error code - this is now done for us in the
	application run() method.  

2002-03-09 22:06  djc

	* albatross/app.py: Altered the Application run() method to return
	a status which is used to return HTTP codes to the browser.  Small
	fixup to handle_exception() to attach the requset to the temporary 
	execution context used to load the exception HTML template.  

2002-03-09 22:03  djc

	* albatross/cgiapp.py: Added stub status() method.  

2002-03-09 22:02  djc

	* albatross/apacheapp.py: Added get_servername() and redirect() to
	bring mod_python handling up to date.  Added a status() method to
	allow mod_python applications to do this: 
	
	  def handler(req): 
	      return app.run(Request(req)) 
	
	instead of this: 
	
	  from mod_python import apache 
	  def handler(req): 
	      app.run(Request(req)) 
	      return apache.OK 

2002-03-09 19:18  djc

	* albatross/cgiapp.py: Fixed the redirect delay by sending a
	Status: 301 Moved Permanently header.  

2002-03-09 16:24  djc

	* doc/tempuser.tex: Fixed typo reported by Lewis Bergman.  

2002-03-09 16:23  djc

	* doc/tags.tex: Ahh the helpful error messages from LaTeX - I
	didn't just spend an hour searching through cvs diff output - at
	least I wish I hadn't.  Added \end{methoddesc} to
	TreeIterator.set_value() 

2002-03-09 14:46  bgg

	* albatross/sessionfile.py: Moved windows, etc.  

2002-03-09 02:12  djc

	* dist/dist-albatross.sh: Oops - noticed some problems in the new
	top level tar file directory naming code.  

2002-03-09 02:02  djc

	* dist/dist-albatross.sh: Change distribution process to create a
	tar file with root directory which includes release number appended.
	ie. for 0.06 use albatross-0.06.  

2002-03-09 01:59  djc

	* dist/: index.ahtml, make_webpage.py: Bring automatically
	generated web page up to date with manually edited web page - oops.  

2002-03-09 01:33  djc

	* samples/random/: install.py, login.html, login.py, paginate.html,
	paginate.py, random.py, tree.html, tree.py: Added a sample for the
	RandomModularSessionApp - it still needs more work, but is enough to
	fiddle around with.  

2002-03-09 01:14  djc

	* albatross/app.py: Fixed AppContext.redirect() to transform a
	local redirect into a redirect with URL containing scheme and
	netloc.  

2002-03-09 01:12  djc

	* albatross/cgiapp.py: Added get_servername() to allow redirect()
	in AppContext to build a full URL from a local URI.  

2002-03-09 00:16  bgg

	* albatross/sessionfile.py: If session dir is missing, create it
	and if that fails, raise exception.  Fiddle with log messages to
	make them include the filename causing an exception.  

2002-03-08 23:58  djc

	* albatross/tags.py: Replace all instances of base_url() with
	current_url() to make the emitted URLs work with random page module.  

2002-03-08 23:57  djc

	* albatross/random.py: Removed the base_url argument from the
	RandomPageModuleMixin constructor as it is already handled by the
	Application class.  Added a load_session() method to
	RandomPageModuleMixin which temporarily appends the page module
	directory to sys.path to allow unpickle to load page modules if
	necessary.  This is probably required in the toolkit proper so will
	probably be removed from here soon.  Fixed many small bug which
	prevented the RandomPageModuleMixin from working at all.  Rearranged
	the inheritance in RandomModularApp and RandomModularSessionApp to
	place RandomPageModuleMixin before Application - derrr.  

2002-03-08 23:49  djc

	* albatross/cgiapp.py: Added redirect() method - probably not
	correct since mozilla does a three second delay - needs
	investigation.  

2002-03-08 23:47  djc

	* albatross/app.py: Added redirect capability to AppContext and
	 Application.  
	- Redirect class used to pass new location as exception to 
	   Application.run().  
	 - AppContext.redirect() method added to allow applictions to issue
	   a redirect to the browser.  
	 - The Application.run() method is modified to trap a Redirect
	 exception.  Added current_url() method to AppContext which returns
	the URI used to issue the request for the current page.  The
	returned URI is made to look like the base_url argument passed to
	the Application constructor.  Moved the pickle_sign() and
	pickle_unsign() methods down.  

2002-03-08 17:12  andrewm

	* albatross/sessionfile.py: Added SimpleSessionFileApp app class
	(class based, rather than modular).  

2002-03-08 12:33  andrewm

	* albatross/context.py: add_session_vars() and del_session_vars()
	now gracefully cope with the case of their argument being a list or
	tuple of variable names. add_session_vars() also now checks that the
	variable names are strings - passing other objects would cause
	obscure failures down the track.  

2002-03-06 17:02  andrewm

	* TODO, albatross/tags.py, doc/tags.tex: Removed selected_nodes()
	and open_nodes() methods, associated infrastructure, and
	documentation from the TreeIterator.  These methods were flawed, as
	they were only valid during a small window (immediately after
	rendering the html), and selected_nodes() did not include selected 
	nodes subordinate to an open node (due to lazy loading).  

2002-03-05 20:05  andrewm

	* albatross/: app.py, context.py, session.py, sessionfile.py,
	tags.py: 
	* added explicit returns of "None" to more clearly show our
	intentions 
	* removed unnecessary imports of types and time in app.py 
	* added unused_ prefix to currently unused variables in input_add() 
	* cleaned up handling of server responses in session.py 
	* removed unused argument to tags.escape() 

2002-02-27 18:18  andrewm

	* TODO: Updated from archived mail.  

2002-02-27 18:10  andrewm

	* session-server/TODO: Updated TODO 

2002-02-27 18:01  andrewm

	* session-server/: al-session-daemon, simpleserver.py: 
	- catch exceptions that occur while processing client commands. Log
	  these and attempt to keep running. If the client causes too many
	  (>3) consecutive errors, close the connection.  
	- handle the case where we receive a blank line from a client.  
	- whitespace cleanup in al-session-daemon 

2002-02-27 17:41  andrewm

	* session-server/: al-session-daemon, simpleserver.py: 
	- Fixed error in --help message for daemon wrapper 
	- simpleserver.py now behaves as documented WRT the "QUIT" command -
	  it immediately drops the connection. Previously, the server would
	  exit if the request came from localhost.  

2002-02-27 16:19  andrewm

	* doc/appuser.tex: Fixed a type, and some lumpy grammar in "3.7 The
	Albatross Session Server".  

2002-02-27 15:37  andrewm

	* session-server/TODO: Added TODO file 

2002-02-26 19:50  andrewm

	* albatross/sessionfile.py: Session files now have an ".als"
	extension - to avoid accidents when cleaning the session directory.
	This probably should be settable by the user.  

2002-02-26 19:49  andrewm

	* session-server/: .cvsignore, al-session-daemon: Minor fix to
	command line parsing error handling.  

2002-02-26 19:48  andrewm

	* test/sessions/: __init__.py, basic.py, concurrent.py, request.py,
	ses_file.py, ses_hiddenfield.py, ses_server.py: Basic tests for
	session file, hidden field, and session server mixins.  The basic
	test simply saves one value, then reloads the session and confirms
	that the value comes back.  
	
	Note that the session server test requires that a session server be 
	running on the machine. This is unfortunate - alternatives, such as 
	forking our own, don't work because they're not easily portable to 
	windows.  

2002-02-22 14:55  andrewm

	* albatross/: cgiapp.py, tags.py: Change to use "from X import A,
	B, C" - missed a few in previous check-in.  

2002-02-22 14:54  andrewm

	* albatross/: app.py, context.py, random.py, session.py,
	sessionfile.py, template.py: Asthetic change: within albatross
	modules, other albatross modules are now imported as "from X import
	A, B, C", rather than "import X". This was done as the mixins should
	really be treated as being in the same namespace (they're documented
	this way, and the user sees them this way when they "import
	albatross" due to the "from X import *" in albatross.__init__). An
	exception is the module "tags" - it's left as an "import tags" to
	keep it consistent with it's treatment in __init__.py.  
	
	Standard python libraries are now all imported with one import
	statement - the logic being "they're standard libraries - you know
	what they do - we don't need to call extra attention to them". 8-) 

2002-02-21 18:43  andrewm

	* test/: all.py, sessions/.cvsignore, sessions/__init__.py,
	templates/__init__.py: Initial place-holder for "sessions" tests.  

2002-02-21 18:34  andrewm

	* test/: all.py, templates/__init__.py,
	templates/albatross_test.py: Reorganise tests to move all existing
	tests under a "templates" subdirectory.  

2002-02-20 18:10  andrewm

	* albatross/: __init__.py, sessionfile.py: An initial
	implementation of a file-based session recorder. This has the virtue
	of not requiring any external daemon, while still keeping the
	session details away from tampering users.  
	
	This module introduces SessionFileContextMixin and
	SessionFileAppMixin.  The corresponding application objects are
	SessionFileAppContext and ModularSessionFileApp.  
	
	Expiring the tokens is currently left as an exercise for the reader
	- on unix, cron could be used, although ultimately, we should write
	a standalone python script to achieve the same ends for Windows.
	Essentially all that needs to be done is remove files that haven't
	been modified in more than N minutes.  
	
	I have some concerns over the method by which session ID's are
	generated in the absence of /dev/urandom - the "random" module is
	used, and is seeded with the system time. A better approach is
	needed (complicated by the fact it needs to be portable).  

2002-02-19 11:49  andrewm

	* samples/install.py: Check return value of os.system(), and abort
	if not zero. This not only allows the user to interrupt the process,
	it also means we don't swamp the user with errors if, for example,
	permissions don't allow us to write to the cgi directory.  
	
	The python doco suggests that os.system() always returns zero on
	Windows - this is unfortunate.  

2002-02-18 23:03  djc

	* samples/install.py: Python2.2 dir(instance) returns method names
	whereas Python2.1 doesn't.  

2002-02-18 19:30  djc

	* samples/install.py: Oops - Python2.1 and 2.2 have different
	repr() behaviour - just assume all settings are strings.  

2002-02-17 16:52  djc

	* doc/packaged.tex: Forgot to document the random argument to all
	application constructors.  

2002-02-17 16:06  djc

	* doc/: albatross.tex, thanks.tex: Add a thanks chapter.  

2002-02-17 15:25  djc

	* TODO: Updated tasks.  

2002-02-17 15:23  djc

	* doc/simplesessapp.dia: Recenter object.  

2002-02-17 15:22  djc

	* doc/: AlbatrossObjects.dia, appcontext.dia, application.dia,
	modularapp.dia, modularsessapp.dia, randmodapp.dia,
	randmodsessapp.dia, sessionappcontext.dia, simpleapp.dia,
	simpleappcontext.dia, simplecontext.dia, simplesessapp.dia: Updated
	all diagrams and organised them to inherit left to right just like
	in the Python code.  

2002-02-17 15:21  djc

	* albatross/random.py: Oops --- random applications need to inherit
	from PickleSignMixin.  

2002-02-17 12:11  djc

	* doc/tags.tex: Added explanation of regex based template parsing.  

2002-02-17 11:08  djc

	* albatross/context.py: Oops - forgot to save file before last
	commit.  

2002-02-17 11:07  djc

	* doc/: mixins.tex, toolkit.dia: Finished updating mixins
	reference.  

2002-02-17 11:05  djc

	* albatross/context.py: Added set_save_session() and
	should_save_session() to StubSessionMixin.  

2002-02-17 10:51  djc

	* albatross/context.py: Renamed nosave_session() to
	set_save_session(flag).  

2002-02-17 00:50  djc

	* doc/: albatross.tex, customtags.tex: Added installation
	instructions to custom tag sample.  

2002-02-17 00:46  djc

	* doc/appuser.tex: Finished moving application samples to new
	organisation.  

2002-02-17 00:05  djc

	* doc/installation.tex: Update installation notes.  

2002-02-17 00:04  djc

	* doc/tempuser.tex: Forgot to change a filename.  

2002-02-16 23:40  djc

	* samples/install.py: Slight permission program - oops.  

2002-02-16 23:29  djc

	* doc/tempuser.tex: Converted tree sample to new layout.  

2002-02-16 23:24  djc

	* samples/templates/stream/install.py,
	samples/templates/stream/stream.py, doc/tempuser.tex: Converted
	stream sample to new layout.  

2002-02-16 23:18  djc

	* doc/tempuser.tex: Documented form series of samples in new
	layout.  

2002-02-16 23:17  djc

	* samples/templates/: form1/form.html, form1/form.py,
	form1/install.py, form2/form.html, form2/form.py, form2/install.py,
	form3/form.html, form3/form.py, form3/install.py: Converted all of
	the form series samples to new layout and installer.  

2002-02-16 22:54  djc

	* samples/: install.py, extension/install.py, paginate/install.py,
	popview1/install.py, popview2/install.py, popview3/install.py,
	popview4/install.py, popview5/install.py, sybase/install.py,
	tree1/install.py, tree2/install.py: Install all samples to alsamp
	directory.  

2002-02-16 22:43  djc

	* samples/install.py: Run subinstalls via os.system() to force
	isolation.  

2002-02-16 22:33  djc

	* doc/tempuser.tex: Convert content series of samples to new
	installer.  

2002-02-16 22:28  djc

	* samples/templates/: content1/content.py, content1/install.py,
	content1/oops.html, content2/content.py, content2/install.py,
	content2/oops.html: Converted the content sample programs to new
	installer.  

2002-02-16 21:56  djc

	* doc/: albatross.tex, tempuser.tex: Rearranged all simple series
	template examples.  

2002-02-16 21:55  djc

	* samples/templates/: simple1/install.py, simple2/install.py,
	simple2/simple.py, simple3/install.py, simple3/simple.py,
	simple4/install.py, simple4/simple.py, simple5/install.py,
	simple5/simple.py: Rearranged all simple series template examples
	to use installer.  

2002-02-16 17:40  djc

	* samples/extension/: cal.py, install.py: extension comverted to
	new layout with installer.  

2002-02-16 17:37  djc

	* samples/paginate/: install.py, paginate.py: paginate comverted to
	new layout with installer.  

2002-02-16 17:33  djc

	* samples/install.py: make_directory() makes parents if necessary.  

2002-02-16 17:32  djc

	* samples/popview5/: htaccess, install.py, popview.py: popview5
	comverted to new layout with installer.  

2002-02-16 17:07  djc

	* samples/: popview4/detail.py, popview4/install.py,
	popview4/list.py, popview4/popview.py, popview5/detail.py,
	popview5/list.py: popview4 comverted to new layout with installer.  

2002-02-16 17:00  djc

	* samples/popview3/: install.py, popview.py: popview3 comverted to
	new layout with installer.  

2002-02-16 16:54  djc

	* samples/popview2/: install.py, popview.py: popview2 comverted to
	new layout with installer.  

2002-02-16 16:48  djc

	* samples/popview1/: install.py, popview.py: popview1 comverted to
	new layout with installer.  

2002-02-16 16:47  djc

	* samples/install.py: Rationalised file copying to File base class.  
	Added add_module() to Installer for installing modules.  

2002-02-16 16:32  djc

	* samples/sybase/: install.py, sybase.py: Converted sybase sample
	to installer.  

2002-02-16 16:32  djc

	* samples/install.py: No longer using shutil to copy files - all
	files now go through config substitution process.  Added
	-=-install_dir-=- which is replaced with the installation directory
	configured by the installer.  Added Installer.add_data() to install
	data files.  

2002-02-16 16:12  djc

	* albatross/: context.py, session.py: Added nosave_session() method
	to SessionBase.  Call ctx.nosave_session() to stop the session being
	saved at the end of the request.  Session mixins
	HiddenFieldSessionMixin and SessionServerContextMixin query whether
	or not to save the session via the should_save_session() method 
	added to SessionBase.  

2002-02-16 16:02  djc

	* samples/: install.py, tree1/install.py, tree1/tree.py,
	tree2/install.py, tree2/tree.py: Implemented initial installer - at
	top level it installs all samples, in each sample directory it
	installs that sample.  Answers to install questions are cached in
	install.cfg.  When installing exec files with the string
	-=-secret-=- the program substitutes a config option.  This allows
	us to publish the source without giving away our secrets.  
	
	Initial sample applications it has been tested on are tree1 and
	tree2.  

2002-02-16 10:22  djc

	* albatross/__init__.py, albatross/apacheapp.py, albatross/app.py,
	albatross/cgiapp.py, albatross/context.py, albatross/random.py,
	albatross/session.py, albatross/tags.py, albatross/template.py,
	doc/albatross.tex, doc/appuser.tex, doc/copyright.tex,
	doc/customtags.tex, doc/installation.tex, doc/introduction.tex,
	doc/mixins.tex, doc/packaged.tex, doc/tags.tex, doc/tempuser.tex,
	session-server/al-session-daemon, session-server/pidfile.py,
	session-server/simpleserver.py: Placed copyright message at top of
	all core files.  

2002-02-16 09:58  djc

	* albatross/context.py: Removed debug messages and made secret
	private in PickleSignMixin.  

2002-02-15 23:38  djc

	* samples/tree2/tree.py: Added secret parameter to application
	constructor.  

2002-02-15 23:37  djc

	* albatross/session.py: Compression taken out of SessionBase into
	SessionServerContextMixin to allow pickles to be signed in other
	classes inheriting from SessionBase.  

2002-02-15 23:35  djc

	* albatross/context.py: Implemented PickleSignMixin which MD5 signs
	all pickles sent to browser and then checks the pickles coming back
	to detect modification.  Moved compression out of SessionBase to
	allow pickles to be signed before they are compressed.  Sign pickles
	saved in NameRecorderMixin hidden fields.  

2002-02-15 23:32  djc

	* albatross/app.py: Don't import zlib or base64 - not needed any
	more.  Removed superfluous comment.  Implemented stub pickle_sign()
	and pickle_unsign() in Application to prevent any unsigned pickles
	from being sent to or received from the browser.  Overload these in
	PickleSignMixin to do pickle signing.  Made all prepacked
	applications inherit from PickleSignMixin to make pickles safe -
	breaks all current user code.  You now need a secret parameter to
	the application constructor.  

2002-02-15 23:27  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Bump release to 0.06 in preparation for next
	release.  

2002-02-14 16:53  andrewm

	* session-server/: al-session-daemon, pidfile.py, simpleserver.py: 
	* Renamed session-server.py to be simpleserver.py - the hypen in the 
	  name was preventing it being imported as a module.  
	* Added al-session-daemon which is "simply" (it's almost as large 
	  as simpleserver) a wrapper around simpleserver.py that presents a 
	  sysadm-friendly interface: it adds command line options "start", 
	  which starts a background daemon, "stop" which stops the
	  background daemon and "status" which reports the pid of the
	  running daemon. This will only work under Unix.  
	* Some minor changes to simpleserver.py to support
	  al-session-daemon: = the Server class now has a stop() method to
	    allow signal handlers to ask it to break out of it's loop and return
	  to it's caller.  = select.select() has been wrapped in a try/except
	    to catch EINTR and simply return an empty set to it's caller.  

2002-02-12 23:06  djc

	* TODO: Added reminder about traceback losing filenames.  

2002-02-06 21:50  djc

	* doc/: TODO, albatross.tex: Need to keep track of outstanding
	documentation tasks.  

2002-02-05 23:10  djc

	* samples/tree2/tree.html: Make name column use 100% of window
	width - forces correct lineup on IE.  

2002-02-05 23:09  djc

	* samples/tree2/tree.py: Windows reports all file inodes as zero -
	not good for unique node id.  Use file path instead.  

2002-02-02 00:39  andrewm

	* test/: basic.py, basic/attr-quote.html: Added unitest for new
	quote escaping regular expressions in the tag parser.  

2002-02-02 00:38  andrewm

	* albatross/template.py: Extended tag finding regular expressions
	to recognise escaped quotes in attribute values.  
	
	This makes the RE's considerably more scary, so I've split their 
	construction up over several lines, and added comments.  
	
	The attribute extraction code also needed to remove the escaping 
	backslashes from the resulting strings.  
	
	The RE's to recognise strings with escaped quotes came from
	O'Reilly's "Mastering Regular Expressions". They should be safe
	against "unbounded run time" cases.  
	
	The resulting regular expressions runs about 19% slower than those
	that don't handle escaped quotes. Since the quoted strings are
	parsed once when recognising attributes, and again when spliting
	those attributes, the total slowdown should be in the region of 25%
	(to process a reasonably complex template file, time in the RE
	matching functions will go from 3.2ms to 4ms).  

2002-01-31 14:23  andrewm

	* test/: basic.py, form.py, basic/attr-quote.html: 
	* Added basic test for attribute quoting (single quotes within
	  double quote, and double quotes within single quotes).  
	* Added test to ensure single quotes were escaped correctly when
	  attribute values are derived from untrusted sources.  

2002-01-31 14:21  andrewm

	* albatross/: tags.py, template.py: Extend templace attribute
	quoting to allow single quotes as well as double quotes. This means
	we also have to escape single quotes where attributes are derived
	from potentially untrustworthy sources.  

2002-01-30 14:15  andrewm

	* test/Makefile: Fixed PYTHONPATH (was refering to the albatross
	directory, rather than the directory above).  

2002-01-29 18:43  djc

	* albatross/app.py: Forgot to implement
	load_template()/load_template_once() proxies in AppContext class.  

2002-01-19 23:29  djc

	* dist/index.ahtml: Stop bogus wrapping on IE.  

2002-01-17 14:38  andrewm

	* albatross/tags.py: Added get_selected_aliases() and
	set_selected_aliases() methods.  

2002-01-14 12:16  andrewm

	* doc/: appuser.tex, packaged.tex, tags.tex: Spelling corrections 

2002-01-13 00:04  djc

	* dist/index.ahtml: Fix column spacing.  

2002-01-12 23:56  djc

	* dist/: index.ahtml, make_webpage.py: Provide file sizes for
	download.  

2002-01-12 23:41  djc

	* dist/make_webpage.py: Files in wrong sequence.  

2002-01-12 23:36  djc

	* dist/dist-albatross.sh: Ooops - forgot argument to
	make_webpage.py.  

2002-01-12 23:29  djc

	* dist/dist-albatross.sh: Fix export check.  

2002-01-12 23:25  djc

	* dist/dist-albatross.sh: Fix up installation process.  

2002-01-12 23:03  djc

	* dist/: dist-albatross.sh, index.ahtml, make_webpage.py: First
	attempt at automating the release process.  

2002-01-12 23:02  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Bump release to 0.05.

2002-01-12 21:39  djc

	* doc/: albatross.tex, tags.tex, doctest/tags-macro1,
	doctest/tags-macro2, doctest/tags-macro3, doctest/tags-macro4,
	doctest/tags-macro5, doctest/tags-macro6, doctest/tags-macro7: 
	Finally finished documentation for macro tags.  

2002-01-12 20:54  djc

	* doc/: appcontext.dia, mixins.tex, sessionappcontext.dia,
	simpleappcontext.dia, simplecontext.dia: Removed macro_arg_depth()
	ExecuteMixin method.  It did not solve all infinite recursion
	problems.  

2002-01-12 20:52  djc

	* albatross/tags.py: Now evaluating macro arguments before passing
	them to macro - much less confusing.  

2002-01-12 20:51  djc

	* albatross/context.py: Removed macro_arg_depth() - now evaluate
	macro arguments before passing them to macro - much less confusing.  

2002-01-12 19:24  djc

	* doc/doctest/templ-white4: Updated for Python-2.1 newline changes.  

2002-01-12 19:23  djc

	* doc/: appcontext.dia, mixins.tex, sessionappcontext.dia,
	simpleappcontext.dia, simplecontext.dia: Added documentation for
	macro_arg_depth() ExecuteMixin method.  

2002-01-12 19:13  djc

	* albatross/: context.py, tags.py: Fixed infinite recursion bug
	when expanding nested macros.  

2002-01-12 19:12  djc

	* albatross/template.py: Added __repr__ methods to assist with
	debugging.  

2002-01-10 22:35  djc

	* albatross/app.py, albatross/context.py, doc/albatross.tex,
	doc/appcontext.dia, doc/mixins.tex, doc/packaged.tex,
	doc/sessionappcontext.dia, doc/simpleappcontext.dia,
	doc/simplecontext.dia, doc/tags.tex: Added clear_locals() method to
	NamespaceMixin to be called in remove_session().  Override
	clear_local() in AppContext to retain the __page__ local namespace
	value.  

2002-01-10 22:34  djc

	* doc/Makefile, test/Makefile: Set PYTHONPATH for test target to
	use uninstalled albatross.  

2002-01-10 15:48  andrewm

	* test/: tree.py, tree/tree-input.html, tree/tree-lazy.html: Added
	two new tests for lazy tree rendering and lazy tree's with input
	fields.  

2002-01-09 15:28  andrewm

	* test/: form.py, form/input-checkbox.html,
	form/input-nameexpr-text.html, form/input-nameexpr.html,
	form/input-password.html, form/input-radio-expr.html,
	form/input-radio-valueexpr.html, form/input-radio.html,
	form/input-text-expr.html, form/input-text.html,
	form/textarea-fromapp.html, form/textarea.html: 
	- Added tests for <al-input> types checkbox, text, password, radio 
	- Added tests for <al-textarea> 

2002-01-09 00:45  djc

	* doc/: Makefile, test_examples.py, doctest/tags-for2,
	doctest/tags-input-checkbox, doctest/tags-input-file,
	doctest/tags-input-hidden, doctest/tags-input-image,
	doctest/tags-input-password, doctest/tags-input-radio1,
	doctest/tags-input-radio2, doctest/tags-input-select2,
	doctest/tags-input-submit, doctest/tags-value3,
	doctest/templ-white1, doctest/templ-white4, doctest/templ-white5: 
	Added the excellent document example testbed from Andrew.  Fixed all
	of the examples in doctest/ so they give correct results.  Added a
	'make test' target in the doc directory which runs the sample tests.  

2002-01-09 00:20  andrewm

	* test/form.py: Re-enabled <al-select optionexpr="..."> naughty
	character escaping tests.  

2002-01-09 00:20  djc

	* albatross/template.py: Try to output tag attributes in the same
	sequence as they appear in the template source.  Still not ideal,
	but the "perfect" fix requires more extensive changes.  

2002-01-08 23:53  djc

	* albatross/tags.py: Make sure that the parogram generated option
	values are escaped.  

2002-01-08 20:51  andrewm

	* test/: all.py, basic.py, form.py, include.py, tree.py,
	whitespace.py, basic/comment.html, basic/exec.html,
	basic/var-value-noescape.html, form/select-evaluate.html,
	form/select-optionexpr-pairs.html, form/select-optionexpr.html,
	form/select-value.html, form/select.html, include/expr.html,
	include/incnxfile.html, include/name.html, include/nested.html,
	include/plain.html, tree/tree.html, whitespace/all.html: 
	- Added tests for <al-select>, <al-comment>, <al-include>,
	<al-tree>, <al-exec> 
	- Added test for whitespace="all" attribute.  
	- Added tests for special character escaping for <al-value> tags 
	- Fixed bug in <al-value date="..."> test - wasn't taking into
	  account timezones.  

2002-01-04 00:32  djc

	* doc/albatross.tex, doc/appuser.tex, doc/customtags.tex,
	doc/mixins.tex, doc/tags.tex, doc/tempuser.tex,
	doc/doctest/tags-a1, doc/doctest/tags-a2, doc/doctest/tags-a3,
	doc/doctest/tags-comment, doc/doctest/tags-exec,
	doc/doctest/tags-flush, doc/doctest/tags-for1,
	doc/doctest/tags-for2, doc/doctest/tags-for3,
	doc/doctest/tags-for4, doc/doctest/tags-for5, doc/doctest/tags-if,
	doc/doctest/tags-img, doc/doctest/tags-include,
	doc/doctest/tags-input-checkbox, doc/doctest/tags-input-file,
	doc/doctest/tags-input-hidden, doc/doctest/tags-input-image,
	doc/doctest/tags-input-nameexpr, doc/doctest/tags-input-password,
	doc/doctest/tags-input-radio1, doc/doctest/tags-input-radio2,
	doc/doctest/tags-input-radio3, doc/doctest/tags-input-select1,
	doc/doctest/tags-input-select2, doc/doctest/tags-input-select3,
	doc/doctest/tags-input-select4, doc/doctest/tags-input-submit,
	doc/doctest/tags-input-text, doc/doctest/tags-lookup,
	doc/doctest/tags-textarea, doc/doctest/tags-value1,
	doc/doctest/tags-value2, doc/doctest/tags-value3,
	doc/doctest/tags-value4, doc/doctest/templ-white1,
	doc/doctest/templ-white2, doc/doctest/templ-white3,
	doc/doctest/templ-white4, doc/doctest/templ-white5,
	samples/templates/tree.py: Fixed a large number of small problems
	in the documentation.  Moved all sample code in documentation
	suitable to processing via the doctest module into separate files in
	doc/doctest directory.  

2002-01-04 00:29  djc

	* albatross/session.py: Turned server_connect(), server_read(), and
	server_write() methods into privates in SessionServerAppMixin.  

2002-01-04 00:28  djc

	* setup.py: Remove extraneous space in email address.  

2001-12-31 01:14  djc

	* doc/: albatross.tex, mixins.tex, packaged.tex, tags.tex: Lots of
	minor fixes --- gave up waiting for other people to read the 
	documentation :-) 

2001-12-25 00:45  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex,
	doc/installation.tex: Bump release to 0.04 

2001-12-25 00:43  djc

	* TODO: Finished documenting random.py.  Added note to finish
	<al-macro> documentation.  

2001-12-25 00:41  djc

	* doc/customtags.tex: Replaced <alx-comment> tag example with
	<alx-calendar> tag.  

2001-12-25 00:36  djc

	* samples/extension/: cal.html, cal.py: Added calendar extension
	sample program.  

2001-12-25 00:05  djc

	* doc/mixins.tex: Added documentation for RandomPageModuleMixin.  

2001-12-25 00:04  djc

	* doc/albatross.tex: Date changed --- Merry Christmas.  

2001-12-25 00:04  djc

	* albatross/random.py: Fix the behaviour of module loading in
	RandomPageModuleMixin to match documentation.  Still need to come up
	with a sample application to test this class properly.  

2001-12-25 00:03  djc

	* albatross/tags.py: Fixed syntax error in
	TreeIterator.has_children() - maybe I should check the syntax before
	I commit next time...  

2001-12-24 23:09  djc

	* doc/: Makefile, packaged.tex, randmodapp.dia, randmodsessapp.dia: 
	Added documentation for the RandomModularApp and
	RandomModularSessionApp classes.  

2001-12-24 22:40  djc

	* doc/tags.tex: Pasted some text and forgot to replace "radio" with
	"checkbox".  

2001-12-24 22:39  djc

	* doc/appuser.tex: Added comment about the need to run
	session-server.py for server-side session programs, 

2001-12-24 22:29  djc

	* doc/tempuser.tex: Various fixups spotted by andrewm.  

2001-12-24 22:29  djc

	* samples/templates/stream1.html: Bring file up to date with
	documentation.  

2001-12-24 22:15  djc

	* doc/tags.tex: Finished documenting <al-tree> and TreeIterator.  

2001-12-24 22:05  djc

	* albatross/tags.py: Rename of argument to
	ListIterator.__setstate__().  Removed unused attributes of
	TreeIterator; _tree, _node, _have_value.  

2001-12-24 18:32  djc

	* albatross/tags.py: Fixed the logic for
	TreeIterator.has_children().  

2001-12-24 18:32  djc

	* albatross/context.py: SimpleContext now inherits from
	StubSessionMixin.  

2001-12-24 18:23  djc

	* doc/packaged.tex: SimpleContext now inherits from
	StubSessionMixin.  

2001-12-24 18:18  djc

	* doc/simplecontext.dia: Reorganise methods in StubSessionMixin.  

2001-12-24 18:13  djc

	* doc/simplecontext.dia: Now inherits from StubSessionMixin.  

2001-12-24 18:03  djc

	* doc/simplecgiapp.dia: Not referenced in documentation any more.  

2001-12-24 18:02  djc

	* doc/AlbatrossObjects.dia: SimpleContext now inherits from
	StubSessionMixin --- TreeIterator calls add_session_vars().  

2001-12-24 17:58  djc

	* samples/templates/tree.py, doc/tempuser.tex: Updated to match
	behaviour of TreeIterator.  

2001-12-24 17:40  djc

	* test/macro.py, test/macro/call1.html, albatross/tags.py: Remove
	the <al-call> tag --- it was a failed experiment.  

2001-12-24 15:47  djc

	* doc/tags.tex: Brought ListIterator documentation up to date. 
	Added explanation of set_backdoor() and get_backdoor().  

2001-12-24 15:45  djc

	* TODO: Added note about finishing the <input type="file"> tag.  

2001-12-24 15:03  djc

	* doc/tags.tex: Added documentation for valueexpr attribute in
	radio/checkbox.  

2001-12-24 15:02  djc

	* albatross/tags.py: Fixed bug in checkbox/radio where the value
	attribute was being ignored.  

2001-12-24 13:09  djc

	* doc/installation.tex: Bring the prerequisites list up to date.  
	Update tar file version.  

2001-12-24 12:25  djc

	* ChangeLog: Constructed a ChangeLog from recent history via
	cvs2cl.pl --fsf --accum 

2001-12-24 02:09  djc

	* doc/albatross.tex: Bump release to 0.03.  

2001-12-24 02:07  djc

	* setup.py, albatross/__init__.py: Bump release to 0.03.

2001-12-24 01:50  djc

	* TODO, doc/albatross.tex, doc/tags.tex: Trying to get
	documentation up to date.  

2001-12-24 01:50  djc

	* albatross/tags.py: Added nameexpr attribute to <al-select>.  
	Added alias and nameexpr attributes to <al-textarea>.  

2001-12-23 18:15  djc

	* doc/tags.tex: Documentation fixes.  

2001-12-23 17:53  djc

	* doc/Makefile, doc/albatross.tex, doc/appcontext.dia,
	doc/application.dia, doc/mixins.tex, doc/modularapp.dia,
	doc/modularsessapp.dia, doc/packaged.tex,
	doc/sessionappcontext.dia, doc/simpleapp.dia,
	doc/simpleappcontext.dia, doc/simplecgiapp.dia,
	doc/simplecontext.dia, doc/simplesessapp.dia, doc/tags.tex,
	doc/tempuser.tex, samples/templates/content1.py,
	samples/templates/content2.py: Bring documentation slightly up to
	date.  

2001-12-22 17:47  djc

	* albatross/: apacheapp.py, cgiapp.py: Rename __done_headers to
	__sent_headers.  

2001-12-20 23:14  djc

	* samples/tree/tree2.html: Remove some unnecessary HTML.  

2001-12-20 23:13  djc

	* albatross/tags.py: Implemented TreeIterator.selected_nodes() /
	open_nodes() 

2001-12-20 23:12  djc

	* albatross/: context.py, session.py: Make sure remove_session()
	works for all types of session.  

2001-12-20 14:50  andrewm

	* albatross/tags.py: 
	- fixed bug in the <al-select> input (mods to add alias support had
	  broken the recording of names.  
	- added close_all() and deselect_all() methods to the TreeIterator.  

2001-12-19 22:44  djc

	* albatross/tags.py: Added alias attribute to <al-select> 

2001-12-19 22:15  djc

	* albatross/tags.py: Added <al-comment> 

2001-12-19 21:54  djc

	* TODO: Fixed cross-site scripting hole.  

2001-12-19 21:54  djc

	* albatross/tags.py: Removed cross-site scripting hole in TextArea
	and Value.  

2001-12-19 00:11  djc

	* TODO: Add/remove stuff.  

2001-12-18 23:08  djc

	* samples/paginate/: paginate.html, paginate.py: Added simple
	pagination sample.  

2001-12-18 22:37  djc

	* albatross/app.py: Use generic name 'func' in
	page_enter()/page_leave()/process_request()/ display_response().  

2001-12-18 22:32  djc

	* samples/tree/: tree1.py, tree2.py: Convert to new parent/leaf
	node scheme.  

2001-12-18 22:32  djc

	* albatross/tags.py: Leaf nodes must not define children attribute
	in <al-tree> 

2001-12-18 22:31  djc

	* albatross/app.py: Extra checks for detecting change of page
	before calling page_leave().  Remove args from page_leave() call.  

2001-12-18 00:39  djc

	* albatross/tags.py: Added call to ctx.input_add() in <al-select>
	thanks to Andrew.  

2001-12-18 00:38  djc

	* albatross/app.py: Added page_leave() method to PageModuleMixin
	and PageObjectMixin.  

2001-12-16 22:34  djc

	* TODO: Removed a task or two.  

2001-12-16 22:28  djc

	* doc/packaged.tex: Put label in overview.  

2001-12-16 22:17  djc

	* setup.py, albatross/__init__.py, doc/albatross.tex: Bump release
	to 0.02.

2001-12-16 22:16  djc

	* samples/tree/: tree1.html, tree1.py, tree2.html, tree2.py: Added
	some tree samples.  

2001-12-16 22:14  djc

	* doc/: AlbatrossObjects.dia, Makefile, albatross.tex,
	packaged.tex: Added Andrew's excellent diagram.  

2001-12-16 21:36  djc

	* albatross/tags.py: Forgot to flag node as loaded in
	node_is_open().  

2001-12-16 21:13  djc

	* albatross/tags.py: Fix up ListIterator backdoor.  

2001-12-16 21:06  djc

	* albatross/tags.py: Changed ListIterator pagination to use
	iterator backdoor.  Implemented tree browse backdoor.  

2001-12-16 21:04  djc

	* albatross/context.py: Added iterator backdoor to
	NamespaceMixin.set_value()/_get_value() Minor variable rename in
	SessionBase.encode_session.  

2001-12-14 00:36  djc

	* albatross/tags.py: Initial support for lazy loading tree.  

2001-12-12 23:13  djc

	* albatross/tags.py: Implemented ALIAS attribute for <AL-INPUT>
	tag.  

2001-12-12 23:12  djc

	* albatross/context.py: Added NamespaceMixin.make_alias() Reworked
	NamespaceMixin.set_value() to fix a.b bug.  

2001-12-11 23:54  djc

	* doc/albatross.tex, albatross/__init__.py, setup.py: Bump release
	to 0.01.

2001-12-11 23:46  djc

	* doc/albatross.tex: Update date.  

2001-12-11 23:45  djc

	* albatross/tags.py: Implement textarea.  

2001-12-10 23:00  djc

	* albatross/tags.py: Add valueexpr attribute to checkbox and
	radiobox.  Rename Input.expr_or_value() to get_name_and_value().  

2001-12-10 22:59  djc

	* albatross/session.py: Initialise
	SessionServerContextMixin.__sesid to None 

2001-11-29 23:15  djc

	* doc/tempuser.tex: Pre-order traversal not in-order - failed
	CS101.  

2001-11-29 22:30  djc

	* doc/: appuser.tex, tempuser.tex: Fixed typos spotted by Andrew.  

2001-11-29 22:28  djc

	* samples/popview/popview1.py: Fixed missing import poplib - thanks
	Andrew.  

2001-11-29 22:27  djc

	* src/session-server.py: Fixed typo in getopt parsing.  

2001-11-29 22:27  djc

	* albatross/tags.py: Added NAMEEXPR attribute to <al-input>.  

2001-11-29 22:25  djc

	* albatross/session.py: Added SessionServerContextMixin.sesid() 
	Delete session if error during decode.  Added
	SessionServerContextMixin.remove_session().  

2001-11-29 22:24  djc

	* albatross/context.py: Fixed reversed globals/locals in
	NamespaceMixin.eval_expr() Implemented smarter parser in
	NamespaceMixin.set_value() - now handles a[12].b or a.b[12] - still
	needs some testing...  Added NamespaceMixin._get_value() which uses
	eval().  Reimplemented get_value()/has_value() using _get_value().  
	Added remove_session() to StubSessionMixin and
	HiddenFieldSessionMixin.  

2001-11-29 22:20  djc

	* albatross/app.py: Remove session when an exception is detected
	during processing.  Added
	Application.remove_session()/Context.remove_session().  Call
	page_enter() on first page application sees.  

2001-11-29 22:18  djc

	* albatross/: apacheapp.py, cgiapp.py: Only write headers once.  
	Automatically write headers once output is sent.  

2001-11-25 21:32  djc

	* test/basic.py: Fixed unittest.  

2001-11-24 20:17  djc

	* albatross/random.py: Page modules and templates in same directory
	tree now.  

2001-11-20 23:23  djc

	* TODO, albatross/random.py: Added RandomModularSessionApp.  

2001-11-20 23:22  djc

	* doc/: Makefile, albatross.tex, appuser.tex, dataflow.dia,
	packaged.tex: Added dataflow diagram.  Started documenting
	RandomModularApp and RandomModularSessionApp.  

2001-11-20 22:26  djc

	* TODO: Updates.  

2001-11-20 22:24  djc

	* albatross/session.py: Ignore Cookie import error for now on 1.5.2 

2001-11-20 22:24  djc

	* albatross/context.py: Added TemplateLoadError exception.  

2001-11-20 22:23  djc

	* albatross/: apacheapp.py, cgiapp.py: Added get_uri() method to
	Request.  

2001-11-20 22:23  djc

	* albatross/: __init__.py, random.py: Added random.py to process
	random page modules.  
