mirror of https://github.com/python/cpython
gh-103636: issue warning for deprecated calendar constants (#103833)
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com> Co-authored-by: Éric <merwok@netwok.org> Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
This commit is contained in:
parent
ed29f524cf
commit
84e7d0f0c7
|
@ -28,6 +28,58 @@ interpreted as prescribed by the ISO 8601 standard. Year 0 is 1 BC, year -1 is
|
||||||
2 BC, and so on.
|
2 BC, and so on.
|
||||||
|
|
||||||
|
|
||||||
|
.. class:: Day
|
||||||
|
|
||||||
|
Enumeration defining the days of the week as integer constants, from 0 to 6.
|
||||||
|
|
||||||
|
.. attribute:: MONDAY
|
||||||
|
|
||||||
|
.. attribute:: TUESDAY
|
||||||
|
|
||||||
|
.. attribute:: WEDNESDAY
|
||||||
|
|
||||||
|
.. attribute:: THURSDAY
|
||||||
|
|
||||||
|
.. attribute:: FRIDAY
|
||||||
|
|
||||||
|
.. attribute:: SATURDAY
|
||||||
|
|
||||||
|
.. attribute:: SUNDAY
|
||||||
|
|
||||||
|
.. versionadded:: 3.12
|
||||||
|
|
||||||
|
|
||||||
|
.. class:: Month
|
||||||
|
|
||||||
|
Enumeration defining months of the year as integer constants, from 1 to 12.
|
||||||
|
|
||||||
|
.. attribute:: JANUARY
|
||||||
|
|
||||||
|
.. attribute:: FEBRUARY
|
||||||
|
|
||||||
|
.. attribute:: MARCH
|
||||||
|
|
||||||
|
.. attribute:: APRIL
|
||||||
|
|
||||||
|
.. attribute:: MAY
|
||||||
|
|
||||||
|
.. attribute:: JUNE
|
||||||
|
|
||||||
|
.. attribute:: JULY
|
||||||
|
|
||||||
|
.. attribute:: AUGUST
|
||||||
|
|
||||||
|
.. attribute:: SEPTEMBER
|
||||||
|
|
||||||
|
.. attribute:: OCTOBER
|
||||||
|
|
||||||
|
.. attribute:: NOVEMBER
|
||||||
|
|
||||||
|
.. attribute:: DECEMBER
|
||||||
|
|
||||||
|
.. versionadded:: 3.12
|
||||||
|
|
||||||
|
|
||||||
.. class:: Calendar(firstweekday=0)
|
.. class:: Calendar(firstweekday=0)
|
||||||
|
|
||||||
Creates a :class:`Calendar` object. *firstweekday* is an integer specifying the
|
Creates a :class:`Calendar` object. *firstweekday* is an integer specifying the
|
||||||
|
|
|
@ -300,6 +300,12 @@ asyncio
|
||||||
yielding tasks.
|
yielding tasks.
|
||||||
(Contributed by Kumar Aditya in :gh:`78530`.)
|
(Contributed by Kumar Aditya in :gh:`78530`.)
|
||||||
|
|
||||||
|
calendar
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Add enums :data:`~calendar.Month` and :data:`~calendar.Day`.
|
||||||
|
(Contributed by Prince Roshan in :gh:`103636`.)
|
||||||
|
|
||||||
csv
|
csv
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -692,6 +698,9 @@ Deprecated
|
||||||
Python 3.14, when ``'data'`` filter will become the default.
|
Python 3.14, when ``'data'`` filter will become the default.
|
||||||
See :ref:`tarfile-extraction-filter` for details.
|
See :ref:`tarfile-extraction-filter` for details.
|
||||||
|
|
||||||
|
* ``calendar.January`` and ``calendar.February`` constants are deprecated and
|
||||||
|
replaced by :data:`calendar.Month.JANUARY` and :data:`calendar.Month.FEBRUARY`.
|
||||||
|
(Contributed by Prince Roshan in :gh:`103636`.)
|
||||||
|
|
||||||
Pending Removal in Python 3.13
|
Pending Removal in Python 3.13
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
|
@ -10,6 +10,7 @@ import datetime
|
||||||
from enum import IntEnum, global_enum
|
from enum import IntEnum, global_enum
|
||||||
import locale as _locale
|
import locale as _locale
|
||||||
from itertools import repeat
|
from itertools import repeat
|
||||||
|
import warnings
|
||||||
|
|
||||||
__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
|
__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
|
||||||
"firstweekday", "isleap", "leapdays", "weekday", "monthrange",
|
"firstweekday", "isleap", "leapdays", "weekday", "monthrange",
|
||||||
|
@ -41,6 +42,18 @@ class IllegalWeekdayError(ValueError):
|
||||||
return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self.weekday
|
return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self.weekday
|
||||||
|
|
||||||
|
|
||||||
|
def __getattr__(name):
|
||||||
|
if name in ('January', 'February'):
|
||||||
|
warnings.warn(f"The '{name}' attribute is deprecated, use '{name.upper()}' instead",
|
||||||
|
DeprecationWarning, stacklevel=2)
|
||||||
|
if name == 'January':
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 2
|
||||||
|
|
||||||
|
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
||||||
|
|
||||||
|
|
||||||
# Constants for months
|
# Constants for months
|
||||||
@global_enum
|
@global_enum
|
||||||
class Month(IntEnum):
|
class Month(IntEnum):
|
||||||
|
|
|
@ -8,6 +8,7 @@ import locale
|
||||||
import sys
|
import sys
|
||||||
import datetime
|
import datetime
|
||||||
import os
|
import os
|
||||||
|
import warnings
|
||||||
|
|
||||||
# From https://en.wikipedia.org/wiki/Leap_year_starting_on_Saturday
|
# From https://en.wikipedia.org/wiki/Leap_year_starting_on_Saturday
|
||||||
result_0_02_text = """\
|
result_0_02_text = """\
|
||||||
|
@ -490,6 +491,14 @@ class OutputTestCase(unittest.TestCase):
|
||||||
self.assertEqual(out.getvalue().strip(), "1 2 3")
|
self.assertEqual(out.getvalue().strip(), "1 2 3")
|
||||||
|
|
||||||
class CalendarTestCase(unittest.TestCase):
|
class CalendarTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_deprecation_warning(self):
|
||||||
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
calendar.January
|
||||||
|
self.assertEqual(len(w), 1)
|
||||||
|
self.assertEqual(w[0].category, DeprecationWarning)
|
||||||
|
self.assertIn("The 'January' attribute is deprecated, use 'JANUARY' instead", str(w[0].message))
|
||||||
|
|
||||||
def test_isleap(self):
|
def test_isleap(self):
|
||||||
# Make sure that the return is right for a few years, and
|
# Make sure that the return is right for a few years, and
|
||||||
# ensure that the return values are 1 or 0, not just true or
|
# ensure that the return values are 1 or 0, not just true or
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Module-level attributes ``January`` and ``February`` are deprecated from :mod:`calendar`.
|
Loading…
Reference in New Issue