feat: filter Wishlist from --my-tasks; document the mode (#71)
Tasks in the "Wishlist" bucket version are now excluded from the list and summary entirely (no due date, noise backlog); exact case match, tasks without a version are unaffected. Document --my-tasks in README and the user guide (sorting, summary metrics, OSC 8 links, stream separation); all examples use synthetic data. Declare ruff known-first-party in pyproject so the lint result is CWD-independent.
This commit is contained in:
@@ -22,6 +22,31 @@ def _issue_version_name(issue: Issue) -> str:
|
||||
return get_version(issue, default="")
|
||||
|
||||
|
||||
# "Wishlist" -- постоянная бакет-версия без срока (личный бакет Wendy, факт
|
||||
# из трекера): задачи в ней -- отложенные идеи, создающие мусорный фон в
|
||||
# персональной выборке, поэтому режим --my-tasks исключает их целиком --
|
||||
# из таблицы и из саммари. Сравнение имени точное, без нормализации регистра.
|
||||
EXCLUDED_VERSION_NAMES: frozenset[str] = frozenset({"Wishlist"})
|
||||
|
||||
|
||||
def filter_excluded_versions(
|
||||
items: list[tuple[Issue, date | None]],
|
||||
) -> list[tuple[Issue, date | None]]:
|
||||
"""Убирает задачи версий-исключений из выборки --my-tasks.
|
||||
|
||||
Доступ к fixed_version.name getattr-безопасный: задача без версии или
|
||||
с версией без имени остаётся в выборке. Даты в парах сохраняются как есть.
|
||||
"""
|
||||
kept: list[tuple[Issue, date | None]] = []
|
||||
for item in items:
|
||||
version = getattr(item[0], "fixed_version", None)
|
||||
name = getattr(version, "name", None) if version is not None else None
|
||||
if name and str(name) in EXCLUDED_VERSION_NAMES:
|
||||
continue
|
||||
kept.append(item)
|
||||
return kept
|
||||
|
||||
|
||||
def _sort_key(item: tuple[Issue, date | None]) -> tuple[int, bool, date, int]:
|
||||
"""Ключ сортировки: приоритет, затем срок по возрастанию, затем id.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user