@@ -139,7 +139,7 @@ def default(self, o):
139139 return json .JSONEncoder .default (self , o )
140140
141141
142- def _parse_release_summary_changelog_pair (changelog_pair : str ) -> ReleaseSummaryChangelogEntry :
142+ def parse_release_summary_changelog_pair (changelog_pair : str ) -> ReleaseSummaryChangelogEntry :
143143 """Parse a release-summary changelog pair string."""
144144 parts = changelog_pair .split ("-" )
145145 if len (parts ) != 2 or not all (parts ):
@@ -148,7 +148,7 @@ def _parse_release_summary_changelog_pair(changelog_pair: str) -> ReleaseSummary
148148 return ReleaseSummaryChangelogEntry (old_version = parts [0 ], new_version = parts [1 ])
149149
150150
151- def _format_release_summary_version_label (version : str ) -> str :
151+ def format_release_summary_version_label (version : str ) -> str :
152152 """Format the human-readable release summary version label."""
153153 version_text = version .strip ()
154154 if not version_text .lower ().startswith ("v" ):
@@ -157,7 +157,7 @@ def _format_release_summary_version_label(version: str) -> str:
157157 return f"ATT&CK { version_text } "
158158
159159
160- def _get_release_summary_version_link (version : str ) -> str :
160+ def get_release_summary_version_link (version : str ) -> str :
161161 """Build the default version page link for a release summary."""
162162 version_text = version .strip ()
163163 if not version_text .lower ().startswith ("v" ):
@@ -166,7 +166,7 @@ def _get_release_summary_version_link(version: str) -> str:
166166 return f"/versions/{ version_text } "
167167
168168
169- def _format_release_summary_data_label (version : str ) -> str :
169+ def format_release_summary_data_label (version : str ) -> str :
170170 """Format the human-readable label for a CTI data release entry."""
171171 version_text = version .strip ()
172172 if not version_text .lower ().startswith ("v" ):
@@ -175,14 +175,14 @@ def _format_release_summary_data_label(version: str) -> str:
175175 return f"{ version_text } on MITRE/CTI"
176176
177177
178- def _format_release_summary_changelog_label (old_version : str , new_version : str ) -> str :
178+ def format_release_summary_changelog_label (old_version : str , new_version : str ) -> str :
179179 """Format the human-readable label for a changelog transition."""
180180 old_text = old_version if old_version .lower ().startswith ("v" ) else f"v{ old_version } "
181181 new_text = new_version if new_version .lower ().startswith ("v" ) else f"v{ new_version } "
182182 return f"{ old_text } - { new_text } "
183183
184184
185- def _get_release_summary_changelog_base (changelog_prefix : str , old_version : str , new_version : str ) -> str :
185+ def get_release_summary_changelog_base (changelog_prefix : str , old_version : str , new_version : str ) -> str :
186186 """Build the base path for release-summary changelog links."""
187187 old_text = old_version if old_version .lower ().startswith ("v" ) else f"v{ old_version } "
188188 new_text = new_version if new_version .lower ().startswith ("v" ) else f"v{ new_version } "
@@ -213,11 +213,11 @@ def build_release_summary(
213213
214214 changelog_entries = []
215215 for changelog_pair in release_summary_changelogs or []:
216- changelog_entries .append (_parse_release_summary_changelog_pair (changelog_pair ))
216+ changelog_entries .append (parse_release_summary_changelog_pair (changelog_pair ))
217217
218218 return ReleaseSummary (
219219 version = release_summary_version ,
220- version_link = release_summary_version_link or _get_release_summary_version_link (release_summary_version ),
220+ version_link = release_summary_version_link or get_release_summary_version_link (release_summary_version ),
221221 start_date = release_summary_start_date ,
222222 end_date = release_summary_end_date ,
223223 data_versions = release_summary_data_versions or [],
@@ -1409,44 +1409,44 @@ def get_release_summary_section(self) -> str:
14091409 summary = self .release_summary
14101410 start_date = summary .start_date or "TBD"
14111411 end_date = summary .end_date or "TBD"
1412- changelog_entries = self ._get_release_summary_changelog_entries (summary )
1412+ changelog_entries = self .get_release_summary_changelog_entries (summary )
14131413
14141414 content = "## Release Summary\n \n "
14151415 content += "**Version**\n "
1416- content += f"[{ _format_release_summary_version_label (summary .version )} ]({ summary .version_link } )\n \n "
1416+ content += f"[{ format_release_summary_version_label (summary .version )} ]({ summary .version_link } )\n \n "
14171417 content += "**Dates**\n "
14181418 content += f"{ start_date } - { end_date } \n \n "
14191419
14201420 if summary .data_versions :
14211421 content += "**Data**\n "
14221422 for version in summary .data_versions :
1423- content += f"- [{ _format_release_summary_data_label (version )} ]({ summary .data_prefix } { version } )\n "
1423+ content += f"- [{ format_release_summary_data_label (version )} ]({ summary .data_prefix } { version } )\n "
14241424 content += "\n "
14251425
14261426 if changelog_entries :
14271427 content += "**Changelogs**\n "
14281428 for entry in changelog_entries :
1429- changelog_base = _get_release_summary_changelog_base (
1429+ changelog_base = get_release_summary_changelog_base (
14301430 summary .changelog_prefix , entry .old_version , entry .new_version
14311431 )
14321432 content += (
1433- f"- { _format_release_summary_changelog_label (entry .old_version , entry .new_version )} "
1433+ f"- { format_release_summary_changelog_label (entry .old_version , entry .new_version )} "
14341434 f"[Details]({ changelog_base } /changelog-detailed.html) "
14351435 f"([JSON]({ changelog_base } /changelog.json))\n "
14361436 )
14371437 content += "\n "
14381438
14391439 return content
14401440
1441- def _get_release_summary_changelog_entries (self , summary : ReleaseSummary ) -> List [ReleaseSummaryChangelogEntry ]:
1441+ def get_release_summary_changelog_entries (self , summary : ReleaseSummary ) -> List [ReleaseSummaryChangelogEntry ]:
14421442 """Return explicit or inferred changelog entries for the release summary."""
14431443 if summary .changelog_entries :
14441444 return summary .changelog_entries
14451445
14461446 if not summary .data_versions :
14471447 return []
14481448
1449- old_version = self ._get_detected_old_release_version ()
1449+ old_version = self .get_detected_old_release_version ()
14501450 if not old_version :
14511451 return []
14521452
@@ -1458,7 +1458,7 @@ def _get_release_summary_changelog_entries(self, summary: ReleaseSummary) -> Lis
14581458
14591459 return entries
14601460
1461- def _get_detected_old_release_version (self ) -> Optional [str ]:
1461+ def get_detected_old_release_version (self ) -> Optional [str ]:
14621462 """Return the first detected old ATT&CK release version from the loaded domains."""
14631463 for domain in self .domains :
14641464 old_version = self .data ["old" ][domain ].get ("attack_release_version" )
@@ -2577,7 +2577,7 @@ def get_parsed_args():
25772577 parser .error ("--release-summary requires --release-summary-version" )
25782578 for changelog_pair in args .release_summary_changelogs or []:
25792579 try :
2580- _parse_release_summary_changelog_pair (changelog_pair )
2580+ parse_release_summary_changelog_pair (changelog_pair )
25812581 except ValueError as exc :
25822582 parser .error (str (exc ))
25832583
0 commit comments