-
-
Notifications
You must be signed in to change notification settings - Fork 870
Add a guide to deprecating features #1469
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 2 commits
f2fd360
e99387d
be9224b
b8fbd0b
207294f
a90e99a
fc0b4ec
7029868
0dc75ec
0d8bd61
d077a58
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
Workflow for Deprecating Features in CPython | ||
============================================== | ||
|
||
Deprecation in CPython is a multi-step process that involves notifying users about deprecated functionality, planning its eventual removal, and providing adequate guidance for migration. | ||
This document outlines the practical steps required for deprecating a feature, supplementing the policy guidelines defined in :pep:`387`. | ||
|
||
1. Identify Features for Deprecation | ||
------------------------------------ | ||
Before proposing deprecation: | ||
|
||
* **Assess Usage**: Use tools like GitHub search, ``grep``, or ``PyPI statistics`` to determine the extent and context of usage. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps you could add links here? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. okay sure, let me add them |
||
* **Consider Alternatives**: Ensure there are suitable replacements or upgrades available. | ||
|
||
2. Open an Issue | ||
---------------- | ||
Start by creating a GitHub issue to propose the deprecation: | ||
|
||
* Clearly describe the feature and why deprecation is needed. | ||
* Encourage community feedback and suggestions. | ||
Lincoln-developer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
3. Deprecation Implementation | ||
----------------------------- | ||
Once approved: | ||
Lincoln-developer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
* **Raise a Warning**: Use :func:`warnings.warn` with :exc:`DeprecationWarning` for typical cases. | ||
If the feature is in its early deprecation phase: | ||
|
||
* Use :exc:`PendingDeprecationWarning` initially, which transitions to :exc:`DeprecationWarning` after a suitable period. | ||
|
||
Example: | ||
|
||
.. code-block:: python | ||
|
||
import warnings | ||
warnings.warn( | ||
"Feature X is deprecated and will be removed in Python 3.Y", | ||
DeprecationWarning, | ||
stacklevel=2 | ||
) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should probably use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks let me work on this change |
||
|
||
* **Update Documentation**: | ||
|
||
* Add a deprecation note in the relevant docstrings. | ||
* Include details in the "Porting" section of the "What's New" documentation. | ||
* Update the ``pending-removal-in-{version}.rst`` file with the deprecation timeline. | ||
|
||
4. Track Deprecations | ||
--------------------- | ||
Lincoln-developer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* **Monitor Usage**: After the release, observe community feedback. Deprecations may remain longer than the minimum period if low maintenance overhead is expected or usage is widespread. | ||
* **Timeline Review**: Use GitHub milestones or specific deprecation tracking issues to manage timelines. | ||
|
||
5. Plan Removal | ||
--------------- | ||
After the deprecation period (typically 2+ releases): | ||
Lincoln-developer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
* Open a new issue for removal. | ||
* Follow removal steps: | ||
|
||
* Remove the deprecated code and warnings. | ||
* Update documentation, removing references to the deprecated feature. | ||
* Include the removal in the "What's New" for the release. | ||
|
||
6. PendingDeprecationWarning Workflow | ||
------------------------------------- | ||
For gradual deprecations: | ||
Lincoln-developer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
* **Use Case**: When you want to signal future deprecation but not yet alert end-users. | ||
* **Transition Timeline**: | ||
|
||
* Move from :exc:`PendingDeprecationWarning` to :exc:`DeprecationWarning` after one or more releases. | ||
|
||
* **Documentation**: | ||
|
||
* Mention the pending deprecation in “What’s New.” | ||
* No ``pending-removal-in`` entry is needed during this stage. | ||
|
||
7. References and Templates | ||
--------------------------- | ||
* Use ``.. deprecated::`` and ``.. removed::`` Sphinx roles for documentation. | ||
Lincoln-developer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* Add ``See Also`` links to :pep:`387` and DevGuide for policy and process details. |
Uh oh!
There was an error while loading. Please reload this page.