Skip to content

Commit d84b901

Browse files
committed
Adjust to Python 3.9+ syntax.
1 parent 3c1a9b7 commit d84b901

File tree

9 files changed

+168
-172
lines changed

9 files changed

+168
-172
lines changed

src/antsibull_docs_parser/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
Library for processing Ansible documentation markup.
88
"""
99

10+
from __future__ import annotations
11+
1012
__version__ = "1.1.1.post0"
1113

1214
__all__ = ("__version__",)

src/antsibull_docs_parser/_parser_impl.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
Internal parsing code.
88
"""
99

10+
from __future__ import annotations
11+
1012
import re
11-
import typing as t
1213

1314
_ESCAPE_OR_COMMA = re.compile(r"\\(.)| *(,) *")
1415
_ESCAPE_OR_CLOSING = re.compile(r"\\(.)|([)])")
@@ -19,12 +20,12 @@ def parse_parameters_escaped(
1920
index: int,
2021
parameter_count: int,
2122
strict: bool,
22-
) -> t.Tuple[t.List[str], int, t.Optional[str]]:
23-
result: t.List[str] = []
23+
) -> tuple[list[str], int, str | None]:
24+
result: list[str] = []
2425
parameters_left = parameter_count
2526
while parameters_left > 1:
2627
parameters_left -= 1
27-
value: t.List[str] = []
28+
value: list[str] = []
2829
while True:
2930
match = _ESCAPE_OR_COMMA.search(text, pos=index)
3031
if not match:
@@ -77,8 +78,8 @@ def parse_parameters_unescaped(
7778
index: int,
7879
parameter_count: int,
7980
strict: bool, # pylint: disable=unused-argument
80-
) -> t.Tuple[t.List[str], int, t.Optional[str]]:
81-
result: t.List[str] = []
81+
) -> tuple[list[str], int, str | None]:
82+
result: list[str] = []
8283
first = True
8384
parameters_left = parameter_count
8485
while parameters_left > 1:

src/antsibull_docs_parser/ansible_doc_text.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
Ansible-doc text serialization.
88
"""
99

10+
from __future__ import annotations
11+
1012
import typing as t
1113

1214
from . import dom
@@ -17,7 +19,7 @@
1719
class AnsibleDocTextFormatter(Formatter):
1820
@staticmethod
1921
def _format_option_like(
20-
part: t.Union[dom.OptionNamePart, dom.ReturnValuePart],
22+
part: dom.OptionNamePart | dom.ReturnValuePart,
2123
) -> str:
2224
value = part.value
2325
if value is None:
@@ -54,7 +56,7 @@ def format_italic(self, part: dom.ItalicPart) -> str:
5456
def format_link(self, part: dom.LinkPart) -> str:
5557
return f"{part.text} <{part.url}>"
5658

57-
def format_module(self, part: dom.ModulePart, url: t.Optional[str]) -> str:
59+
def format_module(self, part: dom.ModulePart, url: str | None) -> str:
5860
return f"[{part.fqcn}]"
5961

6062
def format_rst_ref(self, part: dom.RSTRefPart) -> str:
@@ -69,18 +71,16 @@ def format_text(self, part: dom.TextPart) -> str:
6971
def format_env_variable(self, part: dom.EnvVariablePart) -> str:
7072
return f"`{part.name}'"
7173

72-
def format_option_name(self, part: dom.OptionNamePart, url: t.Optional[str]) -> str:
74+
def format_option_name(self, part: dom.OptionNamePart, url: str | None) -> str:
7375
return self._format_option_like(part)
7476

7577
def format_option_value(self, part: dom.OptionValuePart) -> str:
7678
return f"`{part.value}'"
7779

78-
def format_plugin(self, part: dom.PluginPart, url: t.Optional[str]) -> str:
80+
def format_plugin(self, part: dom.PluginPart, url: str | None) -> str:
7981
return f"[{part.plugin.fqcn}]"
8082

81-
def format_return_value(
82-
self, part: dom.ReturnValuePart, url: t.Optional[str]
83-
) -> str:
83+
def format_return_value(self, part: dom.ReturnValuePart, url: str | None) -> str:
8484
return self._format_option_like(part)
8585

8686

@@ -90,12 +90,12 @@ def format_return_value(
9090
def to_ansible_doc_text(
9191
paragraphs: t.Sequence[dom.Paragraph],
9292
formatter: Formatter = DEFAULT_ANSIBLE_DOC_FORMATTER,
93-
link_provider: t.Optional[LinkProvider] = None,
93+
link_provider: LinkProvider | None = None,
9494
par_start: str = "",
9595
par_end: str = "",
9696
par_sep: str = "\n\n",
9797
par_empty: str = "",
98-
current_plugin: t.Optional[dom.PluginIdentifier] = None,
98+
current_plugin: dom.PluginIdentifier | None = None,
9999
) -> str:
100100
return _format_paragraphs(
101101
paragraphs,

src/antsibull_docs_parser/dom.py

Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,14 @@
77
DOM classes used by parser.
88
"""
99

