Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b366f9f

Browse filesBrowse files
Merge branch 'python:main' into gh-82054
2 parents 88bce13 + 44b5c21 commit b366f9f
Copy full SHA for b366f9f

17 files changed

+184
-58
lines changed

‎.github/workflows/doc.yml

Copy file name to clipboardExpand all lines: .github/workflows/doc.yml
+20Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,26 @@ jobs:
7979
# Build docs with the '-n' (nit-picky) option, convert warnings to errors (-W)
8080
make -C Doc/ PYTHON=../python SPHINXOPTS="-q -n -W --keep-going" html 2>&1
8181
82+
# This build doesn't use problem matchers or check annotations
83+
# It also does not run 'make check', as sphinx-lint is not installed into the
84+
# environment.
85+
build_doc_oldest_supported_sphinx:
86+
name: 'Docs (Oldest Sphinx)'
87+
runs-on: ubuntu-latest
88+
timeout-minutes: 60
89+
steps:
90+
- uses: actions/checkout@v3
91+
- name: 'Set up Python'
92+
uses: actions/setup-python@v4
93+
with:
94+
python-version: '3.11' # known to work with Sphinx 3.2
95+
cache: 'pip'
96+
cache-dependency-path: 'Doc/requirements-oldest-sphinx.txt'
97+
- name: 'Install build dependencies'
98+
run: make -C Doc/ venv REQUIREMENTS="requirements-oldest-sphinx.txt"
99+
- name: 'Build HTML documentation'
100+
run: make -C Doc/ SPHINXOPTS="-q" SPHINXERRORHANDLING="-W --keep-going" html
101+
82102
# Run "doctest" on HEAD as new syntax doesn't exist in the latest stable release
83103
doctest:
84104
name: 'Doctest'

‎Doc/Makefile

Copy file name to clipboardExpand all lines: Doc/Makefile
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ JOBS = auto
1313
PAPER =
1414
SOURCES =
1515
DISTVERSION = $(shell $(PYTHON) tools/extensions/patchlevel.py)
16+
REQUIREMENTS = requirements.txt
1617
SPHINXERRORHANDLING = -W
1718

1819
# Internal variables.
@@ -154,8 +155,8 @@ venv:
154155
echo "To recreate it, remove it first with \`make clean-venv'."; \
155156
else \
156157
$(PYTHON) -m venv $(VENVDIR); \
157-
$(VENVDIR)/bin/python3 -m pip install -U pip setuptools; \
158-
$(VENVDIR)/bin/python3 -m pip install -r requirements.txt; \
158+
$(VENVDIR)/bin/python3 -m pip install --upgrade pip; \
159+
$(VENVDIR)/bin/python3 -m pip install -r $(REQUIREMENTS); \
159160
echo "The venv has been created in the $(VENVDIR) directory"; \
160161
fi
161162

‎Doc/library/datetime.rst

Copy file name to clipboardExpand all lines: Doc/library/datetime.rst
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,10 @@ Other constructors, all class methods:
896896
in UTC. As such, the recommended way to create an object representing the
897897
current time in UTC is by calling ``datetime.now(timezone.utc)``.
898898

899+
.. deprecated:: 3.12
900+
901+
Use :meth:`datetime.now` with :attr:`UTC` instead.
902+
899903

900904
.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
901905

@@ -964,6 +968,10 @@ Other constructors, all class methods:
964968
:c:func:`gmtime` function. Raise :exc:`OSError` instead of
965969
:exc:`ValueError` on :c:func:`gmtime` failure.
966970

971+
.. deprecated:: 3.12
972+
973+
Use :meth:`datetime.fromtimestamp` with :attr:`UTC` instead.
974+
967975

968976
.. classmethod:: datetime.fromordinal(ordinal)
969977

‎Doc/library/sqlite3.rst

Copy file name to clipboardExpand all lines: Doc/library/sqlite3.rst
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ Module functions
310310
to avoid data corruption.
311311
See :attr:`threadsafety` for more information.
312312

313-
:param Connection factory:
313+
:param ~sqlite3.Connection factory:
314314
A custom subclass of :class:`Connection` to create the connection with,
315315
if not the default :class:`Connection` class.
316316

@@ -337,7 +337,7 @@ Module functions
337337
The default will change to ``False`` in a future Python release.
338338
:type autocommit: bool
339339

