Skip to content

gh-72346: Added isdst deprecation warning to email.utils.localtime - #91450

Merged
zware merged 39 commits into
python:mainfrom
alanfwilliams:fix-gh-72346
Mar 20, 2023
Merged

gh-72346: Added isdst deprecation warning to email.utils.localtime#91450
zware merged 39 commits into
python:mainfrom
alanfwilliams:fix-gh-72346

Conversation

@alanfwilliams

@alanfwilliamsalanfwilliams commented Apr 11, 2022

Copy link
Copy Markdown
Contributor

This adds a deprecation warning to the isdst parameter in email.utils.localtime. This is my first contribution so any feedback is welcome.

@ghost

This comment was marked as outdated.

@alanfwilliams

Copy link
Copy Markdown
ContributorAuthor

I'm not sure why it says I haven't signed the CLA. I did just link it with my github account so it may take a moment to refresh I assume.

@zware

Copy link
Copy Markdown
Member

Closing and re-opening to re-trigger the CLA check.

@zwarezware closed this Apr 11, 2022
@zwarezware reopened this Apr 11, 2022
@zwarezware linked an issue Apr 12, 2022 that may be closed by this pull request

@hugovkhugovk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A good start, thanks!

It would need some documentation updating too.

Put a .. deprecated:: 3.11 under the function in email.utils.rst. For example, have a look at:

And also list it on "What’s New In Python 3.11":

Comment threadLib/email/utils.py Outdated
@alanfwilliams

Copy link
Copy Markdown
ContributorAuthor

@hugovk I've added the edits you've requested. Thanks for the quick review.

@hugovkhugovk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the update!

Comment threadDoc/whatsnew/3.11.rst Outdated
Comment threadDoc/library/email.utils.rst Outdated
Comment threadLib/email/utils.py Outdated
@alanfwilliams

Copy link
Copy Markdown
ContributorAuthor

@hugovk I've completed the changes you requested.

@hugovkhugovk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Just a couple of minor style things!

Comment threadDoc/library/email.utils.rst Outdated
.. versionadded:: 3.3

.. deprecated:: 3.11
Use of the ``isdst`` argument is deprecated.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just noticed the style for parameters is italics (for example see the docstring):

Suggested change
Use of the ``isdst`` argument is deprecated.
Use of the *isdst* argument is deprecated.

Comment threadDoc/whatsnew/3.11.rst Outdated

(Contributed by Brett Cannon in :issue:`47061`.)

* Deprecated the ``isdst`` parameter in :func:`email.utils.localtime`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Deprecated the ``isdst`` parameter in :func:`email.utils.localtime`.
* Deprecated the *isdst* parameter in :func:`email.utils.localtime`.

Comment threadLib/email/utils.py Outdated

"""
if isdst != -1:
warnings._deprecated("The isdst parameter to localtime", remove=(3,13))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A little nit :)

Suggested change
warnings._deprecated("The isdst parameter to localtime", remove=(3,13))
warnings._deprecated("The isdst parameter to localtime", remove=(3,13))

@hugovkhugovk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, looks good! Hopefully a core dev can take a look soon and trigger the CI.

cc @abalkin, @bitdancer, @Mariatta

@hugovkhugovk added topic-email stdlib Standard Library Python modules in the Lib/ directory 3.11 only security fixes labels Apr 13, 2022
@alanfwilliams

Copy link
Copy Markdown
ContributorAuthor

Hi, just wanted to check if there was anything I could do to move this along.

@zwarezware left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a great start! A few things to fix up, though.

There will also need to be test changes for this, both to test that the deprecation warning is emitted as expected, and to prevent it from escaping where we don't want it.

Also, note that I'm not a maintainer of the email package, so these are just general suggestions to hopefully make this quicker and easier for one of them to accept :)

Comment threadLib/email/utils.py Outdated
to divine whether summer time is in effect for the specified time.

"""
if isdst != -1:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to change the default value here to detect when someone is passing in -1 explicitly. None is fine as the new default, or you could add _ignored = object() just before this function and use _ignored as the new default.

