chore(release): 0.0.3

Squash-merge lib-standardisation: adopt repo standards across packaging,
tooling, docs, and CI.

- standardize pyproject.toml (canonical packaging, lint config, extras, GSDFC pydoclint)
- add py.typed marker, modernize type hints and Google-style docstrings
- nest generated docs under docs/lib and docs/mcp; add hand-written wiki
- adopt standard Type A PyPI CI pipeline (tag==version guard + quality gate)
- promote generated CHANGELOG.md; bump version to 0.0.3
This commit is contained in:
2026-10-17 02:16:46 +05:30
parent c541577788
commit 371b74806f
96 changed files with 1756 additions and 2200 deletions

View File

@@ -10,19 +10,17 @@ The functions here are intentionally simple and tolerant of malformed
or incomplete header data.
"""
from typing import Dict, List, Tuple, Optional
def parse_headers(raw_headers: List[Dict[str, str]]) -> Dict[str, str]:
def parse_headers(raw_headers: list[dict[str, str]]) -> dict[str, str]:
"""
Convert a list of Gmail-style headers into a normalized dict.
Args:
raw_headers (List[Dict[str, str]]):
raw_headers (list[dict[str, str]]):
List of header dictionaries, each containing `name` and `value` keys.
Returns:
Dict[str, str]:
dict[str, str]:
Dictionary mapping lowercase header names to stripped values.
Notes:
@@ -50,7 +48,7 @@ def parse_headers(raw_headers: List[Dict[str, str]]) -> Dict[str, str]:
}
```
"""
headers: Dict[str, str] = {}
headers: dict[str, str] = {}
for header in raw_headers or []:
name = header.get("name")
@@ -64,16 +62,16 @@ def parse_headers(raw_headers: List[Dict[str, str]]) -> Dict[str, str]:
return headers
def extract_sender(headers: Dict[str, str]) -> Tuple[str, Optional[str]]:
def extract_sender(headers: dict[str, str]) -> tuple[str, str | None]:
"""
Extract sender email and optional display name from headers.
Args:
headers (Dict[str, str]):
headers (dict[str, str]):
Normalized header dictionary as returned by `parse_headers()`.
Returns:
Tuple[str, Optional[str]]:
tuple[str, str | None]:
A tuple `(email, name)` where `email` is the sender email address
and `name` is the display name, or `None` if unavailable.