@@ -17,6 +17,9 @@ class MdFormatter:
1717 change_notes : set [ChangeNote ]
1818 authors : set [Contributor ]
1919 reviewers : set [Contributor ]
20+ required_python : str
21+ required_dependencies : Iterable [str ]
22+ optional_dependencies : dict [str , Iterable [str ]]
2023
2124 version : str
2225 title_template : str
@@ -51,6 +54,11 @@ def iter_lines(self) -> Iterable[str]:
5154 yield from self ._format_intro ()
5255 for title , notes in self ._notes_by_section .items ():
5356 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+ )
5462 yield from self ._format_contributor_section (self .authors , self .reviewers )
5563 yield from self ._format_outro ()
5664
@@ -146,6 +154,39 @@ def _format_contributor_section(
146154 yield from sorted (reviewers_lines , key = lambda s : s .lower ())
147155 yield "\n "
148156
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+
149190 def _format_intro (self ):
150191 intro = self .intro_template .format (
151192 repo_name = self .repo_name , version = self .version
0 commit comments