Skip to content

Commit 7039285

Browse files
committed
remove python 3.8 compatibility cruft
1 parent 98989b4 commit 7039285

10 files changed

+488
-581
lines changed

pdoc/__main__.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import sys
88
import warnings
99

10-
from pdoc._compat import BooleanOptionalAction
1110
import pdoc.doc
1211
import pdoc.extract
1312
import pdoc.render
@@ -57,7 +56,7 @@
5756
)
5857
renderopts.add_argument(
5958
"--include-undocumented",
60-
action=BooleanOptionalAction,
59+
action=argparse.BooleanOptionalAction,
6160
default=True,
6261
help="Show classes/functions/variables that do not have a docstring.",
6362
)

pdoc/_compat.py

-88
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,6 @@
11
# fmt: off
22
import sys
33

4-
if sys.version_info >= (3, 9):
5-
from functools import cache
6-
else: # pragma: no cover
7-
from functools import lru_cache
8-
9-
cache = lru_cache(maxsize=None)
10-
11-
if sys.version_info >= (3, 9):
12-
from ast import unparse as ast_unparse
13-
else: # pragma: no cover
14-
from astunparse import unparse as _unparse
15-
16-
def ast_unparse(t): # type: ignore
17-
return _unparse(t).strip("\t\n \"'")
18-
194
if sys.version_info >= (3, 12):
205
from ast import TypeAlias as ast_TypeAlias
216
else: # pragma: no cover
@@ -34,33 +19,12 @@ class TypeAliasType:
3419
class TypeAlias:
3520
pass
3621

37-
if sys.version_info >= (3, 9):
38-
from types import GenericAlias
39-
else: # pragma: no cover
40-
from typing import _GenericAlias as GenericAlias
41-
4222
if sys.version_info >= (3, 10):
4323
from types import UnionType # type: ignore
4424
else: # pragma: no cover
4525
class UnionType:
4626
pass
4727

48-
if sys.version_info >= (3, 9):
49-
removesuffix = str.removesuffix
50-
else: # pragma: no cover
51-
def removesuffix(x: str, suffix: str):
52-
if x.endswith(suffix):
53-
x = x[: -len(suffix)]
54-
return x
55-
56-
if sys.version_info >= (3, 9):
57-
removeprefix = str.removeprefix
58-
else: # pragma: no cover
59-
def removeprefix(x: str, prefix: str):
60-
if x.startswith(prefix):
61-
x = x[len(prefix):]
62-
return x
63-
6428

6529
if (3, 9) <= sys.version_info < (3, 9, 8) or (3, 10) <= sys.version_info < (3, 10, 1): # pragma: no cover
6630
import inspect
@@ -76,53 +40,6 @@ def formatannotation(annotation) -> str:
7640
else:
7741
from inspect import formatannotation
7842

79-
if sys.version_info >= (3, 9):
80-
from argparse import BooleanOptionalAction
81-
else: # pragma: no cover
82-
# https://github.com/python/cpython/pull/27672
83-
from argparse import Action
84-
85-
class BooleanOptionalAction(Action): # pragma: no cover
86-
def __init__(self,
87-
option_strings,
88-
dest,
89-
default=None,
90-
type=None,
91-
choices=None,
92-
required=False,
93-
help=None,
94-
metavar=None):
95-
96-
_option_strings = []
97-
for option_string in option_strings:
98-
_option_strings.append(option_string)
99-
100-
if option_string.startswith('--'):
101-
option_string = '--no-' + option_string[2:]
102-
_option_strings.append(option_string)
103-
104-
if help is not None and default is not None:
105-
help += " (default: %(default)s)"
106-
107-
super().__init__(
108-
option_strings=_option_strings,
109-
dest=dest,
110-
nargs=0,
111-
default=default,
112-
type=type,
113-
choices=choices,
114-
required=required,
115-
help=help,
116-
metavar=metavar)
117-
118-
def __call__(self, parser, namespace, values, option_string=None):
119-
if option_string in self.option_strings:
120-
setattr(namespace, self.dest, not option_string.startswith('--no-'))
121-
122-
def format_usage(self):
123-
return ' | '.join(self.option_strings)
124-
125-
12643
if sys.version_info >= (3, 10):
12744
from typing import is_typeddict
12845
else: # pragma: no cover
@@ -134,15 +51,10 @@ def is_typeddict(tp):
13451