340-
:rtype: Connection
340+
:rtype: ~sqlite3.Connection
341341

342342
.. audit-event:: sqlite3.connect database sqlite3.connect
343343
.. audit-event:: sqlite3.connect/handle connection_handle sqlite3.connect
@@ -1129,7 +1129,7 @@ Connection objects
11291129
Works even if the database is being accessed by other clients
11301130
or concurrently by the same connection.
11311131

1132-
:param Connection target:
1132+
:param ~sqlite3.Connection target:
11331133
The database connection to save the backup to.
11341134

11351135
:param int pages:

‎Doc/requirements-oldest-sphinx.txt

Copy file name to clipboard
+38Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Requirements to build the Python documentation, for the oldest supported
2+
# Sphinx version.
3+
#
4+
# We pin Sphinx and all of its dependencies to ensure a consistent environment.
5+
6+
blurb
7+
python-docs-theme>=2022.1
8+
9+
# Generated from:
10+
# pip install "Sphinx~=3.2.0" "docutils<0.17" "Jinja2<3" "MarkupSafe<2"
11+
# pip freeze
12+
#
13+
# Sphinx 3.2 comes from ``needs_sphinx = '3.2'`` in ``Doc/conf.py``.
14+
# Docutils<0.17, Jinja2<3, and MarkupSafe<2 are additionally specified as
15+
# Sphinx 3.2 is incompatible with newer releases of these packages.
16+
17+
Sphinx==3.2.1
18+
alabaster==0.7.13
19+
Babel==2.12.1
20+
certifi==2022.12.7
21+
charset-normalizer==3.1.0
22+
colorama==0.4.6
23+
docutils==0.16
24+
idna==3.4
25+
imagesize==1.4.1
26+
Jinja2==2.11.3
27+
MarkupSafe==1.1.1
28+
packaging==23.1
29+
Pygments==2.15.1
30+
requests==2.29.0
31+
snowballstemmer==2.2.0
32+
sphinxcontrib-applehelp==1.0.4
33+
sphinxcontrib-devhelp==1.0.2
34+
sphinxcontrib-htmlhelp==2.0.1
35+
sphinxcontrib-jsmath==1.0.1
36+
sphinxcontrib-qthelp==1.0.3
37+
sphinxcontrib-serializinghtml==1.1.5
38+
urllib3==1.26.15

‎Lib/_strptime.py

Copy file name to clipboardExpand all lines: Lib/_strptime.py
+6-19Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -290,22 +290,6 @@ def _calc_julian_from_U_or_W(year, week_of_year, day_of_week, week_starts_Mon):
290290
return 1 + days_to_week + day_of_week
291291

292292

