File tree Expand file tree Collapse file tree 4 files changed +10
-22
lines changed Expand file tree Collapse file tree 4 files changed +10
-22
lines changed Original file line number Diff line number Diff line change 5757from _pytest .pathlib import import_path
5858from _pytest .pathlib import ImportMode
5959from _pytest .pathlib import resolve_package_path
60+ from _pytest .pathlib import safe_exists
6061from _pytest .stash import Stash
6162from _pytest .warning_types import PytestConfigWarning
6263from _pytest .warning_types import warn_explicit_for
@@ -557,12 +558,8 @@ def _set_initial_conftests(
557558 anchor = absolutepath (current / path )
558559
559560 # Ensure we do not break if what appears to be an anchor
560- # is in fact a very long option (#10169).
561- try :
562- anchor_exists = anchor .exists ()
563- except OSError : # pragma: no cover
564- anchor_exists = False
565- if anchor_exists :
561+ # is in fact a very long option (#10169, #11394).
562+ if safe_exists (anchor ):
566563 self ._try_load_conftest (anchor , importmode , rootpath )
567564 foundanchor = True
568565 if not foundanchor :
Original file line number Diff line number Diff line change 1616from _pytest .outcomes import fail
1717from _pytest .pathlib import absolutepath
1818from _pytest .pathlib import commonpath
19+ from _pytest .pathlib import safe_exists
1920
2021if TYPE_CHECKING :
2122 from . import Config
@@ -151,14 +152,6 @@ def get_dir_from_path(path: Path) -> Path:
151152 return path
152153 return path .parent
153154
154- def safe_exists (path : Path ) -> bool :
155- # This can throw on paths that contain characters unrepresentable at the OS level,
156- # or with invalid syntax on Windows (https://bugs.python.org/issue35306)
157- try :
158- return path .exists ()
159- except OSError :
160- return False
161-
162155 # These look like paths but may not exist
163156 possible_paths = (
164157 absolutepath (get_file_part_from_node_id (arg ))
Original file line number Diff line number Diff line change 11import atexit
22import contextlib
3- import errno
43import fnmatch
54import importlib .util
65import itertools
@@ -798,7 +797,7 @@ def safe_exists(p: Path) -> bool:
798797 """Like Path.exists(), but account for input arguments that might be too long (#11394)."""
799798 try :
800799 return p .exists ()
801- except OSError as e :
802- if e . errno == errno . ENAMETOOLONG :
803- return False
804- raise
800+ except ( ValueError , OSError ) :
801+ # ValueError: stat: path too long for Windows
802+ # OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect
803+ return False
Original file line number Diff line number Diff line change @@ -688,7 +688,6 @@ def test_safe_exists(tmp_path: Path) -> None:
688688 Path ,
689689 "exists" ,
690690 autospec = True ,
691- side_effect = OSError ( errno . EIO , "another kind of error " ),
691+ side_effect = ValueError ( "name too long " ),
692692 ):
693- with pytest .raises (OSError ):
694- _ = safe_exists (p )
693+ assert safe_exists (p ) is False
You can’t perform that action at this time.
0 commit comments