===================
 What's new in 1.5
===================

.. _whatsnew:


What's new in 1.5 rc3
=====================

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

1. PyBlosxom shows an error page if it crashes rather than forcing
   you to go figure out what happened by finding the web server logs.
   This should make configuring and debugging much easier.

2. Bunch of new plugins.

3. Bunch of fixes to the comments plugin, tags and pycalendar plugins.

   Tags plugin gains tags cloud functionality.

   Comments plugin gains comment_disable_after_x_days feature.

   If you're using them, update to the latest versions.

4. Bunch of fixes to the documentation.  If you see errors or things
   that are unclear, let us know.

   The documentation for the comments plugin still needs to be overhauled.

5. Bunch of other bug fixes.

6. Bunch of new plugins: magicword, pages, rst, check_nonhuman, and 
   check_blacklist.


What's new in 1.5 rc2
=====================

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

1. The static renderer has a new command line.

2. New entrytitle, acronym and paginate plugins.

3. Fixed problems in yearmonths plugin.  Please update to the latest
   version.


Pertinent to developers:
------------------------

1. New sortlist callback


What's new in 1.5 rc1
=====================

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

1. Renamed ``pyblcmd`` to ``pyblosxom-cmd``.

2. PyBlosxom now requires Python 2.3.  We've removed the _logging
   module that provided logging facilities to pre-Python 2.3 versions.

3. You can now install PyBlosxom on your system with pip or
   easy_install.

4. The ``pyblosxom.cgi`` file has changed significantly---if you're
   using it you should grab the new one that comes with this
   distribution.  We've gutted the ``pyblosxom.cgi`` script and turned
   it into a stub.  This will reduce the need for you to update your
   ``pyblosxom.cgi`` in the future when you upgrade PyBlosxom.

5. pyblosxom-cmd now has an option to create the blog directory
   structure and skeleton files for you.  This makes it much faster to
   get a new blog up and running.  Syntax is this::

      pyblosxom-cmd create <path>

   Some examples::

      pyblosxom-cmd create .
      pyblosxom-cmd create /home/joe/blog

6. Template variable syntax ``$id_escaped`` and ``$id_urlencoded`` has
   been removed.  Use ``$escape(id)`` and ``$urlencode(id)`` instead.

7. Switched to using Python's optparse module instead of our
   home-brewed one.  There are some changes in command line syntax.
   Do ``pyblosxom-cmd --help`` for command line help.

8. Changed around ``INSTALL``, ``README`` and added ``UPGRADE``.

9. Removed ``blog_title_with_path`` variable.  If you were using this
   variable in your templates, replace it.  i.e. instead of::

       $blog_title_with_path

   do::

       $blog_title : $pi_bl

10. Re-worked PyBlosxom so that it uses the same encoding throughout.
    This means you need to use the same encoding for all your data
    files and that encoding has to match the ``blog_encoding``
    property in ``config.py``.  This defaults to UTF-8.

11. Re-worked documentation to use Sphinx.  The end result is that the
    "source" for the docs is in ``docs/source/``, there's an HTML
    version that's built by Sphinx in ``docs/build/html/``, and it's a
    lot easier to read and use now.  Thank you to the Sphinx team!

12. Reworked the command line for static rendering.  It now works like
    this::

        pyblosxom-cmd staticrender \
                      [--config <path/to/config/file>] \
                      [--incremenal]

    If the ``config.py`` file is in your ``PYTHONPATH``, then you can
    skip the ``--config <path/to/config/file>`` stuff.

13. Removed portalocker code.  This will cause any plugins using the
    locking code to fail.  The only one I saw like this was the
    logstats plugin which had a lot of other problems.

14. Added a ``--silent`` flag to pyblcmd so that it quells all stdout.
    This is useful for cron jobs.

15. Added ``truncate_date`` config variable.  When set to True, it
    causes date-based archives to be truncated to ``num_entries`` entries.
    Defaults to False.

    Example::

        py["truncate_date"] = True

16. Added ``truncate_category`` config variable.  When set to True, it
    causes category-based archives to be truncated to ``num_entries``
    entries.  Defaults to True.

    Example::

        py["truncate_category"] = True

17. Added ``truncate_frontpage`` config variable.  When set to True, it
    causes the front page ``num_entries`` entries.  Defaults to True.

    Example::

        py["truncate_frontpage"] = True