Comment threadLib/email/utils.py Outdated
warnings._deprecated("The isdst parameter to localtime", remove=(3,13))
if dt is None:
return datetime.datetime.now(datetime.timezone.utc).astimezone()
if dt.tzinfo is not None:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned in the issue, this whole function can be reduced to just a thin wrapper around datetime.astimezone():

ifdtisNone:
dt=datetime.datetime.now()
returndt.astimezone()

(Extra code for the deprecated parameter not shown :))

Comment threadLib/email/utils.py Outdated
import socket
import datetime
import urllib.parse
import warnings

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this should generally not be necessary unless someone is passing in a value for isdst, it can be imported where it's used.

Comment threadDoc/library/email.utils.rst Outdated

.. versionadded:: 3.3

.. deprecated:: 3.11

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we're specifying in the code that it will be removed in 3.13, we can use the deprecated-removed directive here to also document when it will disappear.

Comment threadLib/email/utils.py Outdated
@@ -345,6 +346,8 @@ def localtime(dt=None, isdst=-1):
to divine whether summer time is in effect for the specified time.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docstring should be updated to remove everything about isdst, and replace it with a simple note that the parameter is ignored. Similar in the documentation.

Comment threadLib/email/utils.py Outdated

"""
if isdst != -1:
warnings._deprecated("The isdst parameter to localtime", remove=(3, 13))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, the easy route here makes for an ugly message: 'The isdst argument to localtime' is deprecated .... We need to specify our own message to make it prettier:

Suggested change
warnings._deprecated("The isdst parameter to localtime", remove=(3, 13))
warnings._deprecated(
"The 'isdst' parameter to 'localtime'",
message='{name}isdeprecatedandslatedforremovalinPython {remove},
remove=(3, 13),
)

Comment threadDoc/library/email.utils.rst Outdated
module:

.. function:: localtime(dt=None)
.. function:: localtime(dt=None, isdst=-1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since it wasn't documented before and is being removed, we probably don't want to add it now :). The deprecation note can mention that it was previously undocumented.

Comment threadDoc/whatsnew/3.11.rst Outdated
(Contributed by Brett Cannon in :issue:`47061`.)

* Deprecated the *isdst* parameter in :func:`email.utils.localtime`.
(Contributed by Alan Williams in :issue:`72346`.)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:issue:`72346` will direct to https://bugs.python.org/issue72346, which doesn't exist :). This should now be :gh:`72346` , IIUC.

@bedevere-bot

Copy link
Copy Markdown

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

Comment threadLib/email/utils.py Outdated
Comment threadDoc/whatsnew/3.12.rst Outdated
@alanfwilliams

Copy link
Copy Markdown
ContributorAuthor

Although it seems that the Azure test isn't working properly (says it passed in the output, but is marked as failed), I have made the requested changes; please review again.

@bedevere-bot

Copy link
Copy Markdown

Thanks for making the requested changes!

@zware: please review the changes made to this pull request.

@alanfwilliams

Copy link
Copy Markdown
ContributorAuthor

Hey @zware, any chance you can take a look at this?

@zware

Copy link
Copy Markdown
Member

5 months later, yes! LGTM, sorry for the delay.

@zware
zware merged commit 5e6661b into python:mainMar 20, 2023
@zwarezware added 3.12 only security fixes and removed 3.11 only security fixes labels Mar 20, 2023
Fidget-Spinner pushed a commit to Fidget-Spinner/cpython that referenced this pull request Mar 27, 2023
warsaw pushed a commit to warsaw/cpython that referenced this pull request Apr 11, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3.12only security fixesstdlibStandard Library Python modules in the Lib/ directorytopic-email

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Deprecate isdst argument in email.utils.localtime

5 participants

@alanfwilliams@zware@bedevere-bot@hugovk@ezio-melotti