diff --git a/pyproject.toml b/pyproject.toml index f80ad7e..ed2a5ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ dependencies = [ "pygments>=2.19.1", "pygments-ashen>=0.1.2", "pygments-kakoune>=0.1.0", + "python-dateutil>=2.9.0.post0", "python-frontmatter>=1.1.0", "rich>=14.0.0", "typer>=0.16.0", diff --git a/src/zona/metadata.py b/src/zona/metadata.py index b79fccb..1ec98ab 100644 --- a/src/zona/metadata.py +++ b/src/zona/metadata.py @@ -1,7 +1,7 @@ from dataclasses import dataclass -from rich import print from pathlib import Path from datetime import date +from dateutil import parser as date_parser from dacite.config import Config from dacite.core import from_dict @@ -23,6 +23,13 @@ class Metadata: 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]: """ 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), } meta = {**defaults, **raw_meta} + meta["date"] = parse_date(meta.get("date")) try: metadata = from_dict( data_class=Metadata, diff --git a/uv.lock b/uv.lock index 99f170f..df8b97f 100644 --- a/uv.lock +++ b/uv.lock @@ -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" }, ] +[[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]] name = "python-frontmatter" 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" }, ] +[[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]] name = "typer" version = "0.16.0" @@ -381,6 +402,7 @@ dependencies = [ { name = "pygments" }, { name = "pygments-ashen" }, { name = "pygments-kakoune" }, + { name = "python-dateutil" }, { name = "python-frontmatter" }, { name = "rich" }, { name = "typer" }, @@ -403,6 +425,7 @@ requires-dist = [ { name = "pygments", specifier = ">=2.19.1" }, { name = "pygments-ashen", specifier = ">=0.1.2" }, { name = "pygments-kakoune", specifier = ">=0.1.0" }, + { name = "python-dateutil", specifier = ">=2.9.0.post0" }, { name = "python-frontmatter", specifier = ">=1.1.0" }, { name = "rich", specifier = ">=14.0.0" }, { name = "typer", specifier = ">=0.16.0" },