Skip to content

Commit 223df0d

Browse files
Merge pull request #560 from cjwatson/py314-path-is-dir
Fix test_dir_without_exec_permission on Python 3.14
2 parents 5371582 + 7d44ef0 commit 223df0d

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

b2sdk/_internal/scan/folder.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import os
1414
import platform
1515
import re
16+
import stat
1617
import sys
1718
from abc import ABCMeta, abstractmethod
1819
from pathlib import Path
@@ -274,14 +275,19 @@ def _walk_relative_paths(
274275
reporter.invalid_name(str(local_path), str(e))
275276
continue
276277

278+
# Deliberately don't use Path.is_dir here: for directories
279+
# without search permission, Python 3.13 raises PermissionError
280+
# while Python 3.14 returns False.
277281
try:
278-
is_dir = local_path.is_dir()
282+
is_dir = stat.S_ISDIR(local_path.stat().st_mode)
279283
except PermissionError: # `chmod -x dir` can trigger this
280284
if reporter is not None and not policies_manager.should_exclude_local_directory(
281285
str(relative_file_path)
282286
):
283287
reporter.local_permission_error(str(local_path))
284288
continue
289+
except (OSError, ValueError):
290+
is_dir = False
285291

286292
if is_dir:
287293
if policies_manager.should_exclude_local_directory(str(relative_file_path)):

changelog.d/+py314-test.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Use `stat.S_ISDIR` check for local folder children scanning instead of `Path.is_dir` to account for an api change in Python 3.14.

0 commit comments

Comments
 (0)