@@ -17,6 +17,9 @@ class MdFormatter:
17
17
change_notes : set [ChangeNote ]
18
18
authors : set [Contributor ]
19
19
reviewers : set [Contributor ]
20
+ required_python : str
21
+ required_dependencies : Iterable [str ]
22
+ optional_dependencies : dict [str , Iterable [str ]]
20
23
21
24
version : str
22
25
title_template : str
@@ -51,6 +54,11 @@ def iter_lines(self) -> Iterable[str]:
51
54
yield from self ._format_intro ()
52
55
for title , notes in self ._notes_by_section .items ():
53
56
yield from self ._format_change_section (title , notes )
57
+ yield from self ._format_dependencies_section (
58
+ required_python = self .required_python ,
59
+ required_dependencies = self .required_dependencies ,
60
+ optional_dependencies = self .optional_dependencies ,
61
+ )
54
62
yield from self ._format_contributor_section (self .authors , self .reviewers )
55
63
yield from self ._format_outro ()
56
64
@@ -146,6 +154,39 @@ def _format_contributor_section(
146
154
yield from sorted (reviewers_lines , key = lambda s : s .lower ())
147
155
yield "\n "
148
156
157
+ def _format_dependencies_section (
158
+ self , required_python , required_dependencies , optional_dependencies
159
+ ):
160
+ if required_python or required_dependencies or optional_dependencies :
161
+ yield from self ._format_section_title ("Dependencies" , level = 2 )
162
+ yield "\n "
163
+
164
+ if required_python :
165
+ yield f"Python `{ required_python } ` is required.\n "
166
+ yield "\n "
167
+
168
+ if required_dependencies :
169
+ yield "Required dependencies:\n "
170
+ yield "\n "
171
+ for dep in sorted (required_dependencies , key = lambda x : x .lower ()):
172
+ line = f"`{ dep } `"
173
+ line = self ._sanitize_text (line )
174
+ yield f"- { line } \n "
175
+ yield "\n "
176
+
177
+ if optional_dependencies :
178
+ yield "Optional dependencies:\n "
179
+ yield "\n "
180
+ for name , deps in optional_dependencies .items ():
181
+ line = f"`{ name } `"
182
+ line = self ._sanitize_text (line )
183
+ yield f"- { line } \n "
184
+ for dep in sorted (deps , key = lambda x : x .lower ()):
185
+ line = f"`{ dep } `"
186
+ line = self ._sanitize_text (line )
187
+ yield f" - { line } \n "
188
+ yield "\n "
189
+
149
190
def _format_intro (self ):
150
191
intro = self .intro_template .format (
151
192
repo_name = self .repo_name , version = self .version
0 commit comments