18. Plugins are included in the PyBlosxom source tarball again.

19. Templates in a flavourdir directory no longer require the flavour
    as the file extension.  e.g. This will work fine::
        
        blog/
         |- flavourdir/
             |- html.flav/
                 |- content_type
                 |- head
                 |- story
                 |- ...

20. We moved the main PyBlosxom site to
    http://pyblosxom.bluesock.org/ .  There's a "powered by
    pyblosxom" image at
    http://pyblosxom.bluesock.org/images/pb_pyblosxom.gif

    You should adjust your templates accordingly.

21. The following plugins have been added to the pyblosxom release
    tarball:

    * ``archives/``

      * pyarchives
      * yeararchives (was wbgarchives)

    * ``categories/``

      * pycategories

    * ``comments/plugins/``

      * akismetcomments
      * comments
      * no_old_comments
      * trackback
      * xmlrpc_pingback

    * ``date/``

      * pycalendar
      * firstdaydiv
      * pyfilenamemtime
      * w3cdate

    * ``display/``

      * paginate (was wbgpager)
      * entrytitle

    * ``headers/``

      * conditionalhttp

    * ``tags/``

      * tags (was wbgtags)

    * ``text/``

      * acronyms

    If you have older versions of these plugins, better to switch to
    the new versions.


Pertinent to developers:
------------------------

1. ``Pyblosxom.tools.VariableDict`` is no more.

2. If you have template variables that end in ``_urlencoded`` and
   ``_escaped``, it's better to instead call
   ``tools.escape_text(...)`` and ``tools.urlencode_text(...)`` or use
   filter functions ``$escape(var)`` and ``$urlencode(var)``.

3. The blosxom renderer has undergone a bunch of fixes.  If you
   depended on functions that started with ``_``, then you'll probably
   need to rework your plugin.  These functions were not intended for
   outside use.

   Additionally, we fixed the bug where the renderer was adding the
   contents of the config and data dicts to each entry when it was
   rendered as a story.  Now the items in the entrylist are untouched
   during rendering.

4. Added a lot of tests and rewrote everything to ditch the nose
   requirement.  Tests can be run with::

      python setup.py test

5. Added a lot of documentation.

6. Removed the portalocker code so PyBlosxom no longer provides a way
   to lock/unlock text files.

7. Changed a lot of camel-case function/method names to PEP-8
   versions.  Camel case names are deprecated and will be removed in a
   future version:

   ``tools.py``:

   * Walk -> walk
   * getLogger -> get_logger
   * generateRandStr -> generate_rand_str

   ``pyblosxom/Pyblosxom.py``:

   * PyBlosxom: getRequest -> get_request
   * PyBlosxom: getResponse -> get_response
   * PyBlosxom: runCallback -> run_callback
   * PyBlosxom: runRenderOne -> run_render_one
   * PyBlosxom: runStaticRenderer removed
   * Request: setResponse -> set_response
   * Request: getResponse -> get_response
   * Request: getForm -> get_form
   * Request: getConfiguration -> get_configuration
   * Request: getHttp -> get_http
   * Request: getData -> get_data
   * Request: addHttp -> add_http
   * Request: addData -> add_data
   * Request: addConfiguration -> add_configuration
   * Response: setStatus -> set_status
   * Response: addHeader -> add_header
   * Response: getHeaders -> get_headers
   * Response: sendBody -> send_body
   * Response: sendHeaders -> send_headers

   ``pyblosxom/renderers/base.py``:

   * RendererBase: addHeader -> add_header
   * RendererBase: setContent -> set_content
   * RendererBase: needsContentType -> needs_content_type
   * RendererBase: showHeaders -> show_headers

   ``pyblosxom/renderers/blosxom.py``:

   * BlosxomRenderer: renderContent -> render_content
   * BlosxomRenderer: renderTemplate -> render_template
   * BlosxomRenderer: getContent -> get_content
   * BlosxomRenderer: outputTemplate -> output_template

8. Changed ``add_header`` in the ``Response`` class to take a key and
   value instead of a list of strings that it has to use * magic and
   then munge through.

9. Added a commandline callback for allowing plugins to add to the
    command line.

10. Added a truncatelist callback allowing plugins to augment the
    truncate (``num_entries``) behavior.

11. Added a sortlist callback allowing plugins to augment entrylist sorting
    behavior.

