Skip to content

Commit

Permalink
fix: Fix normalization of extension paths on the annoying operating s…
Browse files Browse the repository at this point in the history
…ystem and Python 3.13

Python 3.13 changed `os.path.isabs`:

> On Windows, `isabs()` no longer considers paths starting with exactly one slash (`\` or `/`) to be absolute.

See https://docs.python.org/3/whatsnew/3.13.html#os-path.
  • Loading branch information
pawamoy committed Nov 26, 2024
1 parent 6c5b5c3 commit 101a6dc
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 9 deletions.
8 changes: 3 additions & 5 deletions src/mkdocstrings_handlers/python/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,11 +469,9 @@ def normalize_extension_paths(self, extensions: Sequence) -> Sequence:
pth = str(ext)
options = None

if pth.endswith(".py") or ".py:" in pth or "/" in pth or "\\" in pth: # noqa: SIM102
# This is a sytem path. Normalize it.
if not os.path.isabs(pth):
# Make path absolute relative to config file path.
pth = os.path.normpath(os.path.join(base_path, pth))
if pth.endswith(".py") or ".py:" in pth or "/" in pth or "\\" in pth:
# This is a system path. Normalize it, make it absolute relative to config file path.
pth = os.path.abspath(os.path.join(base_path, pth))

if options is not None:
normalized.append({pth: options})
Expand Down
9 changes: 5 additions & 4 deletions tests/test_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,11 @@ def test_expand_globs_without_changing_directory() -> None:
(True, {"extension.py:SomeExtension": {"option": "value"}}),
(True, {"path/to/extension.py": {"option": "value"}}),
(True, {"path/to/extension.py:SomeExtension": {"option": "value"}}),
(False, "/absolute/path/to/extension.py"),
(False, "/absolute/path/to/extension.py:SomeExtension"),
(False, {"/absolute/path/to/extension.py": {"option": "value"}}),
(False, {"/absolute/path/to/extension.py:SomeExtension": {"option": "value"}}),
# True because OS path normalization.
(True, "/absolute/path/to/extension.py"),
(True, "/absolute/path/to/extension.py:SomeExtension"),
(True, {"/absolute/path/to/extension.py": {"option": "value"}}),
(True, {"/absolute/path/to/extension.py:SomeExtension": {"option": "value"}}),
(False, "dot.notation.path.to.extension"),
(False, "dot.notation.path.to.pyextension"),
(False, {"dot.notation.path.to.extension": {"option": "value"}}),
Expand Down

0 comments on commit 101a6dc

Please sign in to comment.