D-Bus Python Bindings 0.81.0 (9 May 2007)
=========================================

The 'series of tubes' release
-----------------------------

This is a feature release with support for non-bus-daemon connections
and improved GObject integration.

Features:

* Bus has a superclass dbus.bus.BusConnection (a connection to a bus daemon,
  but without the shared-connection semantics or any deprecated API)
  for the benefit of those wanting to subclass bus daemon connections

* BusConnection has a superclass dbus.connection.Connection (a
  connection without a bus daemon) for use in peer-to-peer situations,
  or distributed pseudo-bus situations without a bus daemon such as
  Telepathy's Tubes API

* dbus.gobject_service.ExportedGObject is like dbus.service.Object, but
  is also a subclass of GObject (with the necessary metaclass magic to
  make this work). Until someone has verified that the GObject side of
  things works as expected too, I consider this API to be potentially
  subject to change!

* Connection and BusConnection have gained a number of useful methods,
  including watch_name_owner (track name owner changes asynchronously,
  avoiding race conditions), call_blocking and call_async (blocking and
  asynchronous method calls without going via a proxy - note that these
  are semi-low-level interfaces which don't do introspection), and
  list_names, list_activatable_names and get_name_owner which are
  simple wrappers for the corresponding org.freedesktop.DBus methods

* dbus.Interface (now also available at dbus.proxies.Interface)
  and dbus.proxies.ProxyObject now have some reasonably obvious properties.

Deprecations:

* All keyword arguments called named_service are deprecated in favour of an
  argument called bus_name (to be compatible with both older and newer
  dbus-python, you should pass these positional arguments).

* The bus keyword argument to dbus.proxies.ProxyObject is deprecated in
  favour of an argument called conn, because proxies will work on non-bus
  connections now (again, for maximum compatibility you should use a
  positional argument for this).

* No warning is raised for this, but I consider calling any remote method
  on a ProxyObject or Interface whose name is either alllowercase or
  lower_case_with_underscores to be deprecated, and reserve the right
  to add properties or methods of this form in future releases - use
  ProxyObject.get_dbus_method if you must call a remote method named in
  this way. Methods named following TheUsualDBusConvention or
  theJavaConvention are safe.

Bugfixes:

* Exceptions in signal handlers print a stack trace to stderr (this can
  be redirected elsewhere with Python's logging framework). Partially
  addresses fd.o #9980.

* The reserved local interface and object path are properly checked for.

* When you return a tuple that is not a Struct from a method with no
  out_signature, it's interpreted as multiple return values, not a
  single Struct (closes fd.o #10174).

* If send_with_reply() returns TRUE but with pending call NULL, dbus-python
  no longer crashes. This can happen when unexpectedly disconnected.

* Arguments are not examined for functions declared METH_NOARGS (this is
  unnecessary and can cause a crash).

Other notable changes:

* dbus-python uses the standard Python logging framework throughout.
  The first time a WARNING or ERROR is generated, it will configure the
  logging framework to output to stderr, unless you have already
  configured logging in your application.

* The tutorial now advocates the use of add_signal_receiver if all you
  want to do is listen for signals: this avoids undesired activation,
  e.g. of Listen or Rhythmbox (!). Addresses fd.o #10743, fd.o #10568.

D-Bus Python Bindings 0.80.2 (13 February 2007)
===============================================
- Fix numerous memory and reference leaks
- Only use -Werror if the user specifically asks for it
- Audit tp_dealloc callbacks to make sure they correctly preserve the
  exception state
- Relicense files solely owned by Collabora Ltd. more permissively (LGPL/AFL
  rather than GPL/AFL) - this includes the tutorial and all the C code

D-Bus Python Bindings 0.80.1 (24 January 2007)
==============================================
- The "oops" release
- Install dbus/_version.py, so dbus.__version__ exists again

D-Bus Python Bindings 0.80.0 (24 January 2007)
==============================================
- The "everything changes" release
- Rewrite dbus_bindings (Pyrex) as _dbus_bindings (C) - API changes!
- Define what's public API
- Move low-level but still public API to dbus.lowlevel
- Remove Variant class, add variant_level property on all D-Bus types
- Make signal matching keep working as expected when name ownership changes
- Use unambiguous D-Bus types when transferring from D-Bus to Python
- Follow well-defined rules when transferring from Python to D-Bus
- Add utf8_strings and byte_arrays options in various places, so a user
  can tweak the calling conventions to be more efficient
- Raise RuntimeError if user tries to use a connection with no main loop
  to do something that won't work without one
- Make asynchronous method calls actually asynchronous when made before
  introspection results come back
- Redo main loop machinery so we can add pure-Python main loops later without
  API breakage
- Allow construction of a dbus.service.Object if you don't have a BusName
  (or even a Bus)
- Port introspection XML parser from libxml2 (external package) to expat
  (included with Python)
- Port build system from distutils to autoconf/automake/libtool
- Install a header file for third-party main loop integration
- Make compatible with Python 2.5, including on 64-bit platforms
- Add docstrings throughout
- Add more tests and examples
- Add interoperability tests (which interoperate with Java)
- Add copyright notices!

D-Bus Python Bindings 0.71 (24 July 2006)
==============================================================
- Binary modules are now installed in the correct directory
- Distutils exports the dbus and dbus-glib cflags

D-Bus Python Bindings 0.70 (17 July 2006)
==============================================================
- First release of bindings split
- Move to a distutils build enviornment
- It is possible to now specify sender_keyword="foo", path_keyword="bar" when 
  adding a signal listener
