Skip to content
This repository has been archived by the owner on Jan 14, 2024. It is now read-only.

Latest commit

 

History

History
1432 lines (1045 loc) · 60 KB

changelog.rst

File metadata and controls

1432 lines (1045 loc) · 60 KB

Changelog

Version 0.10

Version 0.9

New XEP implementations

Most of these have been contributed by Sebastian Riese. Thanks for that!

New major features

  • :mod:`aioxmpp.im` is a new subpackage which provides Instant Messaging services. It is still highly experimental, and feedback on the API is highly appreciated.

    The idea is to provide a unified interface to the different instant messaging transports, such as direct one-on-one chat, Multi-User Chats (:xep:`45`) and the soon-to-come Mediated Information Exchange (:xep:`369`).

    Applications shall be able to use the interface without knowing the details of the transport; features such as message delivery receipts and message carbons shall work transparently.

    In the course of this (see below), some breaking changes had to be made, but we think that the gain is worth the damage.

    For an introduction in those features, read the documentation of the :mod:`aioxmpp.im` subpackage. The examples using IM features have been updated accordingly.

  • The distribution of received presence and message stanzas has been reworked (to help with :mod:`aioxmpp.im`, which needs a very different model of message distribution than the traditional "register a handler for a sender and type"). The classic registration functions have been deprecated (see below) and were replaced by simple dispatcher services provided in :mod:`aioxmpp.dispatcher`.

New examples

  • carbons_sniffer.py: Show a log of all messages received and sent by other resources of the same account.
  • set_avatar.py: Change the avatar of the account.
  • retrieve_avatar.py: Retrieve the avatar of a member of the XMPP network (sufficient permissions required, normally a roster subscription is enough).

Breaking changes

Minor features and bug fixes

Deprecations

Version 0.9.1

Version 0.8

New XEP implementations

New major features

New examples

  • adhoc_browser: A graphical tool to browse and execute Ad-Hoc Commands. Requires PyQt5. Run make in the examples directory and start with python3 -m adhoc_browser.
  • entity_items.py, entity_info.py: Show service discovery info and items for arbitrary JIDs.
  • list_adhoc_commands.py: List the Ad-Hoc commands offered by an entity.

Breaking changes

Changes to the connection procedure:

Changes in :class:`aioxmpp.Client` (formerly :class:`aioxmpp.AbstractClient`, see in the deprecations below for the name change)

  • The number of connection attempts made before the first connection is successful is now bounded, configurable through the new parameter max_initial_attempts. The default is at 4, which gives (together with the default exponential backoff parameters) a minimum time of attempted connections of about 5 seconds.
  • :meth:`~.Client.on_stream_suspended` was added (this is not a breaking change, but belongs to the :class:`aioxmpp.Client` changes discussed here).
  • :meth:`~.Client.on_stream_destroyed` got a new argument reason which gives the exception which caused the stream to be destroyed.

Other breaking changes:

The following changes are not severe, but may still break code depending on how it is used:

  • :class:`aioxmpp.disco.Service` was split into :class:`aioxmpp.DiscoClient` and :class:`aioxmpp.DiscoServer`.

    If you need to be compatible with old versions, use code like this:

    try:
        from aioxmpp import DiscoClient, DiscoServer
    except ImportError:
        import aioxmpp.disco
        DiscoClient = aioxmpp.disco.Service
        DiscoServer = aioxmpp.disco.Service
    
  • Type coercion in XSO descriptors now behaves differently. Previously, :data:`None` was hard-coded to be exempt from type coercion; this allowed any :class:`~.xso.Text`, :class:`~.xso.ChildText`, :class:`~.xso.Attr` and other scalar descriptor to be assigned :data:`None`, unless a validator which explicitly forbade that was installed. The use case was to have a default, absence-indicating value which is outside the valid value range of the type_.

    This is now handled by exempting the default of the descriptor from type coercion and thus allowing assignment of that default by default. The change thus only affects descriptors which have a default other than :data:`None` (which includes an unset default).

Minor features and bug fixes

Deprecations

Version 0.7

Version 0.7.2

  • Fix resource leak which would emit:

    task: <Task pending coro=<OrderedStateMachine.wait_for() running at /home/horazont/Projects/python/aioxmpp/aioxmpp/statemachine.py:170> wait_for=<Future pending cb=[Task._wakeup()]> cb=[XMLStream._stream_starts_closing()]>
    
  • Improve compatibility of :mod:`aioxmpp.muc` with Prosody 0.9 and below, which misses sending the 110 status code on some presences.

  • Handle inbound message stanzas with empty from attribute. Those are legal as per RFC 6120, but were not handled properly.

Version 0.6

Version 0.6.1

Version 0.5

Version 0.4

Version 0.3