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 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 Identity lookup has been improved to show per-identity links and roles.

[Developers] IdentityProvider.provider_name is a new field that should be provided by any hooks implementing this interface. It works the same as Plug.network_name, and is used by WhoIsHook when attributing identity information to your provider.

03/06/2021, db11570#

[Admins] Support for Socket Mode has been added to the 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] HTTPOpenable is now a mixin that takes no initialisation arguments. When used in conjunction with Plug or Hook, the base hook or plug class should appear before the mixin (previously it would expect to appear after).

27/12/2020, 5a34d40#

[Admins] immp.LocalFilter, ShellHook and 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] Plug.send() should now return 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 Local identity, Notes, Subscriptions or Sync, you need to add or replace your 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 AsyncDatabaseHook – the synchronous 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 Hook.on_config_change() event to handle state changes (RunnerHook will now save config files on change).

14/08/2020, b694b34#

[Admins] The 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 Using Docker.

12/08/2019, 0c2d70c#

[Admins] __main__.LocalFilter, used to restrict logging to internal messages whilst excluding third-party libraries, has moved to immp.LocalFilter.

[Developers] Most of the runner code has moved from __main__ into 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 schema attribute on your class to automatically validate input config against your schema. See Schema for the available API.

08/07/2019, 519a91f#

[Developers] Most built-in classes now make use of __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 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 WebHook, the order of arguments to WebHook.context() has changed – route prefix first, and an additional path argument to locate static files on disk.

31/05/2019, d55e75e#

[Developers] 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 Receipt class, where both this and Message are now subclasses of SentMessage. This replaces SentMessage.empty. Assorted hook logic has been updated to accept Receipt instances.

21/05/2019, f74efe1#

[Admins] The 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] IdentityHook was moved to LocalIdentityHook, as part of a larger move to create an identity framework. The new 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 IdentityProvider.