Change Log

v1.3.13
  improved performance (approx. 3x) of single-threaded print
  exceptions in non-default modules reported like errors in script code
  fix: mysession.spy: session depends on pool, so switched import order
  fix: faulty session handlers thrown out on error
    - takes care of annoying NameError: 'pool' not found
  fix: sys.path always returned to original state, even on error
  globals accessible via python modules
    - applied patch contributed by: Niko Matsakis
  iterable objects allowed within 'for' tag
    - modified patch submitted by: Stefan Behnel
  spyce lambdas can return values
  updated spyceLock.py to eliminate Python FutureWarning for large constants
  added include.spyceStr(), idea from Santtu Pajukanta
  fix: error module performs response.clearFilters
    - thanks to Colin Gillespie for reporting this
  turning on spyce.DEBUG_ERROR will also display when modules start/finish

v1.3.12
  added fix to prevent reparsing of POST stream on 
    internal redirect  (modified Conan Albrecht's contribution)
  documentation updates
  fix: parsing totally empty files threw exception
  user request: iterate over request object
  modified semantics of active tags
    - singleton tags now behave like paired tags with empty bodies
    - defined a number of flags in spyceTag to reduce level of indentation 
      in generated python code where unnecessary: 
        conditional, loops, catches, mustend
    - see tag documentation
  updated core tag library accordingly
  fix: dump_handler with binary files truncating on Windows
  fix: files with DOS linebreaks
  fix: both <%. and <%@ can now begin a spyce directive
  directory listings of Spyce webserver look nicer, Apache-like
  added form active tag library
  added PATH_INFO functionality to spyceWWW

v1.3.11
  user request: daemon webserver mode
  fix: mod_python flush problem
  performance: rewrote tokenizer/parser
    - no longer using clusmy parser generator package
    - still pure python, compilation times between 2-6x faster
  user request: expose functionality to define spyceProcess function
    with arbitrary parameters, and pass in parameters... helps 
    Coil framework with Spyce integration
  fix: spyce webserver not performing path manipulations correctly 
    on Windows
  fix: spyce.mime file not copied for .rpm and Windows installers

v1.3.10
  Default development configuration changed to:
    Apache 2.0.40 and Python 2.2.x
    Release testing will be performed:
      both on Linux and Windows
      under CGI, FastCGI and mod_python
    Other versions of Apache and Python should continue to work, but
    will not be tested. I am depending on user feedback to catch any
    errant bugs under these older configurations.
  fix: spyceWWW properly deals with directory URLs that don't end in '/'
  fix: request.getpost1/postget1() now accept default values
  fix: memory cache checks file permission as well as modification time
  fix: makefile was including .pyc/.pyo files in tarball
  fix: spyce.vim syntax highlighting for spyce lambdas
  fix: error module should be loaded last to avoid stdout module being
    unloaded on error, thereby causing print statements to no longer go
    to the browser during error handling
  fix: error module setHandler used incorrect variable name, causing
    setHandler to fail
  updated spyce.vim syntax file for JSP/ASP like delimeters
    spyce.vim now included in vim distribution
  rpm generates spyceParserTable.py 
    (allowing for different versions of python)
  added 'no-store' and 'must-revalidate' to response.uncacheable()
  added pageerror configuration option to modify default page-level handler
  rpm now requires http >2.0 and python >2.2 installed

v1.3.9
  spyceWWW web server improved
    - configuration options integrated into spyce.conf
    - handler mechanism created
    - defined spyce and dump handlers
    - reads Apache format mime-type definition files
    - .spy files ==> spyce handler; rest ==> dump handler
    - can display directory listings
    - configuration options added accordingly
    - corresponding documentation changed
  documentation restructured to explain common configuration file 
    options in the runtime section
  fix: docs/examples/*.gif added to rpm and windows installer
  expanded section on how to get Spyce running under IIS via CGI

v1.3.8
  user request:
    modified request.get/post/get1/post1/env() to accept default values
    (note: will break code that provided caseInsensitive parameter by position)
    added request.getpost/getpost1/postget/postget1/default() methods
  bug fixes: python 1.5 backwards compatibility issues in the following
    online examples: gif.spy, myPortal.spy, mysession.spy

v1.3.7
  support for ASP-style delimeters -- <% %>
  use of Bastion eliminated, due to Python deprecation

v1.3.6
  info.spy example updated to deal with implicitly loaded taglib module
  minor documentation fix for doc-mod_include
  quotes for the PythonPath in httpd.conf

v1.3.5
  taglib and spylambda modules loaded implicitly only when needed
    (i.e. when tags or spyce lambdas are actually used in a given file)
  make install made more portable; removed install -D switch
  EOFError now handled for file-based spyce caching (strange Windows bug?)
  improvements to automaton module

v1.3.4
  doc updates - session module
  minor mod_python bug - filename attribute used over environment
  fix - windows installer unable to find python executable in some cases

v1.3.3
  examples/info.spy added
  keep track of spyce entry point, added to spyce header
  fix - CGI fails (only on Apache2.0!) with GET info due v1.3.2 changes
  fix - typo in core:if tag

v1.3.2
  mod_python 3.0.1 compatibility
  - switched to sre module, despite stack limits, because
    pre module conflicts with pcre shared object that apache uses
    (actually, just fails on some complicate reg.exps!)
    This implies that very, very long spyce files might fail, until
    sre module implements a state-machine-based reg.exp engine.
  - apacheRequest.connection.child_num mysteriously removed,
    therefore using os.getpid() in spyceModpyRequest.getServerID()
  spyceApache.conf tweaked (should be more compatible)
  installHelper.py converts backslash to forward slash 
    for httpd.conf on Windows
  switched from pre to sre module in spyceCompile.py
    - reason: Apache 2.0.x uses different pcre library from Python
        causing failure under mod_python
    - pre was used over the default (sre) because sre implementation is 
        stack-based and encountered overruns... Oh, well! Don't write 
        Spyce files that blow the stack until sre is fixed.

v1.3.1
  fix - wrapped thread-unsafe yacc-like package with lock
  renamed util module to spyceUtil.py
    - conflict with python1.5 site-package
  renamed cache.py, lock.py (just in case)
  make website update script faster

v1.3.0
  active tags introduced
    - see: http://spyce.sourceforge.net/doc-tag.html
    - [[.taglib]] directive added
    - taglib spyce module added 
    - compiler changes to deal with active tags
    - tagging infrastructure (spyceTag, spyceTagPlus, spyceTagLibrary)
        - see: spyceTags.py
        - user-defined active tag libraries possible
        - see: http://spyce.sourceforge.net/doc-tag_new.html
    - core active tag library
        see: tags/core.py
        see: http://spyce.sourceforge.net/doc-tag_core.html
    - tag libraries loaded from same path as modules
    - compiler syntax checking improved
      - check for unbalanced parens
      - check for unbalanced active tags
      - extensible syntax checking for active tags

v1.2.10
  bugfix - typo in spyceWWW caused threading mode startup failure

v1.2.9
  stdout.push() can now accept no file argument
  stdout.pop() now returns captured output
  stdout.capture() added
    see: examples/stdout.spy and stdout module docs
  session_user session handler added in session module
    see: examples/mysession.spy and session module docs
  spylambda.define() can now memoize
    see: http://spyce.sourceforge.net/doc-mod_lambda.html
  memoized spyce lambda syntax: [[spy! ...: ...]]
    see: http://spyce.sourceforge.net/doc-lang_lambda.html
  slight modification to spyce.vim syntax file
  response.addHeader() now support replacement
  response.timestamp(), expire(), expireRel(), lastModified()
      and uncacheable() methods added
    see: http://spyce.sourceforge.net/doc-mod_response.html
  performance!

v1.2.8
  links page added
  spyce VIM syntax file updated; deals with spyce lambdas
  include module improvements
  - 'vars' field added
  - included file can return value
  - documentation updated, specifically regarding use of 'context'

v1.2.7
  internal restructuring continues
  - separated spyce exceptions
  - separated spyce configuration
  - expanded spyce API and spyceServer
  - spyce.spyceDone now imported as spyceDone
  simplified spyceModule
  - renamed wrapper field, to _api
  - old spyceModule available as spyceModulePlus
  - all standard modules updated
  fixed - syntax errors were not reported properly
  file-based spyce caching, with config option
  performance improvements

v1.2.6
  single and multi-page documentation
  minor fixes:
  - NoCloseOut.flush() added
  - BufferedOutput.flush() flushes sub-stream
  - template module pointed at new location of cache code

v1.2.5
  spyceAPI defined: module access to spyceWrapper object restricted
  - see: http://spyce.sourceforge.net/doc-mod_new.html
  - (in general, will be moving towards restricted execution space)
  toc module improved; add level(), l1()...l9() methods
  server-level debug option added to config file
  - see: http://spyce.sourceforge.net/doc-conf_common_debug.html
  - debug Spyce module deprecated
  engine now supports recursive requests (include spyce from itself)
  sys.stdout (and therefore print statements) made thread-safe
  spyce engine supports concurrent requests
  server-level concurrency option added to config file
  - see: http://spyce.sourceforge.net/doc-conf_common_concurrency.html
  - spyce webserver operates in single, forking and threading modes
  server-level Spyce module caching
  - replaces Spyce-level module caching
  - caching-related code separated from wrapper
  code compilation seperated from wrapper (spyce.spyceCode)
  autodetect when PYTHONOPTIMIZE causes lexer/parser failure
  minor fixes and performance tweaks

v1.2.4
  fix - new PLY parser uses reflection at runtime to read 
        documentation strings containing grammar, thus you
        should not run Python in optimize mode, thus
        mod_python option in spyceApache.conf changed.
  fix - python 1.5 compatible .spy files for docs

v1.2.3
  fix - code for new tokenizer/parser made python 1.5.2 compatible

v1.2.2
  fix - PATH_INFO via CGI
  fix - magic (#!) on first line treated as comment

v1.2.1
  complete rewrite of spyce tokenizer and parser
    - using PLY, table-driven
  added spyce lambdas to language

v1.2.0
  contrib section added
  support for SPYCE_PATH environment variable
  lots of documentation fixes
  decided spyce was mature enough for 1.2.0

v1.1.46
  feature request: improved examples page on website

v1.1.45
  site and documentation revamp
  refactored the spyceModule class (see spyceModule.py)
    altered all standard modules to conform to new internal design
  new table-of-contents (toc) module (see docs)
  improved stdout module (see docs)
    added push() and pop() methods
    now loaded implicitly
  exception tracebacks in chunks identify specific error lines
  file globbing added to -O command-line option

v1.1.44
  module directive deprecated
    replaced with import tag
  import tag accepts args attribute
    calls module init() method at location of directive
    init() methods added to modules: session, compress
    see: http://spyce.sourceforge.net/doc_lang_directive.html
         http://spyce.sourceforge.net/doc_mod.html
         http://spyce.sourceforge.net/doc_mod_compress.html
         http://spyce.sourceforge.net/doc_mod_session.html
         http://spyce.sourceforge.net/doc_mod_new.html
  bugfix - modules finalized on redirect

v1.1.43
  bugfix - included files not inheriting modules properly
  bugfix - transform module inside included file

v1.1.42
  renamed spyce.conf to spyceApache.conf
  renamed spyceApache to spyceModpy
  renamed run_spyceApache to run_spyceModpy (affect spyceApache.conf)
  added server-level configuration file functionality
    server module search path
    modules to load at startup
    server-level error handler
    global server variables
    see: docs/doc_conf_common.html
  added response.isCancelled() function
    see: docs/doc_mod_response.html
  bugfix - early client disconnect caused problems under mod_python

v1.1.41
  extended HTTP response constants to conform to spec
  extended HTML entity encoded characters to conform to spec
  modified internal buffering semantics to allow eliminiation of special 
    case code for specific HTTP return codes (redirects) in the common path
  performance improvements
  convenience functions transform.html_encode() and url_encode() added
  error module added: handles errors that occur during spyce processing
  bugfix - HTTP return codes propagated correctly under mod_python

v1.1.40
  bugfix - spyce syntax error propagated properly
  response headers cleared on an internal redirect
  case insensitive request.get,post,get1,post1,file

v1.1.39
  modified how filter module injects itself into output stream
  added response.addFilter() to allow piped functionality
    on the output stream, modules can insert write, writeStatic,
    writeExpr, flush and clear handlers
  added compress module for dynamic compression functionality
  compress module documentation
  renamed filter module to transform (name conflict with Python builtin)
  sys.path forced to be absolute before changing directory in CGI mode
  bugfix - spyce path trimmed to just filename when directory changed for 
    CGI processing
  bugfix - spyce web server closes sockets

v1.1.38
  spyce can now run as a (proxy) web server
    spyce -l [-p port] <server root>

v1.1.37
  spyceDone exception to stop spyce processing
    raise spyceDone, see gif.spy, fileupload.spy examples
  response.close() deprecated
    not needed with spyceDone functionality
  cPickle used in session module
    improved session serialization performance

v1.1.36
  redirect.externalRefresh now has url= in string
  internal redirect fixed
  bug fix - consecutive compact line removal now possible
  examples added: hello2.spy, form.spy
  handle ISINDEX CGI queries that have extra command-line parameters
  Status CGI header used for spyce redirect return codes

v1.1.35
  bug - fixed cgi chdir in case of local directory
  request - invoke spyce engine programmatically with spyce string
  source tarball does not contain extra CVS junk

v1.1.34
  fixed apache config bug in windows installer

v1.1.33
  appended current Spyce file's directory to sys.path

v1.1.32
  minor documentation tweaks
  names attribute added to [[.module ]] tag
  request.__getitem__() added
  chdir in cgi mode

v1.1.31
  windows installer improved: apache configuration and restart
  fixed - handling of initial spaces in multi-line strings in python chunks

v1.1.30
  red page marker in docs
  created undefined windows lock variables

v1.1.29
  documentation split up
  rpm is now noarch

v1.1.28
  include.dump() now has binary option
  stdout changed to binary mode on windows for cgi purposes
  fixed session_dir handler bug on windows
  
v1.1.27
  fcgi implemented on windows too
  windows installer

v1.1.26
  fixed - nasty bug with the new module behaviour
  small improvements to documentation and examples
  improved request.uri() function

v1.1.25
  fixed - fcgi module broke on windows

v1.1.24
  line compaction improved
  module behaviour on include.spyce() defined

v1.1.23
  lots of changes so that: it works on Python 1.5.2 now too!
  file-based session handler now uses pid, and file locks
  live examples on sourceforge

v1.1.22
  fixed Python v2.1.1-related bugs.
  improved installation process and documentation
  rpm more likely to succeed - uses fcgi or drops back to cgi
  no longer mod_python based by default

v1.1.21 (faulty release)
  stochastic session clean up; no more threading dependency
  documentation: better installation notes
  peep-hole optimizer

v1.1.20 (faulty release)
  created explicit (swappable) cache infrastructure
  BUG ** Spyce also works on Python v2.1
  request - request.post(),post1() works in includes
  documentation: cheetah install, ...

v1.1.19
  filter module

v1.1.18
  fcgi support added
  X-Spyce header added
  documentation: how to write new modules

v1.1.17
  feature request - compaction algorithm improved

v1.1.16
  generalised session.setHandler (session handler selection mechanism)
  gdbm, bsd db session handlers added

v1.1.15
  minor makefile and rpm script changes
  handling of multi-line strings in python code
  response.flush() added

v1.1.14
  wrappers to check python version

v1.1.13
  added new language construct: "Python chunks"

v1.1.12
  stdout module redirects stdout to response object
  added writeln() to response module

v1.1.11
  fixed lots of CGI bugs:
    reported bug - headers not sent
    session module thread prevented script death
    added spyce.ONE_SHOT variable
    cookie module fixed
    gif.spy example fixed
    external redirect fixed

v1.1.10
  performance:
    implemented semantic cache for spyce compilation
    templating module performs caching
  lots of commenting

v1.1.9
  templating module (cheetah integration)
  documentation

v1.1.8
  automaton module
  documentation

v1.1.7
  associative array access to session and cookie information
  added pool module
  documentation
  comments emitted as tokens
  syntax highlighting function: include.spycecode
  documentation

v1.1.6
  dynamically loading modules

v1.1.5
  redirect module added

v1.1.4
  response.unbuffer()

v1.1.3
  support for file upload
  request.get1(),post1()

v1.1.2
  more reliable exception location reporting

v1.1.1
  static includes
  module search path

v1.1.0
  Implemented modules -- major rewrite.
  Changed includes, sessions, cookies, ... everything into modules
  Changed the generated "stub", though this is mostly under-the-covers
  Rewrote most of the documentation

v1.0.5
  CGI support
  Expanded install docs

v1.0.4
  Many doc updates
  Autosession support
  changed directives tags to use html-like attributes

v1.0.3
  Automatic session cleanup
  Updated pilpel image

v1.0.2
  Handle 403 - Forbidden
  Handle 404 - Not Found

v1.0.1
  Tracking original spyce code locations in generated code
  Reporting runtime exceptions in original spyce code
  Reporting syntax (compile) exceptions in original spyce code

v1.0 - Initial release
  Documentation
  Added [[.nocompact]] and [[.compact]]
  Allowed escaped \[[ and \]] in HTML
  Added session support, with on-disk implementation
  Realised and implemented command-line
  Added cookies
  Added http header calls
  Added get and post support
  Created request and response objects
  Added [[.include]]
  Added [[.funcion]] and [[./function]]
  Create in-memory spyce cache
  Wrote a token-based Brace Converter
  Added [[ ]] and [[= ]]
  Created Spyce compiler shell
  Wrote initial mod_python "hello world" handler
  Read up on mod_python
  Looked at PyServ
  Attempted to engineer a WebWare-based solution

