{ python3, fetchPypi, lib, overlay ? (_: _: {}) }:

python3.override {
  packageOverrides = lib.composeExtensions
    (self: super: {
      /*
        This overlay can be used whenever we need to override
        dependencies specific to the mailman ecosystem: in the past
        this was necessary for e.g. psycopg2[1] or sqlalchemy[2].

        In such a large ecosystem this sort of issue is expected
        to arise again. Since we don't want to clutter the python package-set
        itself with version overrides and don't want to change the APIs
        in here back and forth every time this comes up (and as a result
        force users to change their code accordingly), this overlay
        is kept on purpose, even when empty.

        [1] 72a14ea563a3f5bf85db659349a533fe75a8b0ce
        [2] f931bc81d63f5cfda55ac73d754c87b3fd63b291
      */

      # django-q tests fail with redis 5.0.0.
      # https://gitlab.com/mailman/hyperkitty/-/issues/493
      redis = super.redis.overridePythonAttrs ({ pname, ... }: rec {
        version = "4.6.0";
        src = fetchPypi {
          inherit pname version;
          hash = "sha256-WF3FFrnrBCphnvCjnD19Vf6BvbTfCaUsnN3g0Hvxqn0=";
        };
      });

      readme-renderer = super.readme-renderer.overridePythonAttrs (_: {
        propagatedBuildInputs = [ self.cmarkgfm ];
      });
    })

    overlay;
}
