Skip to content

Commit a210a28

Browse files
committed
refactor(changelog): better typing, list comprehension
1 parent 9420b44 commit a210a28

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

commitizen/changelog.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929

3030
import re
3131
from collections import OrderedDict, defaultdict
32-
from collections.abc import Iterable
32+
from collections.abc import Iterable, Mapping
3333
from dataclasses import dataclass
3434
from datetime import date
35-
from typing import TYPE_CHECKING
35+
from typing import TYPE_CHECKING, Any
3636

3737
from jinja2 import (
3838
BaseLoader,
@@ -84,7 +84,7 @@ def generate_tree_from_commits(
8484
changelog_message_builder_hook: MessageBuilderHook | None = None,
8585
changelog_release_hook: ChangelogReleaseHook | None = None,
8686
rules: TagRules | None = None,
87-
) -> Iterable[dict]:
87+
) -> Iterable[dict[str, Any]]:
8888
pat = re.compile(changelog_pattern)
8989
map_pat = re.compile(commit_parser, re.MULTILINE)
9090
body_map_pat = re.compile(commit_parser, re.MULTILINE | re.DOTALL)
@@ -187,24 +187,26 @@ def process_commit_message(
187187
changes[change_type].append(msg)
188188

189189

190-
def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterable:
190+
def order_changelog_tree(
191+
tree: Iterable[Mapping[str, Any]], change_type_order: list[str]
192+
) -> list[dict[str, Any]]:
191193
if len(set(change_type_order)) != len(change_type_order):
192194
raise InvalidConfigurationError(
193195
f"Change types contain duplicates types ({change_type_order})"
194196
)
195197

196-
sorted_tree = []
197-
for entry in tree:
198-
ordered_change_types = change_type_order + sorted(
199-
set(entry["changes"].keys()) - set(change_type_order)
200-
)
201-
changes = [
202-
(ct, entry["changes"][ct])
203-
for ct in ordered_change_types
204-
if ct in entry["changes"]
205-
]
206-
sorted_tree.append({**entry, **{"changes": OrderedDict(changes)}})
207-
return sorted_tree
198+
return [
199+
{
200+
**entry,
201+
"changes": OrderedDict(
202+
(ct, entry["changes"][ct])
203+
for ct in change_type_order
204+
+ sorted(set(entry["changes"].keys()) - set(change_type_order))
205+
if ct in entry["changes"]
206+
),
207+
}
208+
for entry in tree
209+
]
208210

209211

210212
def get_changelog_template(loader: BaseLoader, template: str) -> Template:

0 commit comments

Comments
 (0)