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 5959from _pytest .pathlib import import_path
6060from _pytest .pathlib import ImportMode
6161from _pytest .pathlib import resolve_package_path
62+ from _pytest .pathlib import safe_exists
6263from _pytest .stash import Stash
6364from _pytest .warning_types import PytestConfigWarning
6465from _pytest .warning_types import warn_explicit_for
@@ -562,12 +563,8 @@ def _set_initial_conftests(
562563 anchor = absolutepath (current / path )
563564
564565 # Ensure we do not break if what appears to be an anchor
565- # is in fact a very long option (#10169).
566- try :
567- anchor_exists = anchor .exists ()
568- except OSError : # pragma: no cover
569- anchor_exists = False
570- if anchor_exists :
566+ # is in fact a very long option (#10169, #11394).
567+ if safe_exists (anchor ):
571568 self ._try_load_conftest (anchor , importmode , rootpath )
572569 foundanchor = True
573570 if not foundanchor :
Original file line number Diff line number Diff line change 1515from _pytest .outcomes import fail
1616from _pytest .pathlib import absolutepath
1717from _pytest .pathlib import commonpath
18+ from _pytest .pathlib import safe_exists
1819
1920
2021def _parse_ini_config (path : Path ) -> iniconfig .IniConfig :
@@ -147,14 +148,6 @@ def get_dir_from_path(path: Path) -> Path:
147148 return path
148149 return path .parent
149150
150- def safe_exists (path : Path ) -> bool :
151- # This can throw on paths that contain characters unrepresentable at the OS level,
152- # or with invalid syntax on Windows (https://bugs.python.org/issue35306)
153- try :
154- return path .exists ()
155- except OSError :
156- return False
157-
158151 # These look like paths but may not exist
159152 possible_paths = (
160153 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
@@ -780,7 +779,7 @@ def safe_exists(p: Path) -> bool:
780779 """Like Path.exists(), but account for input arguments that might be too long (#11394)."""
781780 try :
782781 return p .exists ()
783- except OSError as e :
784- if e . errno == errno . ENAMETOOLONG :
785- return False
786- raise
782+ except ( ValueError , OSError ) :
783+ # ValueError: stat: path too long for Windows
784+ # OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect
785+ 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