You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The tempfile._infer_return_type function cannot infer the type of os.PathLike objects. #89355
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2021-09-14.05:44:04.045>labels= ['type-bug', '3.8', '3.9', '3.10', '3.7', 'library']
title='The tempfile._infer_return_type function cannot infer the type of os.PathLike objects.'updated_at=<Date2021-10-20.21:27:38.952>user='https://github.com/rekyungmin'
The tempfile module has been updated to accept an object implementing os.PathLike protocol for path-related parameters as of Python 3.6 (e.g. dir parameter). An os.PathLike object represents a filesystem path as a str or bytes object (i.e. def __fspath__(self) -> Union[str, bytes]:). However, if an object implementing os.PathLike[bytes] is passed as a dir argument, a TypeError is raised. This bug occurs because the tempfile._infer_return_type function considers all objects other than bytes as str type.
from typing import Union
class FakePath:
def __init__(self, path):
self.path = path
def __fspath__(self) -> Union[str, bytes]:
return self.path
if __name__ == "__main__":
from tempfile import TemporaryDirectory
# You need to create `existing_path` directory
with TemporaryDirectory(dir=FakePath("existing_path")) as str_path:
print(str_path) # 'existing_path/...'
with TemporaryDirectory(dir=FakePath(b"existing_path")) as byte_path:
print(byte_path) # expected b'existing_path/...' but raised TypeError
New changeset 6270d3e by Kyungmin Lee in branch 'main': bpo-45192: Fix a bug that infers the type of an os.PathLike[bytes] object as str (GH-28323) 6270d3e
New changeset d33fae7 by Miss Islington (bot) in branch '3.9': bpo-45192: Fix a bug that infers the type of an os.PathLike[bytes] object as str (GH-28323) (GH-29112) d33fae7
New changeset 64e83c7 by Miss Islington (bot) in branch '3.10': bpo-45192: Fix a bug that infers the type of an os.PathLike[bytes] object as str (GH-28323) (GH-29111) 64e83c7
Activity
rekyungmin commentedon Sep 14, 2021
The tempfile module has been updated to accept an object implementing os.PathLike protocol for path-related parameters as of Python 3.6 (e.g. dir parameter). An os.PathLike object represents a filesystem path as a str or bytes object (i.e. def __fspath__(self) -> Union[str, bytes]:). However, if an object implementing os.PathLike[bytes] is passed as a dir argument, a TypeError is raised. This bug occurs because the tempfile._infer_return_type function considers all objects other than bytes as str type.
rekyungmin commentedon Sep 14, 2021
akulakov commentedon Oct 17, 2021
This is a duplicate of bpo-29447, so if this is merged, the other issue should also be closed as fixed.
ambv commentedon Oct 20, 2021
New changeset 6270d3e by Kyungmin Lee in branch 'main':
bpo-45192: Fix a bug that infers the type of an os.PathLike[bytes] object as str (GH-28323)
6270d3e
ambv commentedon Oct 20, 2021
New changeset d33fae7 by Miss Islington (bot) in branch '3.9':
bpo-45192: Fix a bug that infers the type of an os.PathLike[bytes] object as str (GH-28323) (GH-29112)
d33fae7
ambv commentedon Oct 20, 2021
New changeset 64e83c7 by Miss Islington (bot) in branch '3.10':
bpo-45192: Fix a bug that infers the type of an os.PathLike[bytes] object as str (GH-28323) (GH-29111)
64e83c7
furkanonder commentedon May 9, 2023
@ambv Issue seems to resolved. We can close the issue.