10+
from __future__ import annotations
11+
1012
import abc
11-
import sys
1213
import typing as t
1314
from enum import Enum
1415
from typing import NamedTuple
1516

16-
if sys.version_info >= (3, 8):
17-
ErrorType = t.Union[
18-
t.Literal["ignore"], t.Literal["message"], t.Literal["exception"]
19-
]
20-
else:
21-
# Python 3.6/3.7 do not have t.Literal
22-
ErrorType = str # pragma: no cover
17+
ErrorType = t.Union[t.Literal["ignore"] | t.Literal["message"] | t.Literal["exception"]]
2318

2419

2520
class PluginIdentifier(NamedTuple):
@@ -47,101 +42,101 @@ class PartType(Enum):
4742

4843
class TextPart(NamedTuple):
4944
text: str
50-
source: t.Optional[str] = None
51-
type: "t.Literal[PartType.TEXT]" = PartType.TEXT
45+
source: str | None = None
46+
type: t.Literal[PartType.TEXT] = PartType.TEXT
5247

5348

5449
class ItalicPart(NamedTuple):
5550
text: str
56-
source: t.Optional[str] = None
57-
type: "t.Literal[PartType.ITALIC]" = PartType.ITALIC
51+
source: str | None = None
52+
type: t.Literal[PartType.ITALIC] = PartType.ITALIC
5853

5954

6055
class BoldPart(NamedTuple):
6156
text: str
62-
source: t.Optional[str] = None
63-
type: "t.Literal[PartType.BOLD]" = PartType.BOLD
57+
source: str | None = None
58+
type: t.Literal[PartType.BOLD] = PartType.BOLD
6459

6560

6661
class ModulePart(NamedTuple):
6762
fqcn: str
68-
source: t.Optional[str] = None
69-
type: "t.Literal[PartType.MODULE]" = PartType.MODULE
63+
source: str | None = None
64+
type: t.Literal[PartType.MODULE] = PartType.MODULE
7065

7166

7267
class PluginPart(NamedTuple):
7368
plugin: PluginIdentifier
74-
source: t.Optional[str] = None
75-
type: "t.Literal[PartType.PLUGIN]" = PartType.PLUGIN
69+
source: str | None = None
70+
type: t.Literal[PartType.PLUGIN] = PartType.PLUGIN
7671

7772

7873
class URLPart(NamedTuple):
7974
url: str
80-
source: t.Optional[str] = None
81-
type: "t.Literal[PartType.URL]" = PartType.URL
75+
source: str | None = None
76+
type: t.Literal[PartType.URL] = PartType.URL
8277

8378

8479
class LinkPart(NamedTuple):
8580
text: str
8681
url: str
87-
source: t.Optional[str] = None
88-
type: "t.Literal[PartType.LINK]" = PartType.LINK
82+
source: str | None = None
83+
type: t.Literal[PartType.LINK] = PartType.LINK
8984

