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
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
---
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
------------------------------
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",
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):
import sys
import datetime
import os
+import warnings
# From https://en.wikipedia.org/wiki/Leap_year_starting_on_Saturday
result_0_02_text = """\
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
--- /dev/null
+Module-level attributes ``January`` and ``February`` are deprecated from :mod:`calendar`.