added frontmatter date parsing

This commit is contained in:
Daniel Fichtinger 2025-07-03 12:25:09 -04:00
parent e890134abf
commit b26cfc2784
3 changed files with 33 additions and 1 deletions

View file

@ -14,6 +14,7 @@ dependencies = [
"pygments>=2.19.1", "pygments>=2.19.1",
"pygments-ashen>=0.1.2", "pygments-ashen>=0.1.2",
"pygments-kakoune>=0.1.0", "pygments-kakoune>=0.1.0",
"python-dateutil>=2.9.0.post0",
"python-frontmatter>=1.1.0", "python-frontmatter>=1.1.0",
"rich>=14.0.0", "rich>=14.0.0",
"typer>=0.16.0", "typer>=0.16.0",

View file

@ -1,7 +1,7 @@
from dataclasses import dataclass from dataclasses import dataclass
from rich import print
from pathlib import Path from pathlib import Path
from datetime import date from datetime import date
from dateutil import parser as date_parser
from dacite.config import Config from dacite.config import Config
from dacite.core import from_dict from dacite.core import from_dict
@ -23,6 +23,13 @@ class Metadata:
post: bool | None = None post: bool | None = None
def parse_date(raw_date: str | date | object) -> date:
if isinstance(raw_date, date):
return raw_date
assert isinstance(raw_date, str)
return date_parser.parse(raw_date).date()
def parse_metadata(path: Path) -> tuple[Metadata, str]: def parse_metadata(path: Path) -> tuple[Metadata, str]:
""" """
Parses a file and returns parsed Metadata and its content. Defaults Parses a file and returns parsed Metadata and its content. Defaults
@ -42,6 +49,7 @@ def parse_metadata(path: Path) -> tuple[Metadata, str]:
"date": date.fromtimestamp(path.stat().st_ctime), "date": date.fromtimestamp(path.stat().st_ctime),
} }
meta = {**defaults, **raw_meta} meta = {**defaults, **raw_meta}
meta["date"] = parse_date(meta.get("date"))
try: try:
metadata = from_dict( metadata = from_dict(
data_class=Metadata, data_class=Metadata,

23
uv.lock generated
View file

@ -216,6 +216,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" },
] ]
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "six" },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
]
[[package]] [[package]]
name = "python-frontmatter" name = "python-frontmatter"
version = "1.1.0" version = "1.1.0"
@ -301,6 +313,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
] ]
[[package]]
name = "six"
version = "1.17.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
]
[[package]] [[package]]
name = "typer" name = "typer"
version = "0.16.0" version = "0.16.0"
@ -381,6 +402,7 @@ dependencies = [
{ name = "pygments" }, { name = "pygments" },
{ name = "pygments-ashen" }, { name = "pygments-ashen" },
{ name = "pygments-kakoune" }, { name = "pygments-kakoune" },
{ name = "python-dateutil" },
{ name = "python-frontmatter" }, { name = "python-frontmatter" },
{ name = "rich" }, { name = "rich" },
{ name = "typer" }, { name = "typer" },
@ -403,6 +425,7 @@ requires-dist = [
{ name = "pygments", specifier = ">=2.19.1" }, { name = "pygments", specifier = ">=2.19.1" },
{ name = "pygments-ashen", specifier = ">=0.1.2" }, { name = "pygments-ashen", specifier = ">=0.1.2" },
{ name = "pygments-kakoune", specifier = ">=0.1.0" }, { name = "pygments-kakoune", specifier = ">=0.1.0" },
{ name = "python-dateutil", specifier = ">=2.9.0.post0" },
{ name = "python-frontmatter", specifier = ">=1.1.0" }, { name = "python-frontmatter", specifier = ">=1.1.0" },
{ name = "rich", specifier = ">=14.0.0" }, { name = "rich", specifier = ">=14.0.0" },
{ name = "typer", specifier = ">=0.16.0" }, { name = "typer", specifier = ">=0.16.0" },