Classes
ReleaseView
17
▼
Normalized view of a changelog release for templates.
Unifies data-driven (from changelog.yaml) an…
ReleaseView
17
▼
Normalized view of a changelog release for templates.
Unifies data-driven (from changelog.yaml) and page-driven (from markdown files) releases into a single consistent interface.
Attributes
| Name | Type | Description |
|---|---|---|
version |
str
|
Version string (e.g., "1.2.0") |
name |
str
|
Release name/codename |
date |
datetime | None
|
Release date (always datetime for reliable sorting, or None) |
status |
str
|
Release status (stable, beta, rc, deprecated) |
href |
str
|
URL to release page (if page-driven) |
summary |
str
|
Brief release summary |
added |
tuple[str, ...]
|
List of added features |
changed |
tuple[str, ...]
|
List of changes |
fixed |
tuple[str, ...]
|
List of bug fixes |
deprecated |
tuple[str, ...]
|
List of deprecated features |
removed |
tuple[str, ...]
|
List of removed features |
security |
tuple[str, ...]
|
List of security fixes |
breaking |
tuple[str, ...]
|
List of breaking changes |
has_structured_changes |
bool
|
Whether release has categorized changes |
change_types |
tuple[str, ...]
|
List of change type names present |
Methods
from_data
1
ReleaseView
▼
Create a ReleaseView from a data-driven release dict.
Typically from changelog…
classmethod
from_data
1
ReleaseView
▼
def from_data(cls, release: dict[str, Any]) -> ReleaseView
Create a ReleaseView from a data-driven release dict.
Typically from changelog.yaml with structure:
- version: "1.2.0"
date: "2024-01-15"added: ["Feature 1", "Feature 2"]
Parameters
| Name | Type | Description |
|---|---|---|
release |
— |
Release dict from data file |
Returns
ReleaseView
Normalized ReleaseView instance
from_page
1
ReleaseView
▼
Create a ReleaseView from a page-driven release.
**Version extraction priority…
classmethod
from_page
1
ReleaseView
▼
def from_page(cls, page: Any) -> ReleaseView
Create a ReleaseView from a page-driven release.
Version extraction priority:
- Explicit metadata.version field
- Filename if it's a version (e.g., "0.1.8.md")
- Version extracted from title (e.g., "Bengal 0.1.8" → "0.1.8")
- Full title as fallback
Parameters
| Name | Type | Description |
|---|---|---|
page |
— |
Page object representing a release |
Returns
ReleaseView
Normalized ReleaseView instance
Functions
_extract_version
1
str | None
▼
Extract a version string from text (title, filename, etc.).
Recognizes:
- Semv…
_extract_version
1
str | None
▼
def _extract_version(text: str) -> str | None
Extract a version string from text (title, filename, etc.).
Recognizes:
- Semver: "0.1.8", "v1.2.3", "1.0.0-beta"
- Date versions: "26.01", "2026.01.12"
- Prefixed: "Bengal 0.1.8" → "0.1.8"
Returns None if no version pattern found.
Parameters
| Name | Type | Description |
|---|---|---|
text |
str |
Returns
str | None
_version_sort_key
1
tuple
▼
Parse version string into tuple for proper numeric sorting.
**Handles:**
- Sem…
_version_sort_key
1
tuple
▼
def _version_sort_key(version: str) -> tuple
Parse version string into tuple for proper numeric sorting.
Handles:
- Semantic versioning: "1.2.3", "0.1.10", "2.0.0-beta"
- Date versioning: "26.01", "2026.01.12"
Parameters
| Name | Type | Description |
|---|---|---|
version |
str |
Returns
tuple
_normalize_date
1
datetime | None
▼
Normalize a date value to datetime for reliable sorting.
**Handles:**
- dateti…
_normalize_date
1
datetime | None
▼
def _normalize_date(value: Any) -> datetime | None
Normalize a date value to datetime for reliable sorting.
Handles:
- datetime objects (returned as-is)
- date objects (converted to datetime at midnight)
- ISO format strings (parsed)
- None (returned as-is)
Parameters
| Name | Type | Description |
|---|---|---|
value |
Any |
Returns
datetime | None
_to_tuple
1
tuple[str, ...]
▼
Convert a list/iterable to a tuple of strings, or empty tuple.
_to_tuple
1
tuple[str, ...]
▼
def _to_tuple(value: Any) -> tuple[str, ...]
Parameters
| Name | Type | Description |
|---|---|---|
value |
Any |
Returns
tuple[str, ...]
_sort_releases
1
list[ReleaseView]
▼
Sort releases by version (highest first) using semantic comparison.
Version is…
_sort_releases
1
list[ReleaseView]
▼
def _sort_releases(releases: list[ReleaseView]) -> list[ReleaseView]
Sort releases by version (highest first) using semantic comparison.
Version is the primary sort key because version IS the release identity. Date is secondary (for same-version edge cases).
Uses proper numeric comparison so "0.1.10" > "0.1.9" > "0.1.2". Stable versions sort before prereleases: "1.0.0" > "1.0.0-beta".
Sort order:
1. By version (highest first, semantic comparison)
2. For same version: by date (newest first)
Parameters
| Name | Type | Description |
|---|---|---|
releases |
list[ReleaseView] |
Returns
list[ReleaseView]
releases_filter
2
list[ReleaseView]
▼
Convert releases to normalized ReleaseView objects, sorted by version.
By defa…
releases_filter
2
list[ReleaseView]
▼
def releases_filter(source: Any, sorted: bool = True) -> list[ReleaseView]
Convert releases to normalized ReleaseView objects, sorted by version.
By default, releases are sorted by version (highest first) using semantic comparison. This means "0.1.10" correctly comes before "0.1.9".
Version is extracted intelligently:
- Explicit
versionfield in metadata- Filename if versioned (e.g.,
0.1.8.md) - Version pattern in title (e.g., "Bengal 0.1.8")
- Full title as fallback
- Filename if versioned (e.g.,
Parameters
| Name | Type | Description |
|---|---|---|
source |
Any |
List of release dicts (from YAML) or Page objects (from section) |
sorted |
bool |
Sort by version (default: True). Set to False to preserve input order for custom sorting. Default:True
|
Returns
list[ReleaseView]
release_view_filter
1
ReleaseView | None
▼
Convert a single release item to a ReleaseView.
release_view_filter
1
ReleaseView | None
▼
def release_view_filter(item: Any) -> ReleaseView | None
Parameters
| Name | Type | Description |
|---|---|---|
item |
Any |
Release dict or Page object |
Returns
ReleaseView | None
register
2
None
▼
Register changelog view filters with template environment.
register
2
None
▼
def register(env: TemplateEnvironment, site: SiteLike) -> None
Parameters
| Name | Type | Description |
|---|---|---|
env |
TemplateEnvironment |
|
site |
SiteLike |