Skip to content

Commit

Permalink
gh-103636: issue warning for deprecated calendar constants (#103833)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
4 people committed Apr 29, 2023
1 parent ed29f52 commit 84e7d0f
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 0 deletions.
52 changes: 52 additions & 0 deletions Doc/library/calendar.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.


.. 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)

Creates a :class:`Calendar` object. *firstweekday* is an integer specifying the
Expand Down
9 changes: 9 additions & 0 deletions Doc/whatsnew/3.12.rst
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@ asyncio
yielding tasks.
(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
---

Expand Down Expand Up @@ -692,6 +698,9 @@ Deprecated
Python 3.14, when ``'data'`` filter will become the default.
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
------------------------------
Expand Down
13 changes: 13 additions & 0 deletions Lib/calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from enum import IntEnum, global_enum
import locale as _locale
from itertools import repeat
import warnings

__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
"firstweekday", "isleap", "leapdays", "weekday", "monthrange",
Expand Down Expand Up @@ -41,6 +42,18 @@ def __str__(self):
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
@global_enum
class Month(IntEnum):
Expand Down
9 changes: 9 additions & 0 deletions Lib/test/test_calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import sys
import datetime
import os
import warnings

# From https://en.wikipedia.org/wiki/Leap_year_starting_on_Saturday
result_0_02_text = """\
Expand Down Expand Up @@ -490,6 +491,14 @@ def test_format(self):
self.assertEqual(out.getvalue().strip(), "1 2 3")

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):
# 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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Module-level attributes ``January`` and ``February`` are deprecated from :mod:`calendar`.

0 comments on commit 84e7d0f

Please sign in to comment.