Changes between 1.1 and 1.2
===========================

Pertinent to users:
-------------------

1. We added a "blog_email" item to config.py and changed "blog_author"
   to just the author's name.  Examples:

   py["blog_email"] = "joe@blah.com"
   py["blog_author"] = "Joe Man"

2. We no longer adjust blog_title from what you set in config.py.  Now
   we have a "blog_title_with_path" variable which is in the data dict
   which is the blog_title with the path information.  People who want
   the title of their blog to be the title and not include the path
   should use $blog_title.  Folks who want the old behavior where the
   path was appended to the title should use $blog_title_with_path .

3. We now support WSGI, mod_python, and Twisted in addition to CGI.

4. Upped our Python requirement to Python 2.2.  If you have an earlier
   version than that, you won't be able to use PyBlosxom 1.2.

5. Changed "defaultFlavour" to "default_flavour".  This property allows
   you to specify the flavour to use by default if the URI doesn't
   specify one.  It default to "html".

6. We moved the main PyBlosxom site to http://pyblosxom.sourceforge.net/ .
   There's a "powered by pyblosxom" image at:

      http://pyblosxom.sourceforge.net/images/pb_pyblosxom.gif

   You should adjust your templates accordingly.


Pertinent to developers and plugin developers:
----------------------------------------------

1. We now have a Request and a Response object.  See API documentation
   for more details.

2. Don't use os.environ directly--use the http dict.  For example, this
   is bad:

   path_info = os.environ["HTTP_PATHINFO"]

   This is what you should be doing:

   http = request.getHttp()
   path_info = http["HTTP_PATHINFO"]

   If you use os.environ directly, it's likely your plugin won't work
   with non-CGI installations of PyBlosxom.

3. We added __iter__, read, readline, readlines, seek, and tell
   to the Request object.  All of them access the input stream.
   You should not use sys.stdin directly.
   
   Usage:
   data = request.read()
   data_part = request.read(1024)
   one_line = request.readline()
   lines = request.readlines()

4. The output stream should be accessed through the PyBlosxom Response
   object.  The following methods are implemented in the Response
   object: __iter__, close, flush, read, readline, readlines,
   seek, tell, write, writelines, setStatus, and addHeader.
   You should not use sys.stdout directly. See the
   API for more details.

   Usage:
   response = request.getResponse()
   response.addHeader('Status', '200 Ok')
   response.addHeader('Content-type', 'text/html')
   response.write("Hello World")
   response.writelines(["list", "of", "data"])

5. Instead of doing:

   form = request.getHttp()["form"]

   you can now do:

   form = request.getForm()

6. Plugins should not be importing the config module and looking at the
   py dict directly.  You should instead use the Request 
   getConfiguration() method to get the config py dict.


Changes between 1.0 and 1.1
===========================

Pertinent to users:
-------------------

1. We no longer include contributed plugins and flavours.  To find
   plugins and flavours, go to the PyBlosxom registry located at:

   http://pyblosxom.sourceforge.net/

2. We changed how num_entries is handled internally.  If num_entries
   is set to 0, the blosxom default file handler will display all
   the entries.  If num_entries is set to a positive number, then
   the blosxom default file handler will display at most that many
   entries.


Pertinent to developers and plugin developers:
----------------------------------------------

1. Plugins that implement cb_filelist are now in charge of adjusting
   the number of entries to be displayed based on the num_entries
   configuration variable.  This is no longer done in the renderer.

2. We added HTTP_COOKIE to the list of things that get added to the http
   dict in the Request object.


Changes between 0.9 and 1.0
===========================

Pertinent to users:
-------------------

1. We ditched "blosxom_custom_flavours"--you can remove it from your 
   config.py file.

2. We added static rendering--see the howto in the PyBlosxom manual.

3. Rewrote comments to use the new handler system.  You should replace
   the comments, pingbacks, trackbacks, and other comments-oriented
   plugins with the new versions from contrib/plugins/comments/

4. pingbacks plugin is now xmlrpc_pingbacks.py .

5. Adjusted the default templates for HTML and RSS.  Removed all other
   default templates.  Look at the flavour_examples directory for
   flavour examples.

6. Added an "ignore_properties" property to config.py which allows you to
   specify which directories in your datadir should be ignored.  For
   example:

     py["ignore_directories"] = ["CVS", ".svn"]

7. Added a template variable "pyblosxom_version" which points to
   pyblosxom/Pyblosxom/pyblosxom.VERSION_DATE .

8. Fixed some code in pyarchives so it worked with Python 2.1.
   Thanks to Wilhelm.

9. Fixed template retrieving code so that you can specify templates
   to use for a given category or parent categories.  Thanks to Nathan 
   for fixing this.

10. We added a "logdir" property to config.  PyBlosxom (and plugins) will
    create logs in this directory so the directory has to have write
    access for whatever user the webserver uses to run the script.


Pertinent to developers and plugin developers:
----------------------------------------------

1. Rewrote the startup for PyBlosxom request handling--we ditched
   the common_start function and picked up a common initialize
   function.

2. Unhardcoded where contrib and web files go when doing a multi-user
   installation using "python setup.py install".

3. Adjusted the comments plugin so that if a given entry has a "nocomments"
   property, then it won't get comments.

4. Moved the Request object into pyblosxom/Pyblosxom/pyblosxom.py .

5. Fixed variable parsing so that if the variable value is a function that
   takes arguments, we pass the request in as the first argument.

6. Added VERSION, VERSION_DATE, and VERSION_SPLIT.  This allows you to
   verify that your plugin works with the version of PyBlosxom the user
   is using.