293-
def _calc_julian_from_V(iso_year, iso_week, iso_weekday):
294-
"""Calculate the Julian day based on the ISO 8601 year, week, and weekday.
295-
ISO weeks start on Mondays, with week 01 being the week containing 4 Jan.
296-
ISO week days range from 1 (Monday) to 7 (Sunday).
297-
"""
298-
correction = datetime_date(iso_year, 1, 4).isoweekday() + 3
299-
ordinal = (iso_week * 7) + iso_weekday - correction
300-
# ordinal may be negative or 0 now, which means the date is in the previous
301-
# calendar year
302-
if ordinal < 1:
303-
ordinal += datetime_date(iso_year, 1, 1).toordinal()
304-
iso_year -= 1
305-
ordinal -= datetime_date(iso_year, 1, 1).toordinal()
306-
return iso_year, ordinal
307-
308-
309293
def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
310294
"""Return a 2-tuple consisting of a time struct and an int containing
311295
the number of microseconds based on the input string and the
@@ -483,7 +467,8 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
483467
else:
484468
tz = value
485469
break
486-
# Deal with the cases where ambiguities arize
470+
471+
# Deal with the cases where ambiguities arise
487472
# don't assume default values for ISO week/year
488473
if year is None and iso_year is not None:
489474
if iso_week is None or weekday is None:
@@ -511,7 +496,6 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
511496
elif year is None:
512497
year = 1900
513498

514-
515499
# If we know the week of the year and what day of that week, we can figure
516500
# out the Julian day of the year.
517501
if julian is None and weekday is not None:
@@ -520,7 +504,10 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
520504
julian = _calc_julian_from_U_or_W(year, week_of_year, weekday,
521505
week_starts_Mon)
522506
elif iso_year is not None and iso_week is not None:
523-
year, julian = _calc_julian_from_V(iso_year, iso_week, weekday + 1)
507+
datetime_result = datetime_date.fromisocalendar(iso_year, iso_week, weekday + 1)
508+
year = datetime_result.year
509+
month = datetime_result.month
510+
day = datetime_result.day
524511
if julian is not None and julian <= 0:
525512
year -= 1
526513
yday = 366 if calendar.isleap(year) else 365

‎Lib/datetime.py

Copy file name to clipboardExpand all lines: Lib/datetime.py
+15-1Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1801,6 +1801,13 @@ def fromtimestamp(cls, timestamp, tz=None):
18011801
@classmethod
18021802
def utcfromtimestamp(cls, t):
18031803
"""Construct a naive UTC datetime from a POSIX timestamp."""
1804+
import warnings
1805+
warnings.warn("datetime.utcfromtimestamp() is deprecated and scheduled "
1806+
"for removal in a future version. Use timezone-aware "
1807+
"objects to represent datetimes in UTC: "
1808+
"datetime.fromtimestamp(t, datetime.UTC).",
1809+
DeprecationWarning,
1810+
stacklevel=2)
18041811
return cls._fromtimestamp(t, True, None)
18051812

18061813
@classmethod
@@ -1812,8 +1819,15 @@ def now(cls, tz=None):
18121819
@classmethod
18131820
def utcnow(cls):
18141821
"Construct a UTC datetime from time.time()."
1822+
import warnings
1823+
warnings.warn("datetime.utcnow() is deprecated and scheduled for "
1824+
"removal in a future version. Instead, Use timezone-aware "
1825+
"objects to represent datetimes in UTC: "
1826+
"datetime.now(datetime.UTC).",
1827+
DeprecationWarning,
1828+
stacklevel=2)
18151829
t = _time.time()
1816-
return cls.utcfromtimestamp(t)
1830+
return cls._fromtimestamp(t, True, None)
18171831

18181832
@classmethod
18191833
def combine(cls, date, time, tzinfo=True):

‎Lib/email/utils.py

Copy file name to clipboardExpand all lines: Lib/email/utils.py
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ def formatdate(timeval=None, localtime=False, usegmt=False):
143143
# 2822 requires that day and month names be the English abbreviations.
144144
if timeval is None:
145145
timeval = time.time()
146-
if localtime or usegmt:
147-
dt = datetime.datetime.fromtimestamp(timeval, datetime.timezone.utc)
148-
else:
149-
dt = datetime.datetime.utcfromtimestamp(timeval)
146+
dt = datetime.datetime.fromtimestamp(timeval, datetime.timezone.utc)
147+
150148
if localtime:
151149
dt = dt.astimezone()
152150
usegmt = False
151+
elif not usegmt:
152+
dt = dt.replace(tzinfo=None)
153153
return format_datetime(dt, usegmt)
154154

155155
def format_datetime(dt, usegmt=False):

‎Lib/http/cookiejar.py

Copy file name to clipboardExpand all lines: Lib/http/cookiejar.py
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ def time2isoz(t=None):
104104
105105
"""
106106
if t is None:
107-
dt = datetime.datetime.utcnow()
107+
dt = datetime.datetime.now(tz=datetime.UTC)
108108
else:
109-
dt = datetime.datetime.utcfromtimestamp(t)
109+
dt = datetime.datetime.fromtimestamp(t, tz=datetime.UTC)
110110
return "%04d-%02d-%02d %02d:%02d:%02dZ" % (
111111
dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second)
112112

@@ -122,9 +122,9 @@ def time2netscape(t=None):
122122
123123
"""
124124
if t is None:
125-
dt = datetime.datetime.utcnow()
125+
dt = datetime.datetime.now(tz=datetime.UTC)
126126
else:
127-
dt = datetime.datetime.utcfromtimestamp(t)
127+
dt = datetime.datetime.fromtimestamp(t, tz=datetime.UTC)
128128
return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % (
129129
DAYS[dt.weekday()], dt.day, MONTHS[dt.month-1],
130130
dt.year, dt.hour, dt.minute, dt.second)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.