Deprecate python-mock
Summary
The python-mock
(python3-mock
) package will be deprecated in Fedora 34. The package is a standard library backport for older Pythons, Fedora packages should use unittest.mock
instead. Many still depend on mock
, so we cannot remove it yet. Packagers are encouraged to work with upstream to switch to unittest.mock
when available. A simple sed
can be applied in %prep
as a temporary (or even permanent) downstream solution.
Owner
- Name: Miro Hrončok
- Email: mhroncok@redhat.com
Current status
- Targeted release: Fedora 34
- Last updated: 2021-02-02
- FESCo issue: #2566
- Tracker bug: #1924123
- Release notes tracker: #652
Detailed Description
The python-mock
package is the 3rd party backport of the standard library unittest.mock
module:
- mock is now part of the Python standard library, available as unittest.mock in Python 3.3 onwards. This package contains a rolling backport of the standard library mock code compatible with Python 3.6 and up.
Fedora has recent enough versions of Python, hence using a library backport is redundant. Many packages only use it out of habit. We'd like to encourage both downstream packages and upstreams to switch to unittest.mock instead. Eventually, we'd like to drop python-mock
from Fedora entirely, if possible. Before we attempt to remove the package, we need to stop new packages to (Build)Require python3-mock
, hence we want to have it deprecated.
Note that the change owner does not currently officially maintain python-mock
but the Python Maintenance team maintains the package in RHEL and contributes to the Fedora package when needed. The Fedora package maintainer has been contacted without response (the nonresponsive process is currently in progress).
How to migrate to unittest.mock
In most cases, performing the following replacement should be enough:
s/^(\s*)import mock/\1from unittest import mock/ s/^(\s*)from mock import /\1from unittest.mock import /
If upstream really needs to support Python versions without unittest.mock
, we recommend using a try-import
mechanism, such as:
try: from unittest import mock except ImportError: import mock
If dual support for unittest.mock
and mock
is required, and the mock
package is required in the metadata (such as in the testing extras), conditionalize it, with:
mock;python_version<"3.3"
Feedback
In the past, we've managed to migrate some packages away from python-mock, without a push back:
- https://src.fedoraproject.org/rpms/python-urllib3/pull-request/13
- https://src.fedoraproject.org/rpms/python-freezegun/pull-request/10
- https://src.fedoraproject.org/rpms/python-hypothesis/c/65a4191709
Benefit to Fedora
Eventually, we might be able to no longer maintain a standard library backport in a separate package.
Scope
- Proposal owners: Deprecate
python3-mock
and update the package description. Provide help migrating tounittest.mock
to other packagers who ask for it.
- Other developers: No action needed. Don't add new dependencies on
python3-mock
. If interested, migrate existing packages tounittest.mock
(feel free to ask for help).
- Release engineering: no impact on Release Engineering is anticipated
- Policies and guidelines: N/A (not a System Wide Change)
- Trademark approval: N/A (not needed for this Change)
- Alignment with Objectives: N/A (not needed for this Change)
Upgrade/compatibility impact
The package will remain available. Only new packages cannot depend on it.
Once retired (in distant future), we don't plan to obsolete/provide python3-mock
from python3-libs
, because it cannot work as drop-in replacement (the import name is different). The package will eventually be obsoleted by fedora-obsolete-packages
once Python is updated to 3.N+1 after the removal to avoid broken upgrades.
How To Test
$ repoquery --repo=rawhide --provides python3-mock ... deprecated() ...
User Experience
No changes.
Dependencies
N/A (not a System Wide Change)
Contingency Plan
- Contingency mechanism: (What to do? Who will do it?) N/A (not a System Wide Change)
- Contingency deadline: N/A (not a System Wide Change)
- Blocks release? N/A (not a System Wide Change), Yes/No
- Blocks product? product
Documentation
N/A (not a System Wide Change)