**************************
  What's New in PyAMF 0.6
**************************

PyAMF 0.6 represents the next step towards the holy grail that is 1.0. The focus
of this release has mainly been about speed and providing better support for
integrated frameworks (e.g. Django, SQLAlchemy, AppEngine). The C extensions
have been supercharged and now 90%+ of the encoding is done in C. This has given
some `massive gains`_ in both encoding and decoding.

.. contents::


Highlighted Features
====================

* The default AMF version has been switched from `AMF0` to `AMF3`.
* Introduced a new adapter for Elixir_, a thin wrapper around SQLAlchemy.
* Provide support for :doc:`property synonyms </architecture/attributecontrol>`.
* Support for lxml_.

Backward Incompatible API Changes
=================================

* Switched the client from :py:mod:`httplib` to :py:mod:`urllib2` to provide
  support for gzipped responses and proper HTTP proxying. See `#751`_.
* ``pyamf.util.IndexedMap`` has been removed. See `#732`_.
* ``__new__`` is used in favour of ``__init__``. See `#700`_.
* ``pyamf.ClientTypes`` served no purpose and was not compliant with the
  AMF0 specification. It has been removed. See `#651`_ for more information.
* ``exceptions`` attribute has been removed from `Context` objects and
  :class:`pyamf.util.IndexedCollection`. Any method that used to raise
  :class:`pyamf.ReferenceError` will now return ``None`` for speed.
* ``amf3.Encoder.write*`` methods no longer accept ``use_references``.
* ``amf*.Encoder.type_map`` has been been removed. Use ``pyamf.add_type``
  instead. Standard types (e.g. ``str``, ``unicode``) are now hardcoded.
* ``django.contrib.auth.models.User`` is now strongly typed, with the alias
  ``django.contrib.auth.models.User`` with the password and all messages
  excluded from the instance. In addition, the ``username`` is now set to
  readonly which means that a separate (read:deliberate) service method will
  be required to update this directly (or you can override these defaults)
* AMF0 Remoting errors will now produce the details property as a list,
  rather than a string.

Integration
===========

Django
------

* Empty relations are now encoded as ``None``, not :class:`pyamf.Undefined`.
* All ``model.Model`` fields are now encoded dynamically. See `#677`_.
* Django 1.2 supported, including the new CSRF middleware.

Google AppEngine
----------------
* All ``db.Model`` properties are now encoded dynamically. See `#677`_.

SQLAlchemy
----------

* All mapped properties are now encoded dynamically. See `#677`_.
* Tested with SQLAlchemy 0.6. See `#747`_.


.. _Elixir: http://www.elixir.ematia.de
.. _lxml: http://codespeak.net/lxml
.. _#732: http://dev.pyamf.org/ticket/732
.. _#700: http://dev.pyamf.org/ticket/700
.. _#651: http://dev.pyamf.org/ticket/651
.. _#677: http://dev.pyamf.org/ticket/677
.. _#747: http://dev.pyamf.org/ticket/747
.. _#751: http://dev.pyamf.org/ticket/751
.. _massive gains: http://blog.pyamf.org/2010/08/a-brief-history-of-speed
