mirror of
https://github.com/python/cpython.git
synced 2025-10-19 07:53:46 +00:00
Compare commits
2 commits
889e9184bf
...
f59236b746
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f59236b746 | ||
![]() |
e07b78c01a |
4 changed files with 79 additions and 0 deletions
12
Lib/pathlib/_local.py
Normal file
12
Lib/pathlib/_local.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
"""
|
||||
This module exists so that pathlib objects pickled under Python 3.13 can be
|
||||
unpickled in 3.14+.
|
||||
"""
|
||||
|
||||
from pathlib import *
|
||||
|
||||
__all__ = [
|
||||
"UnsupportedOperation",
|
||||
"PurePath", "PurePosixPath", "PureWindowsPath",
|
||||
"Path", "PosixPath", "WindowsPath",
|
||||
]
|
60
Lib/test/test_free_threading/test_uuid.py
Executable file
60
Lib/test/test_free_threading/test_uuid.py
Executable file
|
@ -0,0 +1,60 @@
|
|||
import os
|
||||
import unittest
|
||||
|
||||
from test.support import import_helper, threading_helper
|
||||
from test.support.threading_helper import run_concurrently
|
||||
from uuid import SafeUUID
|
||||
|
||||
c_uuid = import_helper.import_module("_uuid")
|
||||
|
||||
NTHREADS = 10
|
||||
UUID_PER_THREAD = 1000
|
||||
|
||||
|
||||
@threading_helper.requires_working_threading()
|
||||
class UUIDTests(unittest.TestCase):
|
||||
@unittest.skipUnless(os.name == "posix", "POSIX only")
|
||||
def test_generate_time_safe(self):
|
||||
uuids = []
|
||||
|
||||
def worker():
|
||||
local_uuids = []
|
||||
for _ in range(UUID_PER_THREAD):
|
||||
uuid, is_safe = c_uuid.generate_time_safe()
|
||||
self.assertIs(type(uuid), bytes)
|
||||
self.assertEqual(len(uuid), 16)
|
||||
# Collect the UUID only if it is safe. If not, we cannot ensure
|
||||
# UUID uniqueness. According to uuid_generate_time_safe() man
|
||||
# page, it is theoretically possible for two concurrently
|
||||
# running processes to generate the same UUID(s) if the return
|
||||
# value is not 0.
|
||||
if is_safe == SafeUUID.safe:
|
||||
local_uuids.append(uuid)
|
||||
|
||||
# Merge all safe uuids
|
||||
uuids.extend(local_uuids)
|
||||
|
||||
run_concurrently(worker_func=worker, nthreads=NTHREADS)
|
||||
self.assertEqual(len(uuids), len(set(uuids)))
|
||||
|
||||
@unittest.skipUnless(os.name == "nt", "Windows only")
|
||||
def test_UuidCreate(self):
|
||||
uuids = []
|
||||
|
||||
def worker():
|
||||
local_uuids = []
|
||||
for _ in range(UUID_PER_THREAD):
|
||||
uuid = c_uuid.UuidCreate()
|
||||
self.assertIs(type(uuid), bytes)
|
||||
self.assertEqual(len(uuid), 16)
|
||||
local_uuids.append(uuid)
|
||||
|
||||
# Merge all uuids
|
||||
uuids.extend(local_uuids)
|
||||
|
||||
run_concurrently(worker_func=worker, nthreads=NTHREADS)
|
||||
self.assertEqual(len(uuids), len(set(uuids)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -293,6 +293,12 @@ def test_pickling_common(self):
|
|||
self.assertEqual(hash(pp), hash(p))
|
||||
self.assertEqual(str(pp), str(p))
|
||||
|
||||
def test_unpicking_3_13(self):
|
||||
data = (b"\x80\x04\x95'\x00\x00\x00\x00\x00\x00\x00\x8c\x0e"
|
||||
b"pathlib._local\x94\x8c\rPurePosixPath\x94\x93\x94)R\x94.")
|
||||
p = pickle.loads(data)
|
||||
self.assertIsInstance(p, pathlib.PurePosixPath)
|
||||
|
||||
def test_repr_common(self):
|
||||
for pathstr in ('a', 'a/b', 'a/b/c', '/', '/a/b', '/a/b/c'):
|
||||
with self.subTest(pathstr=pathstr):
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix unpickling of :mod:`pathlib` objects that were pickled in Python 3.13.
|
Loading…
Add table
Add a link
Reference in a new issue