Breaking changes ================ Until a stable v1 release, consult this list for any changes when upgrading to a newer commit. 03/06/2023, 264f569 ------------------- [Admins] Support for version 2.x of the _emoji_ dependency (used by a couple of the built-in plugs to handle conversion between ``:+1:`` emoji short codes and 👍 Unicode) has been added, which means increasing the minimum supported version to 1.6.2 (1.2.1 for :ref:`admins/hooks:Sync`). Make sure to freshen up your dependencies when updating to IMMP 0.12.1 -- installing with extras (i.e. ``pip install immp[sync]==0.12.1``) will do this for you. 03/04/2022, f909492 ------------------- [Admins] Output of the ``who`` command from :ref:`admins/hooks:Identity lookup` has been improved to show per-identity links and roles. [Developers] :attr:`.IdentityProvider.provider_name` is a new field that should be provided by any hooks implementing this interface. It works the same as :attr:`.Plug.network_name`, and is used by :class:`.WhoIsHook` when attributing identity information to your provider. 03/06/2021, db11570 ------------------- [Admins] Support for Socket Mode has been added to the :ref:`Slack ` plug. If you're using a classic app or legacy integration and wanting to upgrade, you can now use a modern app token along with a corresponding bot token. A `Slack App manifest `_ is also available. As part of this, auto-detecting a workspace's real name display setting is no longer possible, so a plug config option has been added in its place. 16/04/2021, 5e9b45a ------------------- [Developers] :class:`.HTTPOpenable` is now a mixin that takes no initialisation arguments. When used in conjunction with :class:`.Plug` or :class:`.Hook`, the base hook or plug class should appear before the mixin (previously it would expect to appear after). 27/12/2020, 5a34d40 ------------------- [Admins] :class:`immp.LocalFilter <.LocalFilter>`, :class:`.ShellHook` and :class:`.DatabaseHook` have been deprecated. Log filtering can be done using the ``logging.loggers`` config subsection, whilst both the shell and database hooks have async variants that should be used instead. 25/12/2020, dce335a ------------------- [Developers] :meth:`Plug.send` should now return :class:`Receipt` instances rather than just the message IDs. All built-in plugs have been updated, but you'll need to update any custom plugs in order to do the same. 20/09/2020, 5fc87cd ------------------- [Admins] A new database hook has been introduced, providing much better performance for connecting to databases over a network. All built-in hooks have been updated to use it -- if you're using any of :ref:`admins/hooks:Local identity`, :ref:`admins/hooks:Notes`, :ref:`admins/hooks:Subscriptions` or :ref:`admins/hooks:Sync`, you need to add or replace your :ref:`admins/hooks:Database` with the asynchronous variant. If you're using SQLite for your database, note also that the database URL protocol has changed: instead of ``sqlite:///`` or ``apsw:///`` (with three or more slashes), use ``sqlite://`` instead (two slashes, followed by a relative path, or an absolute path starting with a third slash). [Developers] Please migrate your database access to use the :class:`.AsyncDatabaseHook` -- the synchronous :class:`.DatabaseHook` variant will be removed in a future release. 07/09/2020, c3f5dc5 ------------------- [Admins] A `breaking change `_ was discovered in the Hangouts APIs, fixed upstream. This commit pins hangups to a working version. 17/08/2020, 8e966df ------------------- [Developers] Each config ``dict`` of a hook or plug is now observed for changes, and hooks are now dispatched an :meth:`.Hook.on_config_change` event to handle state changes (:class:`.RunnerHook` will now save config files on change). 14/08/2020, b694b34 ------------------- [Admins] The :ref:`admins/plugs:IRC` plug has been significantly rewritten, with a more stable request/response handler and IRC puppeting support. 23/02/2020, d075ba5 ------------------- [Admins] The Docker image has been refactored to use a data volume. Usage instructions are now documented under :ref:`admins/setup:Using Docker`. 12/08/2019, 0c2d70c ------------------- [Admins] :class:`__main__.LocalFilter`, used to restrict logging to internal messages whilst excluding third-party libraries, has moved to :class:`immp.LocalFilter <.LocalFilter>`. [Developers] Most of the runner code has moved from ``__main__`` into :mod:`immp.hook.runner`. 11/08/2019, 7f30a24 ------------------- [Admins] The preferred way to launch IMMP is now via the independent command ``immp``, rather than running as a module. 28/07/2019, 643d601 ------------------- [Developers] Schema validation now comes built-in for groups, plugs and hooks. Set the :attr:`schema <.Configurable.schema>` attribute on your class to automatically validate input config against your schema. See :class:`.Schema` for the available API. 08/07/2019, 519a91f ------------------- [Developers] Most built-in classes now make use of :data:`__slots__ ` to restrict the attributes available. This should help with a lower memory footprint when a large number of messages are being processed. 05/06/2019, 2e711bc ------------------- [Developers] Messages sent directly to a :class:`.SyncPlug` are now correctly yielded back out of the channel. 02/06/2019, 3957722 ------------------- [Developers] As part of new support for static routes from the :class:`.WebHook`, the order of arguments to :meth:`.WebHook.context` has changed -- route prefix first, and an additional path argument to locate static files on disk. 31/05/2019, d55e75e ------------------- [Developers] :class:`.ConfigProperty` now takes the class spec first, and config key is optional (derived from the attribute name if not provided). 23/05/2019, 0be494c ------------------- [Developers] The metadata around sent messages (ID, channel, timestamp etc.) is now handled by the :class:`.Receipt` class, where both this and :class:`.Message` are now subclasses of :class:`.SentMessage`. This replaces :attr:`SentMessage.empty`. Assorted hook logic has been updated to accept :class:`.Receipt` instances. 21/05/2019, f74efe1 ------------------- [Admins] The :class:`.AsyncShellHook` now defaults to not providing a message buffer. The ``buffer`` config value may be ``None`` (no buffer), ``0`` (unlimited buffer), or an integer upper bound. 14/05/2019, 677ee62 ------------------- [Developers] Timestamps on messages are now timezone-aware across all built-in plugs, typically in UTC. Hooks working in local time should convert message timestamps to naïve representations first. 12/05/2019, 32b0541 ------------------- [Admins] :class:`IdentityHook` was moved to :class:`.LocalIdentityHook`, as part of a larger move to create an identity framework. The new :class:`.WhoIsHook` provides a **who** command to replace **id-show** but across any identity providers. [Developers] Other hooks may obtain identity information from any hook implementing :class:`.IdentityProvider`.