Skip to content

Use Python's contextvars module to remove SopelWrapper #2460

@Exirel

Description

@Exirel

Requested Feature

This is a long term plan: the end goal is to remove SopelWrapper by using contextvars in the Sopel class itself. The main issue is that removing the SopelWrapper may break the following cases:

  • using isinstance will break
  • type annotations using SopelWrapper will obviously fail, and mypy will complain
  • tests may need some adaptation to deal with a context specific bot instance

All these are perfectly acceptable for a major release, but shouldn't be introduced in a minor release. We should also ensure a period of deprecation, with warning in the documentation, and if possible in the code itself.

After a conversation on IRC, a rough plan is:

Problems Solved

Today, we use SopelWrapper to wrap an instance of Sopel and use it in plugin callable (the bot argument), and as a result:

  • we have an extra class to take care of
  • the documentation is split between 3 classes (the irc abstract class, Sopel, and SopelWrapper)
  • it uses magic method and magic behavior of Python related to attribute management, and we don't really need that
  • whenever we add/remove a fonction on Sopel we have to consider how it will or can be used with SopelWrapper, requiring more code, more tests, maybe more documentation, etc.
  • function signature need to know if they want a SopelWrapper object, a Sopel object, or both, which can be confusing

Notes

PR #2443 started the conversation around contextvars and removing SopelWrapper, but making such a drastic change in Sopel 8 is too much, hence this issue with a proper plan with a target version as Sopel 9.0.

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions