11from __future__ import annotations
22
33import sys
4- from typing import ClassVar , Protocol
4+ from typing import Callable , ClassVar , Protocol
55
66if sys .version_info >= (3 , 10 ):
77 from importlib import metadata
@@ -64,18 +64,17 @@ def get_changelog_format(
6464 :raises FormatUnknown: if a non-empty name is provided but cannot be found in the known formats
6565 """
6666 name : str | None = config .settings .get ("changelog_format" )
67- format : type [ChangelogFormat ] | None = guess_changelog_format (filename )
68-
69- if name and name in KNOWN_CHANGELOG_FORMATS :
70- format = KNOWN_CHANGELOG_FORMATS [name ]
67+ format = (
68+ name and KNOWN_CHANGELOG_FORMATS .get (name ) or _guess_changelog_format (filename )
69+ )
7170
7271 if not format :
7372 raise ChangelogFormatUnknown (f"Unknown changelog format '{ name } '" )
7473
7574 return format (config )
7675
7776
78- def guess_changelog_format (filename : str | None ) -> type [ChangelogFormat ] | None :
77+ def _guess_changelog_format (filename : str | None ) -> type [ChangelogFormat ] | None :
7978 """
8079 Try guessing the file format from the filename.
8180
@@ -91,3 +90,9 @@ def guess_changelog_format(filename: str | None) -> type[ChangelogFormat] | None
9190 if filename .endswith (f".{ alt_extension } " ):
9291 return format
9392 return None
93+
94+
95+ def __getattr__ (name : str ) -> Callable [[str ], type [ChangelogFormat ] | None ]:
96+ if name == "guess_changelog_format" :
97+ return _guess_changelog_format
98+ raise AttributeError (f"module { __name__ } has no attribute { name } " )
0 commit comments