Commit graph

30998 commits

Author SHA1 Message Date
Miss Islington (bot)
ba8d0e37e7
[3.15] GH-59633: Clarify dest collisions in argparse docs (GH-150987) (#151188)
GH-59633: Clarify dest collisions in argparse docs (GH-150987)
(cherry picked from commit 82cb7d4bf6)

Co-authored-by: Savannah Ostrowski <savannah@python.org>
2026-06-09 17:15:41 +00:00
Miss Islington (bot)
fda4f22d60
[3.15] GH-61082: Clarify nargs='*' positional default behavior (GH-150989) (#151168)
GH-61082: Clarify nargs='*' positional default behavior (GH-150989)
(cherry picked from commit bc37a227b2)

Co-authored-by: Savannah Ostrowski <savannah@python.org>
2026-06-09 15:46:39 +00:00
Miss Islington (bot)
804be0a223
[3.15] GH-54732: Tweak wording around empty lines in argument files (GH-150980) (#151165)
GH-54732: Tweak wording around empty lines in argument files (GH-150980)
(cherry picked from commit 528550e0e7)

Co-authored-by: Savannah Ostrowski <savannah@python.org>
2026-06-09 15:45:23 +00:00
Miss Islington (bot)
22d32b6df0
[3.15] Docs: Only add profiling-sampling-visualization.{css,js} to files when necessary (GH-151150)
(cherry picked from commit 0a179e748b)

Co-authored-by: Stan Ulbrych <stan@python.org>
2026-06-09 13:24:28 +00:00
Miss Islington (bot)
19e4b8f559
[3.15] gh-109503: Fix document for shutil.move() on usage of os.rename() since it's inaccurate (GH-109507) (GH-150611)
Nonatomic move might be used even if the files are
on the same filesystem in some cases.
(cherry picked from commit 6ecd197c03)

Co-authored-by: Fang Li <fangli@users.noreply.github.com>
2026-06-09 16:06:30 +03:00
Pablo Galindo Salgado
83e26a43a7
[3.15] gh-149321: Remove lazy_imports=none startup mode (GH-149389) (#150129) 2026-06-08 22:55:57 +00:00
Miss Islington (bot)
fd252e80f5
[3.15] gh-148932: Fix profiling.sampling on Windows virtual environments (GH-150541) (#151097)
gh-148932: Fix `profiling.sampling` on Windows virtual environments (GH-150541)
(cherry picked from commit 5c13217314)

Co-authored-by: Eduardo Villalpando Mello <eduardovil@microsoft.com>
2026-06-08 23:04:06 +01:00
Miss Islington (bot)
fd4f9fa186
[3.15] gh-151070: Fix class referencing typo in collections.abc docs (GH-151088) (GH-151110)
(cherry picked from commit 29a920e80e)

Co-authored-by: Arshal Aromal <arshalaromal19@gmail.com>
2026-06-08 19:47:05 +00:00
Miss Islington (bot)
86e291e662
[3.15] gh-106318: Add examples to the str.isdigit() method docs (GH-144721)
(cherry picked from commit f051c68923)

Co-authored-by: Adorilson Bezerra <adorilson@gmail.com>
Co-authored-by: Stan Ulbrych <stan@python.org>
2026-06-08 12:59:46 +00:00
Miss Islington (bot)
39f232219e
[3.15] gh-141623: Clarify operator function descriptions (GH-141846)
(cherry picked from commit bd5fa31c5f)

Co-authored-by: Doron Behar <doron.behar@gmail.com>
2026-06-08 12:21:22 +00:00
Miss Islington (bot)
0f964f4679
[3.15] Mention frozendict in object.__hash__() documentation (GH-148867) (#151077)
(cherry picked from commit e3762114e5)

Co-authored-by: Jonathan Dung <jonathandung@yahoo.com>
2026-06-08 11:47:55 +00:00
Miss Islington (bot)
1f3ee9248a
[3.15] gh-101100: Fix Sphinx warnings in 'Buffer Object Structures' documentation (GH-151058)
(cherry picked from commit a1873300ee)

Co-authored-by: Christian Zinck <christian.zinck@gmail.com>
2026-06-08 10:32:43 +00:00
Miss Islington (bot)
550d9b62dd
[3.15] Docs: Fix missing colon in bisect example function (GH-151061) (GH-151067)
Docs: Fix missing colon in `bisect` example function (GH-151061)
(cherry picked from commit 16ede813eb)

Co-authored-by: Sergio López Gómez <sergiolopezgmz.dam@gmail.com>
2026-06-08 09:47:41 +00:00
Miss Islington (bot)
2185b73dff
[3.15] Update an error message in the 'Functional Programming HOWTO' (GH-151047)
(cherry picked from commit 81965c1683)

Co-authored-by: saber-bit <bryanventura0324@gmail.com>
2026-06-07 18:25:37 +01:00
Miss Islington (bot)
ec9b40d740
[3.15] Doc: fix order of PyLong_FromUnsignedLongLong (GH-150937) (GH-151012)
(cherry picked from commit 4833b2031e)

Co-authored-by: Inada Naoki <songofacandy@gmail.com>
2026-06-06 15:06:37 +03:00
Miss Islington (bot)
3c1c9ba285
[3.15] Delete mention encoding and errors for importlib.resources.path() (GH-143111) (GH-151014)
(cherry picked from commit fded34d6fe)

Co-authored-by: Alexander Shadchin <shadchin@yandex-team.com>
2026-06-06 11:59:53 +00:00
Miss Islington (bot)
4a3d6f9793
[3.15] Use time.monotonic in OrderedDict LRU cache example (GH-150986) (#150991)
Use `time.monotonic` in OrderedDict LRU cache example (GH-150986)
(cherry picked from commit ea4c85552b)

Co-authored-by: Ilya Nikolaev <65247719+ilya-nikolaev@users.noreply.github.com>
2026-06-06 01:59:30 +03:00
Miss Islington (bot)
d8af158eb6
[3.15] gh-129011: Update docs for Raw I/O read, readinto, and write (GH-135328) (#150957)
gh-129011: Update docs for Raw I/O read, readinto, and write (GH-135328)

Update `RawIOBase` and `FileIO` documentation to match implementation
behavior around `.read`, `.readinto`, `.readall` and `.write`.

In particular:

 - They may make more than one system call (PEP-475)
 - Add warnings if `.write()` requires a wrapping retry loop (see: gh-126606)
    - "Raw I/O" `.write`` may not write all bytes
    - `buffering=0` example results in a "Raw I/O"
(cherry picked from commit e4db68b9c9)

Co-authored-by: Cody Maloney <cmaloney@users.noreply.github.com>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
2026-06-05 12:09:13 +00:00
Miss Islington (bot)
1e1a9d9b41
[3.15] Add shebang documentation for PyManager 26.3b1 (GH-150931)
(cherry picked from commit e28a2f4930)

Co-authored-by: Steve Dower <steve.dower@python.org>
2026-06-04 20:45:28 +00:00
Miss Islington (bot)
253c51837f
[3.15] gh-106318: Add doctest role and a 'See also' to the str.split() docs (GH-144367)
(cherry picked from commit a96cba5c4a)

Co-authored-by: Adorilson Bezerra <adorilson@gmail.com>
2026-06-04 14:23:33 +01:00
Miss Islington (bot)
f3956c659a
[3.15] Fix 2 broken links in documentation (GH-150892)
(cherry picked from commit cb064e746d)

Co-authored-by: Miro Hrončok <miro@hroncok.cz>
Co-authored-by: Stan Ulbrych <stan@python.org>
2026-06-04 09:51:34 +00:00
Miss Islington (bot)
5a83d1bb7f
[3.15] Correct Stable ABI documentation for METH_FASTCALL (GH-149593) (GH-150853)
The current documentation says:

>
> METH_FASTCALL
>    Part of the Stable ABI since version 3.7.
>
> [...]
>
>   Added in version 3.7.
>
>    Changed in version 3.10: METH_FASTCALL is now part of the stable ABI.

so is contradictory about when it was added to the Stable ABI.  Looking at the header it seems like 3.10 is right.
(cherry picked from commit 58beae7319)

Co-authored-by: da-woods <dw-git@d-woods.co.uk>
2026-06-04 11:50:39 +02:00
Miss Islington (bot)
0ad93968fe
[3.15] gh-149473: Emit audit event on calling os.environ.clear() (GH-149768) (#150094)
gh-149473: Emit audit event on calling os.environ.clear() (GH-149768)
(cherry picked from commit 29415c071f)

Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
2026-06-04 08:47:38 +00:00
Miss Islington (bot)
54bd7c0258
[3.15] gh-132467: Document and test that generic aliases are not classes (GH-133504) (#150854)
gh-132467: Document and test that generic aliases are not classes (GH-133504)
(cherry picked from commit 5915a1fb9d)

Co-authored-by: Abduaziz π <mail@ziyodov.uz>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
2026-06-03 08:26:36 -07:00
Miss Islington (bot)
24f5d3d598
[3.15] gh-146636: Add Free-threaded Stable ABI migration guide (GH-150580) (#150844)
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Charlie Lin <tuug@gmx.us>
Co-authored-by: da-woods <dw-git@d-woods.co.uk>
Co-authored-by: Stan Ulbrych <stan@python.org>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
2026-06-03 17:55:35 +03:00
Hugo van Kemenade
381bda9395
[3.15] Docs: Replace hardcoded SOURCE_URI with patchlevel check (GH-150850) (#150855) 2026-06-03 16:49:58 +03:00
Miss Islington (bot)
0f08c550bc
[3.15] gh-141004: Document unstable perf map functions in ceval.h (GH-143492) (GH-150849)
gh-141004: Document unstable perf map functions in `ceval.h` (GH-143492)
(cherry picked from commit 6453065db9)

Co-authored-by: Yashraj <yashrajpala8@gmail.com>
2026-06-03 12:44:34 +00:00
Miss Islington (bot)
c69521fdec
[3.15] Fix a typo in SSLSocket docs (GH-150839) (GH-150848)
Fix a typo in `SSLSocket` docs (GH-150839)
(cherry picked from commit 5553e003ca)

Co-authored-by: Robsdedude <dev@rouvenbauer.de>
2026-06-03 12:27:56 +00:00
Miss Islington (bot)
accc0c8315
[3.15] gh-148587: Document sys.lazy_modules (GH-150742)
(cherry picked from commit e3fa52d953)

Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>
2026-06-03 09:36:50 +01:00
Miss Islington (bot)
1c2daa08fb
[3.15] gh-150319: Replace all documentation which says "See PEP 585" (GH-150325) (#150808)
gh-150319: Replace all documentation which says "See PEP 585" (GH-150325)

* Replace all documentation which says "See PEP 585"

The following classes in the stdlib get simple updates:

- array.array
- asyncio.Future
- asyncio.Task
- collections.defaultdict
- collections.deque
- contextvars.ContextVar
- contextvars.Token
- ctypes.Array
- os.DirEntry
- re.Match
- re.Pattern
- string.templatelib.Interpolation
- string.templatelib.Template
- types.MappingProxyType
- queue.SimpleQueue
- weakref.ref

The following classes are documented publicly as functions, and are
therefore updated internally (`__class_getitem__.__doc__`) but not in the
public docs:

- functools.partial
- itertools.chain

The following builtin types have updates to `__class_getitem__.__doc__`
but not to any documentation pages:

- BaseExceptionGroup
- coroutines (from generators)
- dict
- enumerate
- frozendict
- frozenset
- generators (and async generators)
- list
- memoryview
- set
- slice
- tuple

Special cases:

- union objects are now documented as "supporting class-level []",
  rather than anything to do with generics.

- Templates might be generic over a single type (union, in theory) or
  over a TypeVarTuple. As this is not currently fully settled, it is
  marked with a comment and a mild hint that it is a single type is used
  (namely, "type" is singular rather than "types", plural)

* Apply suggestions from code review



* Correct several class getitem docs

And expand the text for tuples.



* Add notes on generic typing of builtins

* Fix typo in tuple.__class_getitem__ docstring

* Typo fix: malformed refs

Fix `generic` links which weren't marked as `:ref:`.

* Strike unnecessary docs on generic-ness



* Apply suggestions from code review

These are applied at both the originally indicated locations and in the
corresponding docstring definitions.



* Update Doc/library/re.rst



* Update Objects/enumobject.c



* Remove tuple generic doc in 'stdtypes' page

This is covered in more detail in the cross-linked typing documentation.
The other copy of this documentation -- in the docstring for
`tuple.__class_getitem__` -- is left in place.

* Fix whitespace around new doc of generics

Per review, do not introduce or remove whitespace such that section
breaks are altered by the introduction of doc on various generic types.

In most cases, this is a removal of an extra line.

In one case (Arrays), it is the reintroduction of a line.

Additionally, two other minor fixes are included:
- incorrect indent on 'defaultdicts'
- make `mappingproxy.__class_getitem__.__doc__` consistent with other
  mapping type generic docs



* Move placement of memoryview generic note

Previous placement was at the end of the main docstring, which is
consistent with other types but places it after a section on various
methods (which makes it read somewhat inconsistently). Moving it up
helps resolve.



* Ensure sphinxdoc does not start sentences lowercase

Lowercase class names at the start of sentences are marked out with the
`class` role. In the case of `deque`, documentation already refers to
these as `Deques`, so this form is preferred.

* Apply suggestions from code review



* Fix line endings and wrap more tightly

Line endings fixed by pre-commit ; also re-wrapped the MappingProxyType
text which was too long.

* Use 'ContextVars' style in sphinx doc

---------
(cherry picked from commit 50fe49c879)

Co-authored-by: Stephen Rosen <sirosen@globus.org>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Jelle Zijlstra <906600+JelleZijlstra@users.noreply.github.com>
Co-authored-by: Alex Waygood <66076021+AlexWaygood@users.noreply.github.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
2026-06-02 20:40:52 +00:00
Miss Islington (bot)
d5f93ce156
[3.15] gh-141627: Fix BufferedRandom inheritance documentation (GH-141629) (GH-150801)
BufferedRandom does not inherit from BufferedReader and BufferedWriter
in the C implementation.
(cherry picked from commit 551bc2cb5e)

Co-authored-by: Mohsin Mehmood <55545648+mohsinm-dev@users.noreply.github.com>
2026-06-02 22:23:15 +03:00
Miss Islington (bot)
0aa9f434ad
[3.15] Fix description of the function parameter of shutil.register_archive_format() (GH-145087) (GH-150804)
(cherry picked from commit 18c6d3ccc3)

Co-authored-by: Brian Schubert <brianm.schubert@gmail.com>
2026-06-02 19:20:49 +00:00
Hugo van Kemenade
94a64bbc6c Python 3.15.0b2 2026-06-02 18:28:41 +03:00
Miss Islington (bot)
33b2879c3a
[3.15] gh-149187: Document frozendict() under 'Built-in Functions' (GH-149185)
(cherry picked from commit 86867edb84)

Co-authored-by: Øyvind Rønningstad <oyvind.ronningstad@nordicsemi.no>
2026-06-02 15:18:03 +01:00
Miss Islington (bot)
c5248b7acf
[3.15] gh-89554: Document _thread.LockType as a class (GH-150684) (#150785)
gh-89554: Document _thread.LockType as a class (GH-150684)

_thread.LockType is a class (the type of lock objects), but was documented
with the ".. data::" directive, so ":class:" cross-references to it cannot
resolve against a py:class target.

Switch the entry to ".. class::", move it next to the lock methods, and
document acquire(), release() and locked() as methods of the class.  Keep
the old _thread.lock.* URL fragments working with raw HTML anchors.
(cherry picked from commit e37ce56977)

Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
2026-06-02 13:07:05 +00:00
Hugo van Kemenade
de7576edfa
[3.15] Update SOURCE_URI for 3.15 branch (#150783) 2026-06-02 12:05:14 +00:00
Miss Islington (bot)
8fcec28e66
[3.15] Fix typos in C API documentation (GH-149588) (#149662)
Co-authored-by: pengyu lee <lipengyu@kylinos.cn>
2026-06-02 14:31:13 +03:00
Miss Islington (bot)
1835400ff5
[3.15] gh-149738: Fix segmentation fault bug in sqllite3 (GH-149754) (#150768)
gh-149738: Fix segmentation fault bug in sqllite3 (GH-149754)

Deleting the `row_factory` or `text_factory` attribute is no longer allowed.
(cherry picked from commit 60fdb3192b)

Co-authored-by: Sepehr Rasouli <sepehrrasouli06@gmail.com>
2026-06-02 09:36:03 +00:00
Miss Islington (bot)
94c58db977
[3.15] gh-123138: Updated email.headerregistry docs to include required keyword parse_tree (GH-134450) (GH-150623)
(cherry picked from commit 2c20f9ce17)

Co-authored-by: Gustaf <79180496+gostak-dd@users.noreply.github.com>
2026-06-02 09:26:05 +00:00
Miss Islington (bot)
0472179937
[3.15] Fix two typos in 'Exception Handling' C-API documentation (GH-150674) (#150772)
(cherry picked from commit cee3327b92)

Co-authored-by: Manoj K M <manojkm24dev@gmail.com>
2026-06-02 09:22:17 +00:00
Miss Islington (bot)
35dc248372
[3.15] gh-89554: Document typing.ParamSpecArgs and ParamSpecKwargs as classes (GH-150677) (GH-150763)
Use the directive "class" instead of "data" for ParamSpecArgs and ParamSpecKwargs.
(cherry picked from commit 35c314d2b7)

Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
2026-06-02 08:16:05 +00:00
Miss Islington (bot)
b48cf0ec0c
[3.15] gh-89554: Document standard type objects in types as classes (GH-150676) (GH-150761)
Use the directive and the role "class" instead of "data" for classes
exposed in the types module.
(cherry picked from commit bc055444e4)

Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
2026-06-02 08:11:19 +00:00
Miss Islington (bot)
506b41d458
[3.15] gh-89554: Document weakref type objects as classes (GH-150678) (GH-150760)
Use the "class" directive instead of "data" for ReferenceType,
ProxyType and CallableProxyType.
(cherry picked from commit 10c421970b)

Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
2026-06-02 08:08:01 +00:00
Miss Islington (bot)
ef45089660
[3.15] gh-89554: Document NoneType, NotImplementedType and EllipsisType as classes (GH-150682) (GH-150755)
Always use the directive and the role "class" instead of "data" for
NoneType, NotImplementedType and EllipsisType.
(cherry picked from commit e40190e104)

Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
2026-06-02 08:03:51 +00:00
Miss Islington (bot)
848ba18bcd
[3.15] gh-150228: Improve the PEP 829 batch processing APIs (GH-150542) (#150748)
gh-150228: Improve the PEP 829 batch processing APIs (GH-150542)

* gh-150228: Improve the PEP 829 batch processing APIs

As previously discussed with @ncoghlan and approved for 3.15b2 by @hugovk,
this implements the batch processing APIs for addsitedir() and friends.  We
remove the `defer_processing_start_files` flag which required some implicit
module global state, and promote StartupState to the public documented API.

This also moves the bulk of the module global functions into methods of the
`StartupState` class, so it removes the awkward APIs in 3.15b1.  Now, instances
of this class are an accumulator for startup state, using `StartupState.process()`
to process them.  Callers can now batch up startup state themselves by using
the methods on this class.  The module global functions are shims for this
which preserve the legacy APIs and semantics using the new state class.

This PR also fixes the interleaving regression identified by @ncoghlan in the
same issue.  Now, .pth file sys.path extensions are added to sys.path after
the sitedir that the .pth file is found in, restoring the legacy behavior.

Along the way, I've made a lot of improvements to function docstrings,
site.rst documentation, and comments in the code explaining what's going on.

* Add a note that if known_paths is provided to StartupState.__init__(), it
  will get mutated in place.
* Improve some conditional flows.
* Improve some comments.
* Improve the what's new entry.

* Make test_impl_exec_imports_suppressed_by_matching_start() more robust

Based on PR comment, we need to read both the .pth and .start files, and prove
that the .pth file's import line (which passes a bigger increment) is not
called, but the .start file's entry point (which uses the default increment)
is called.

* As per review, move some methods to the private API

_read_pth_file() and _read_start_file() are not intended to be part of the
public API surface outside of the site module, so even though they are used by
methods outside of the StartupState class, make them privately named.

* Resolve several review feedbacks

* Move a `versionadded`
* Better list comprehension formatting (use the output from
  `ruff format --line-length 78`)

* Add docs for site.makepath() and point the case-normalization requirement to
  this utility function.
* Note that StartupState.process() is not idempotent.

* Address another feedback comment

This time, we get rid of the legacy implementation `reset` local, which was
always difficult to understand, and just implement a return value based on the
processing mode selected.

* Changes based on gh-150228 review

The comment by @encukou that started this change:

```
I still see two red flags here though: an argument that doesn't combine with
other arguments, and (another instance of) changing the return type based on
an argument.

Did you consider adding a StartupState.addsitedir(sitedir) method, instead of
the startup_state argument?
```

As it turns out, this is an even cleaner design.  By moving the bulk of the
previous module global functions into `StartupState` methods, we can get rid
of all the awkward `startup_state` keyword-only arguments which conflict
with `known_path` (Petr's first point).  We can also get rid of the
return value dichotomy (Petr's second point) because now we can preserve
exactly the Python 3.14 API in the module global functions, and implement
the better APIs in the class methods.  We also generally don't have to
pass around `process_known_sitedirs`.

Now the following module global functions are essentially shims around
class methods:

* site.addsitedir() -> StartupState.addsitedir()
* site.addusersitepackages() -> StartupState.addusersitepackages()
* site.addsitepackages() -> StartupState.addsitepackages()
* Additional minor changes
* Remove a now unused parameter

(cherry picked from commit 27ebd9abce)

Co-authored-by: Barry Warsaw <barry@python.org>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
2026-06-02 02:11:51 +00:00
Miss Islington (bot)
7e9057d892
[3.15] gh-148672: Document namespace subpackages inside regular packages (GH-150056) (#150729)
gh-148672: Document namespace subpackages inside regular packages (GH-150056)
(cherry picked from commit 9ba2a89179)

Co-authored-by: Taeknology <20297177+Taeknology@users.noreply.github.com>
2026-06-01 19:31:36 +00:00
Miss Islington (bot)
fed5c744df
[3.15] gh-140553: Mark *gettext parameters as positionaly only in documentation (GH-140598)
(cherry picked from commit 1837c17bc7)

Co-authored-by: Stan Ulbrych <stan@python.org>
2026-05-31 20:21:08 +01:00
Miss Islington (bot)
ea58c352b7
[3.15] Clarify docs for scheduler.run(blocking=False) (GH-129575) (GH-150668)
(cherry picked from commit 2f8f569ba9)

Co-authored-by: M. Greyson Christoforo <grey@christoforo.net>
2026-05-31 12:19:43 +00:00
Miss Islington (bot)
2fb2a23cbd
[3.15] gh-150636: Clarify difference between copy.copy() and the copy() methods (GH-150637) (GH-150665)
(cherry picked from commit 1de909b324)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Pieter Eendebak <pieter.eendebak@gmail.com>
Co-authored-by: Stan Ulbrych <stan@python.org>
2026-05-31 12:16:58 +00:00
Miss Islington (bot)
c5655dfe51
[3.15] Correct frexp() docs for zero and non-finite numbers (GH-149753) (GH-150652)
0.5 <= abs(m) < 1 is only true for finite nonzero numbers
(cherry picked from commit 5b5ffce05c)

Co-authored-by: Sergey B Kirpichev <skirpichev@gmail.com>
2026-05-31 10:04:18 +00:00