13552

13653
__all__ = [
137-
"cache",
138-
"ast_unparse",
13954
"ast_TypeAlias",
14055
"TypeAliasType",
14156
"TypeAlias",
142-
"GenericAlias",
14357
"UnionType",
144-
"removesuffix",
14558
"formatannotation",
146-
"BooleanOptionalAction",
14759
"is_typeddict",
14860
]

pdoc/doc.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from collections.abc import Callable
2424
import dataclasses
2525
import enum
26+
from functools import cache
2627
from functools import cached_property
2728
from functools import singledispatchmethod
2829
from functools import wraps
@@ -48,7 +49,6 @@
4849
from pdoc import extract
4950
from pdoc._compat import TypeAlias
5051
from pdoc._compat import TypeAliasType
51-
from pdoc._compat import cache
5252
from pdoc._compat import formatannotation
5353
from pdoc._compat import is_typeddict
5454
from pdoc.doc_types import GenericAlias

pdoc/doc_ast.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from collections.abc import Iterator
1212
from dataclasses import dataclass
1313
import inspect
14+
from functools import cache
1415
from itertools import tee
1516
from itertools import zip_longest
1617
import types
@@ -23,8 +24,6 @@
2324
import pdoc
2425

2526
from ._compat import ast_TypeAlias
26-
from ._compat import ast_unparse
27-
from ._compat import cache
2827

2928
if TYPE_CHECKING:
3029
import pdoc.doc_types
@@ -81,7 +80,7 @@ def parse(obj):
8180
@cache
8281
def unparse(tree: ast.AST):
8382
"""`ast.unparse`, but cached."""
84-
return ast_unparse(tree)
83+
return ast.unparse(tree)
8584

8685

8786
@dataclass

pdoc/doc_pyi.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from __future__ import annotations
88

99
import importlib.util
10+
from functools import cache
1011
from pathlib import Path
1112
import sys
1213
import traceback
@@ -17,7 +18,6 @@
1718

1819
from pdoc import doc
1920

20-
from ._compat import cache
2121

2222
overload_docstr = typing.overload(lambda: None).__doc__
2323

pdoc/doc_types.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import sys
1515
import types
1616
from types import BuiltinFunctionType
17+
from types import GenericAlias
1718
from types import ModuleType
1819
import typing
1920
from typing import TYPE_CHECKING
@@ -24,7 +25,6 @@
2425
import warnings
2526

2627
from . import extract
27-
from ._compat import GenericAlias
2828
from ._compat import UnionType
2929
from .doc_ast import type_checking_sections
3030

pdoc/docstrings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
import inspect
1818
import mimetypes
1919
import os
20+
from functools import cache
2021
from pathlib import Path
2122
import re
2223
from textwrap import dedent
2324
from textwrap import indent
2425
import warnings
2526

26-
from ._compat import cache
2727

2828

2929
@cache

pdoc/render_helpers.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import inspect
99
import os
1010
import re
11+
from functools import cache
1112
from unittest.mock import patch
1213
import warnings
1314

@@ -28,8 +29,6 @@
2829
import pdoc.markdown2
2930

3031
from . import docstrings
31-
from ._compat import cache
32-
from ._compat import removesuffix
3332

3433
lexer = pygments.lexers.PythonLexer()
3534
"""
@@ -328,7 +327,7 @@ def linkify_repl(m: re.Match):
328327
plain_text = text.replace(
329328
'</span><span class="o">.</span><span class="n">', "."
330329
)
331-
identifier = removesuffix(plain_text, "()")
330+
identifier = plain_text.removesuffix("()")
332331
mod: pdoc.doc.Module = context["module"]
333332

334333
# Check if this is a relative reference. These cannot be local and need to be resolved.
@@ -462,7 +461,7 @@ def link(context: Context, spec: tuple[str, str], text: str | None = None) -> st
462461
if mod.modulename == modulename:
463462
fullname = qualname
464463
else:
465-
fullname = removesuffix(f"{modulename}.{qualname}", ".")
464+
fullname = f"{modulename}.{qualname}".removesuffix(".")
466465

467466
if qualname:
468467
qualname = f"#{qualname}"

0 commit comments

Comments
 (0)