9085

9186
class RSTRefPart(NamedTuple):
9287
text: str
9388
ref: str
94-
source: t.Optional[str] = None
95-
type: "t.Literal[PartType.RST_REF]" = PartType.RST_REF
89+
source: str | None = None
90+
type: t.Literal[PartType.RST_REF] = PartType.RST_REF
9691

9792

9893
class CodePart(NamedTuple):
9994
text: str
100-
source: t.Optional[str] = None
101-
type: "t.Literal[PartType.CODE]" = PartType.CODE
95+
source: str | None = None
96+
type: t.Literal[PartType.CODE] = PartType.CODE
10297

10398

10499
class OptionNamePart(NamedTuple):
105-
plugin: t.Optional[PluginIdentifier]
106-
entrypoint: t.Optional[str] # present iff plugin.type == 'role'
107-
link: t.List[str]
100+
plugin: PluginIdentifier | None
101+
entrypoint: str | None # present iff plugin.type == 'role'
102+
link: list[str]
108103
name: str
109-
value: t.Optional[str]
110-
source: t.Optional[str] = None
111-
type: "t.Literal[PartType.OPTION_NAME]" = PartType.OPTION_NAME
104+
value: str | None
105+
source: str | None = None
106+
type: t.Literal[PartType.OPTION_NAME] = PartType.OPTION_NAME
112107

113108

114109
class OptionValuePart(NamedTuple):
115110
value: str
116-
source: t.Optional[str] = None
117-
type: "t.Literal[PartType.OPTION_VALUE]" = PartType.OPTION_VALUE
111+
source: str | None = None
112+
type: t.Literal[PartType.OPTION_VALUE] = PartType.OPTION_VALUE
118113

119114

120115
class EnvVariablePart(NamedTuple):
121116
name: str
122-
source: t.Optional[str] = None
123-
type: "t.Literal[PartType.ENV_VARIABLE]" = PartType.ENV_VARIABLE
117+
source: str | None = None
118+
type: t.Literal[PartType.ENV_VARIABLE] = PartType.ENV_VARIABLE
124119

125120

126121
class ReturnValuePart(NamedTuple):
127-
plugin: t.Optional[PluginIdentifier]
128-
entrypoint: t.Optional[str] # present iff plugin.type == 'role'
129-
link: t.List[str]
122+
plugin: PluginIdentifier | None
123+
entrypoint: str | None # present iff plugin.type == 'role'
124+
link: list[str]
130125
name: str
131-
value: t.Optional[str]
132-
source: t.Optional[str] = None
133-
type: "t.Literal[PartType.RETURN_VALUE]" = PartType.RETURN_VALUE
126+
value: str | None
127+
source: str | None = None
128+
type: t.Literal[PartType.RETURN_VALUE] = PartType.RETURN_VALUE
134129

135130

136131
class HorizontalLinePart(NamedTuple):
137-
source: t.Optional[str] = None
138-
type: "t.Literal[PartType.HORIZONTAL_LINE]" = PartType.HORIZONTAL_LINE
132+
source: str | None = None
133+
type: t.Literal[PartType.HORIZONTAL_LINE] = PartType.HORIZONTAL_LINE
139134

140135

141136
class ErrorPart(NamedTuple):
142137
message: str
143-
source: t.Optional[str] = None
144-
type: "t.Literal[PartType.ERROR]" = PartType.ERROR
138+
source: str | None = None
139+
type: t.Literal[PartType.ERROR] = PartType.ERROR
145140

146141

147142
AnyPart = t.Union[
@@ -163,7 +158,7 @@ class ErrorPart(NamedTuple):
163158
]
164159

165160

166-
Paragraph = t.List[AnyPart]
161+
Paragraph = list[AnyPart]
167162

168163

169164
class Walker(abc.ABC):

0 commit comments

Comments
 (0)