What's new in 1.2 (March 2005)
==============================

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

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.


