Commit graph

117842 commits

Author SHA1 Message Date
Miss Islington (bot)
1e15c1501c
[3.12] ast docs: Fix incorrect link on keyword (GH-108728) (#108737)
`ast` docs: Fix incorrect link on `keyword` (GH-108728)

In two places, Sphinx was erroneously adding links to the `keyword` module instead of the `ast.keyword` class
(cherry picked from commit c1e2f3b2f7)

Co-authored-by: Alex Povel <git@alexpovel.de>
2023-09-01 15:32:13 +02:00
Miss Islington (bot)
8c3793a539
[3.12] gh-108682: [Enum] raise TypeError if super().__new__ called in custom __new__ (GH-108704) (#108733)
gh-108682: [Enum] raise TypeError if super().__new__ called in custom __new__ (GH-108704)

When overriding the `__new__` method of an enum, the underlying data type should be created directly; i.e. .

    member = object.__new__(cls)
    member = int.__new__(cls, value)
    member = str.__new__(cls, value)

Calling `super().__new__()` finds the lookup version of `Enum.__new__`, and will now raise an exception when detected.
(cherry picked from commit d48760b2f1)

Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
2023-09-01 00:04:55 +02:00
Miss Islington (bot)
a92c60c99b
[3.12] gh-97850: Note in py312 whatsnew that importlib.util.set_loader and importlib.util.module_for_loader have been removed (GH-108719) (#108723)
gh-97850: Note in py312 whatsnew that `importlib.util.set_loader` and `importlib.util.module_for_loader` have been removed (GH-108719)

Note in py312 whatsnew that `importlib.util.set_loader` and `importlib.util.module_for_loader` have been removed
(cherry picked from commit 013a99a47b)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2023-09-01 00:03:02 +02:00
Miss Islington (bot)
bc42d6c604
[3.12] gh-101100: Fix sphinx warnings in threading.rst (GH-108684) (#108707)
gh-101100: Fix sphinx warnings in `threading.rst` (GH-108684)
(cherry picked from commit 991e4e76b5)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
2023-08-31 15:32:39 +02:00
Miss Islington (bot)
1a15d20b75
[3.12] gh-108654: restore comprehension locals before handling exception (GH-108659) (#108700)
gh-108654: restore comprehension locals before handling exception (GH-108659)
(cherry picked from commit d52c4482a8)

Co-authored-by: Carl Meyer <carl@oddbird.net>
Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
2023-08-31 15:32:17 +02:00
Miss Islington (bot)
320d398262
[3.12] gh-108520: Fix bad fork detection in nested multiprocessing use case (GH-108568) (#108691)
gh-108520: Fix bad fork detection in nested multiprocessing use case (GH-108568)

gh-107275 introduced a regression where a SemLock would fail being passed along nested child processes, as the `is_fork_ctx` attribute would be left missing after the first deserialization.

---------

(cherry picked from commit add8d45cbe)

Co-authored-by: albanD <desmaison.alban@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Antoine Pitrou <pitrou@free.fr>
2023-08-30 23:18:49 +02:00
Miss Islington (bot)
420db1027b
[3.12] gh-101100: Fix Sphinx warnings in the Logging Cookbook (GH-108678) (#108680)
gh-101100: Fix Sphinx warnings in the Logging Cookbook (GH-108678)
(cherry picked from commit c7cef54631)

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
2023-08-30 15:21:58 +02:00
Miss Islington (bot)
2e60d58fff
[3.12] Fix typo in multiprocessing docs (GH-108666) (#108677)
Fix typo in multiprocessing docs (GH-108666)
(cherry picked from commit 38ab0dba80)

Co-authored-by: kato8966 <66937409+kato8966@users.noreply.github.com>
2023-08-30 15:21:32 +02:00
Miss Islington (bot)
ecabf1e19f
[3.12] gh-108669: unittest: Fix documentation for TestResult.collectedDurations (GH-108670) (#108672)
gh-108669: unittest: Fix documentation for TestResult.collectedDurations (GH-108670)
(cherry picked from commit 6c484c39be)

Co-authored-by: Sebastian Rittau <srittau@rittau.biz>
2023-08-30 15:21:05 +02:00
Miss Islington (bot)
1d6d05aa82
[3.12] Mention Ellipsis pickling in the docs (GH-103660) (#108661)
Mention Ellipsis pickling in the docs (GH-103660)
(cherry picked from commit 14ec0bb7c3)

Co-authored-by: sterliakov <50529348+sterliakov@users.noreply.github.com>
2023-08-30 15:20:45 +02:00
Erlend E. Aasland
036dd6958a
[3.12] gh-107801: Improve the accuracy of io.IOBase.seek docs (#108268) (#108655)
(cherry picked from commit 8178a88bd8)

- Add param docstrings
- Link to os.SEEK_* constants
- Mention the return value in the initial paragraph

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
2023-08-29 22:19:08 +02:00
Miss Islington (bot)
4afc5d8716
[3.12] gh-108617: Extend interactive session tests for sqlite3 (GH-108556) (#108626)
gh-108617: Extend interactive session tests for sqlite3 (GH-108556)
(cherry picked from commit ecb2bf02a4)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
2023-08-29 20:30:23 +02:00
Miss Islington (bot)
1478a386e6
[3.12] gh-108558: Improve sqlite3 row factory tests (GH-108578) (#108615)
* gh-108558: Improve sqlite3 row factory tests (GH-108578)

Add test_sqlite_row_keys() to explicitly test sqlite3.Row.keys().

Cleanups:
- Reduce test noise by converting docstrings to regular comments
- Reduce boilerplate code by adding a setUp() method to RowFactoryTests

(cherry picked from commit 6eaddc10e9)

Co-authored-by: Edward Schauman-Haigh <142528725+EddInSverige@users.noreply.github.com>
Co-authored-by: Erlend E. Aasland <erlend@python.org>

* Fix backport

---------

Co-authored-by: Edward Schauman-Haigh <142528725+EddInSverige@users.noreply.github.com>
Co-authored-by: Erlend E. Aasland <erlend@python.org>
2023-08-29 20:29:52 +02:00
Miss Islington (bot)
cdca4af6c2
[3.12] gh-108550: Fix sqlite3 CLI regression from gh-108551 (GH-108618) (#108621)
gh-108550: Fix sqlite3 CLI regression from gh-108551 (GH-108618)
(cherry picked from commit c8847841cc)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
2023-08-29 12:54:35 +02:00
Miss Islington (bot)
c942faead2
[3.12] GH-106176, GH-104702: Fix reference leak when importing across multiple threads (GH-108497) (#108612)
GH-106176, GH-104702: Fix reference leak when importing across multiple threads (GH-108497)
(cherry picked from commit 5f85b443f7)

Co-authored-by: Brett Cannon <brett@python.org>
2023-08-29 12:40:05 +02:00
Miss Islington (bot)
ae9bbd16d8
[3.12] Fix misc doc typos (GH-108592) (#108594)
Fix misc doc typos (GH-108592)
(cherry picked from commit 88f1c5b454)

Co-authored-by: xzmeng <aumo@foxmail.com>
2023-08-29 12:38:03 +02:00
Adam Turner
7c7b2bfb3f
[3.12] GH-108202: Combine documentation of `calendar` constants (GH-108492) (#108579)
[3.12] GH-108202: Combine documentation of ``calendar`` constants (GH-108492).
(cherry picked from commit 5d936b6479)
2023-08-29 00:26:48 +02:00
Miss Islington (bot)
f5c5f32f5a
[3.12] gh-108550: Speed up sqlite3 tests (GH-108551) (#108566)
gh-108550: Speed up sqlite3 tests (GH-108551)

Refactor the CLI so we can easily invoke it and mock command-line
arguments. Adapt the CLI tests so we no longer have to launch a
separate process.

Disable the busy handler for all concurrency tests; we have full
control over the order of the SQLite C API calls, so we can safely
do this.

The sqlite3 test suite now completes ~8 times faster than before.

(cherry picked from commit 0e8b3fc718)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
2023-08-29 00:26:29 +02:00
Erlend E. Aasland
b451e9020d
[3.12] gh-64662: Fix virtual table support in sqlite3.Connection.iterdump (#108340) (#108563)
* [3.12] gh-64662: Add virtual table support to sqlite3.Connection.iterdump (#108340)

(cherry picked from commit d0160c7c22)

Co-authored-by: Aviv Palivoda <palaviv@gmail.com>

* The _quote_value helper is not part of 3.12; spell out the replacement

* With quotes

* Ok, let's use explicit quoting

---------

Co-authored-by: Aviv Palivoda <palaviv@gmail.com>
2023-08-29 00:25:35 +02:00
Miss Islington (bot)
5531d03d99
[3.12] Fix typo in typing docs: Remove redundant backtick (GH-108559) (#108560)
Fix typo in typing docs: Remove redundant backtick (GH-108559)
(cherry picked from commit 72b615ab01)

Co-authored-by: nikkie <takuyafjp+develop@gmail.com>
2023-08-29 00:24:41 +02:00
Erlend E. Aasland
f90099c3bd
[3.12] gh-107801: Document io.TextIOWrapper.tell (#108265) (#108547)
(cherry picked from commit 38afa4af9b)
2023-08-28 01:59:48 +02:00
Miss Islington (bot)
311fd96dae
[3.12] Docs: Resolve Sphinx warnings in dis.rst (GH-108476) (#108546)
Docs: Resolve Sphinx warnings in dis.rst (GH-108476)

- Link to the code objects reference
- Suppress link to deliberately undocumented builtins.__build_class__
- Suppress links for example methods
(cherry picked from commit cb1184280b)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
2023-08-28 01:59:35 +02:00
Erlend E. Aasland
32d48ede2f
[3.12] gh-108542: Fix incorrect module name in NEWS entry for gh-105475 (#108543) (#108545)
(cherry picked from commit a429eafef2)
2023-08-28 01:58:48 +02:00
Miss Islington (bot)
752d5254f5
[3.12] Fix grammatical error in stringprep documentation (GH-108414) (#108537)
Fix grammatical error in stringprep documentation (GH-108414)

Remove the word "them", which didn't make grammatical sense.

(cherry picked from commit cd0a8aece9)

Co-authored-by: Matthew James Kraai <kraai@ftbfs.org>
Co-authored-by: KRAAI, MATTHEW [VISUS] <mkraai@its.jnj.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2023-08-27 17:00:07 +02:00
Miss Islington (bot)
07c0e24748
[3.12] Clarify distinction between datetime module and class in deprecation messages (GH-108073) (#108540)
Clarify distinction between datetime module and class in deprecation messages (GH-108073)
(cherry picked from commit 09343dba44)

Co-authored-by: Clément Robert <cr52@protonmail.com>
2023-08-27 16:16:21 +02:00
Miss Islington (bot)
0b0238d6a1
[3.12] gh-105052:update timeit function's description (GH-105060) (#108534)
gh-105052:update timeit function's description (GH-105060)

---------

(cherry picked from commit 7096a2be33)

Co-authored-by: R <cherrymelon@foxmail.com>
2023-08-27 16:15:01 +02:00
Miss Islington (bot)
387cb9f324
[3.12] gh-107453: Document errno.{ECANCELED,EOWNERDEAD,ENOTRECOVERABLE,ENOTSUP} (GH-107486) (#108529)
gh-107453: Document errno.{ECANCELED,EOWNERDEAD,ENOTRECOVERABLE,ENOTSUP} (GH-107486)
(cherry picked from commit 1ac64237e6)

Co-authored-by: qqwqqw689 <114795525+qqwqqw689@users.noreply.github.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
2023-08-27 16:13:26 +02:00
Miss Islington (bot)
09877a15d5
[3.12] gh-108295: Fix crashes with TypeVar weakrefs (GH-108517) (#108527)
gh-108295: Fix crashes with TypeVar weakrefs (GH-108517)
(cherry picked from commit 482fad7f01)

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
2023-08-27 16:12:57 +02:00
Miss Islington (bot)
3e20303717
[3.12] gh-107913: Fix possible losses of OSError error codes (GH-107930) (#108523)
gh-107913: Fix possible losses of OSError error codes (GH-107930)

Functions like PyErr_SetFromErrno() and SetFromWindowsErr() should be
called immediately after using the C API which sets errno or the Windows
error code.
(cherry picked from commit 2b15536fa9)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
2023-08-27 01:24:40 +02:00
Guido van Rossum
bbdd8895a5
[3.12] gh-108487: Change assert that should've been DEOPT_IF (#108509)
* Remove assert that should've been DEOPT_IF

The assert(method != NULL) in CALL_NO_KW_LIST_APPEND is wrong --
this condition should lead to a deoptimization, and indeed there
is a DEOPT_IF two lines later that will trigger if method == NULL.

This would crash in a devious repro scenario (first seen live
in boto3 tests) when compiled with assertions enabled.
In a production version there is no crash, so impact is limited.

(The crash also appears in main; I will prepare a separate PR.)

* Add back a different assert(self != NULL)

* 📜🤖 Added by blurb_it.

---------

Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
2023-08-27 01:22:40 +02:00
Miss Islington (bot)
208741cc30
[3.12] gh-102211: Document re.{Pattern,Match}’s existence (GH-102212) (#108490)
gh-102211: Document `re.{Pattern,Match}`’s existence (GH-102212)
(cherry picked from commit 6895ddf6cb)

Co-authored-by: Philipp A <flying-sheep@web.de>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2023-08-27 01:21:24 +02:00
Victor Stinner
bba9aa60ae
[3.12] gh-108388: Convert test_concurrent_futures to package (#108401) (#108443)
gh-108388: Convert test_concurrent_futures to package (#108401)

Convert test_concurrent_futures to a package of sub-tests.

(cherry picked from commit aa6f787faa)
2023-08-27 01:20:33 +02:00
Miss Islington (bot)
ce37fbc778
[3.12] Docs: Datamodel: Merge "Notes on using __slots__" with the parent section (GH-108400) (#108474)
Docs: Datamodel: Merge "Notes on using __slots__" with the parent section (GH-108400)
(cherry picked from commit 7f5b1a0661)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
2023-08-25 18:23:11 +02:00
Miss Islington (bot)
334da81992
[3.12] Datamodel: Add headings to the standard type hierarchy (GH-108146) (#108477)
Datamodel: Add headings to the standard type hierarchy (GH-108146)

Dedent content according to the new layout.
(cherry picked from commit 2b7bff0655)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
2023-08-25 18:22:45 +02:00
Miss Islington (bot)
b28aaf98be
[3.12] gh-108418: Speed up bigmem compression tests in dry mode (GH-108419) (#108473)
gh-108418: Speed up bigmem compression tests in dry mode (GH-108419)

Only generate and compress small amount of random data in dry run.
(cherry picked from commit 4ae3edf300)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
2023-08-25 18:22:06 +02:00
Miss Islington (bot)
c5448ab6d4
[3.12] GH-108202: Document `calendar` exceptions (GH-108398) (#108467)
GH-108202: Document ``calendar`` exceptions (GH-108398)
(cherry picked from commit 135098743a)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
2023-08-25 18:20:38 +02:00
Victor Stinner
9a225d7d5b
[3.12] gh-108314: PyDict_GetItemString() mentions UTF-8 (#108448)
gh-108314: PyDict_GetItemString() mentions UTF-8

PyDict_GetItemString(), PyDict_SetItemString() and
PyDict_DelItemString() expects a UTF-8 encoding string for the key.
2023-08-25 18:19:53 +02:00
Miss Islington (bot)
0eb6d87304
[3.12] gh-80527: Change support.requires_legacy_unicode_capi() (GH-108438) (#108446)
gh-80527: Change support.requires_legacy_unicode_capi() (GH-108438)

The decorator now requires to be called with parenthesis:

    @support.requires_legacy_unicode_capi()

instead of:

    @support.requires_legacy_unicode_capi

The implementation now only imports _testcapi when the decorator is
called, so "import test.support" no longer imports the _testcapi
extension.
(cherry picked from commit 995f4c48e1)

Co-authored-by: Victor Stinner <vstinner@python.org>
2023-08-25 18:18:24 +02:00
Miss Islington (bot)
22621907ee
[3.12] gh-108388: Split test_multiprocessing_spawn (GH-108396) (#108442)
gh-108388: Split test_multiprocessing_spawn (GH-108396)

Split test_multiprocessing_fork, test_multiprocessing_forkserver and
test_multiprocessing_spawn into test packages. Each package is made
of 4 sub-tests: processes, threads, manager and misc. It allows
running more tests in parallel and so reduce the total test duration.
(cherry picked from commit aa9a359ca2)

Co-authored-by: Victor Stinner <vstinner@python.org>
2023-08-25 18:15:53 +02:00
Miss Islington (bot)
09487a202f
[3.12] gh-107432 Update Porting Python 2 Code to Python 3 how-to (GH-107434) (#108409)
gh-107432 Update Porting Python 2 Code to Python 3 how-to (GH-107434)

https://docs.python.org/3/howto/pyporting.htmlGH-porting-python-2-code-to-python-3 was written for another time. In this patch:

- material that frames Python 3 as "new" is removed
- descriptions and directions have been trimmed
(cherry picked from commit 809ea7c4b6)

Co-authored-by: Daniele Procida <daniele@vurt.org>
2023-08-24 12:30:57 +02:00
Miss Islington (bot)
20357ed2a4
[3.12] gh-108111: Flush gzip write buffer before seeking, fixing bad writes (GH-108341) (#108402)
gh-108111: Flush gzip write buffer before seeking, fixing bad writes (GH-108341)
(cherry picked from commit 2eb60c1934)

Co-authored-by: Chris Markiewicz <effigies@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
2023-08-24 12:30:16 +02:00
Łukasz Langa
459f24aef0
[3.12] gh-108342: Make ssl TestPreHandshakeClose more reliable (GH-108370) (#108404)
* In preauth tests of test_ssl, explicitly break reference cycles
  invoving SingleConnectionTestServerThread to make sure that the
  thread is deleted. Otherwise, the test marks the environment as
  altered because the threading module sees a "dangling thread"
  (SingleConnectionTestServerThread). This test leak was introduced
  by the test added for the fix of issue gh-108310.
* Use support.SHORT_TIMEOUT instead of hardcoded 1.0 or 2.0 seconds
  timeout.
* SingleConnectionTestServerThread.run() catchs TimeoutError
* Fix a race condition (missing synchronization) in
  test_preauth_data_to_tls_client(): the server now waits until the
  client connect() completed in call_after_accept().
* test_https_client_non_tls_response_ignored() calls server.join()
  explicitly.
* Replace "localhost" with server.listener.getsockname()[0].
(cherry picked from commit 592bacb6fc)

Co-authored-by: Victor Stinner <vstinner@python.org>
2023-08-24 12:08:43 +02:00
Miss Islington (bot)
9903fe1c2a
[3.12] gh-108388: regrtest splits test_asyncio package (GH-108393) (#108397)
gh-108388: regrtest splits test_asyncio package (GH-108393)

Currently, test_asyncio package is only splitted into sub-tests when
using command "./python -m test". With this change, it's also
splitted when passing it on the command line:
"./python -m test test_asyncio".

Remove the concept of "STDTESTS". Python is now mature enough to not
have to bother with that anymore. Removing STDTESTS simplify the
code.
(cherry picked from commit 174e9da083)

Co-authored-by: Victor Stinner <vstinner@python.org>
2023-08-24 10:20:40 +02:00
Miss Islington (bot)
b312d4fd7e
[3.12] gh-70766: Mention the object getstate caveat in 3.11 What's new. (GH-108379) (#108384)
gh-70766: Mention the object getstate caveat in 3.11 What's new. (GH-108379)
(cherry picked from commit b6be18812c)

Co-authored-by: Gregory P. Smith <greg@krypto.org>
2023-08-24 01:44:50 +02:00
Miss Islington (bot)
9cf49aaaa0
[3.12] gh-77377: Ensure multiprocessing SemLock is valid for spawn-based Process before serializing it (GH-107275) (#108377)
gh-77377: Ensure multiprocessing SemLock is valid for spawn-based Process before serializing it (GH-107275)

Ensure multiprocessing SemLock is valid for spawn Process before serializing it.

Creating a multiprocessing SemLock with a fork context, and then trying to pass it to a spawn-created Process, would segfault if not detected early.

---------

(cherry picked from commit 1700d34d31)

Co-authored-by: albanD <desmaison.alban@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Antoine Pitrou <pitrou@free.fr>
2023-08-24 01:44:07 +02:00
Miss Islington (bot)
3aa7df6544
[3.12] gh-108267: Dataclasses docs: Fix object.__setattr__ typo (GH-108355) (#108358)
gh-108267: Dataclasses docs: Fix object.__setattr__ typo (GH-108355)

Fixed a sentence in dataclasses.rst

Changed "__setattr__" to "object.__setattr__" in a section that was specifically supposed to refer to the __setattr__ method of the object class. Also suppressed the link to the data model docs for __setattr__, since we're talking about a specific __setattr__ implementation, not __setattr__ methods in general.
(cherry picked from commit 79fdacc005)

Co-authored-by: FrozenBob <30644137+FrozenBob@users.noreply.github.com>
2023-08-23 13:46:03 +02:00
Miss Islington (bot)
0d6e657689
[3.12] gh-105776: Fix test_cppext when CC contains -std=c11 option (GH-108343) (#108345)
gh-105776: Fix test_cppext when CC contains -std=c11 option (GH-108343)

Fix test_cppext when the C compiler command has the "-std=c11" option.
Remove "-std=" options from the compiler command.
(cherry picked from commit 9173b2bbe1)

Co-authored-by: Victor Stinner <vstinner@python.org>
2023-08-23 13:45:37 +02:00
Miss Islington (bot)
61dbf46ae3
[3.12] gh-108342: Break ref cycle in SSLSocket._create() exc (GH-108344) (#108348)
Explicitly break a reference cycle when SSLSocket._create() raises an
exception. Clear the variable storing the exception, since the
exception traceback contains the variables and so creates a reference
cycle.

This test leak was introduced by the test added for the fix of GH-108310.
(cherry picked from commit 64f9935035)

Co-authored-by: Victor Stinner <vstinner@python.org>
2023-08-23 12:09:55 +02:00
Miss Islington (bot)
314c98d293
[3.12] gh-107136: Remove Plausible for docs metrics (GH-107856) (#108334)
(cherry picked from commit fc23f34cc9)

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
2023-08-23 11:01:19 +02:00
Miss Islington (bot)
200af4294e
[3.12] GH-92584: Remove distutils from the newtypes tutorial includes (GH-108024) (#108333)
GH-92584: Remove distutils from the newtypes tutorial includes (GH-108024)
(cherry picked from commit e97b7bef4f)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
2023-08-22 22:07:15 +02:00