errands
small jobs the runtime does for the studio.
git clone https://owenrusk.dev/errands.git
commit e543e10573c7b8cc26a3f2829772b204037f281e parent e54d8441b1718081d696efa73bf8ac3745f197ad author Owen Rusk <owen@papermothgames.com> date 2025-05-27 13:35:48 -0500
posts: say what's scheduled
| errands/posts.py | +5 | -0 |
| errands/tools.py | +6 | -1 |
| tests/test_posts.py | +8 | -0 |
diff --git a/errands/posts.py b/errands/posts.py index dc819ee..03e5b6d 100644 --- a/errands/posts.py +++ b/errands/posts.py @@ -33,6 +33,11 @@ def due(now: datetime, site: Path) -> list[Path]: return ready +def scheduled(site: Path | None = None) -> list[dict]: + site = site or settings.SITE + return [{"post": path.stem, "at": str(when(path))} for path in sorted((site / "scheduled").glob("*.md"))] + + def publish_due(now: datetime | None = None, site: Path | None = None, run=subprocess.run) -> list[str]: now = now or datetime.now().astimezone() site = site or settings.SITE diff --git a/errands/tools.py b/errands/tools.py index 03ccc38..e85b535 100644 --- a/errands/tools.py +++ b/errands/tools.py @@ -2,7 +2,7 @@ import json from typing import Callable-from . import hosting, mail+from . import hosting, mail, posts TOOLS: dict[str, Callable] = {} @@ -30,6 +30,11 @@ def mail_send(to: str, subject: str, body: str) -> str: return mail.send(mail.compose(to, subject, body)) +@tool +def posts_scheduled() -> list[dict]: + return posts.scheduled() + + @tool def hosting_balance() -> str: return f"{hosting.balance():.2f}" diff --git a/tests/test_posts.py b/tests/test_posts.py index 45e243f..1b338ee 100644 --- a/tests/test_posts.py +++ b/tests/test_posts.py @@ -43,6 +43,14 @@ class PublishTest(unittest.TestCase): now = datetime(2024, 11, 21, 12, 0, tzinfo=CENTRAL) self.assertEqual(posts.publish_due(now, self.site, self.record), ["test-post"]) + def test_scheduled(self): + post(self.site, "test-post", "2024-11-20T09:00:00-06:00") + post(self.site, "draft", None) + self.assertEqual( + posts.scheduled(self.site), + [{"post": "draft", "at": "None"}, {"post": "test-post", "at": "2024-11-20 09:00:00-06:00"}], + ) + def test_no_date_never_goes_out(self): post(self.site, "draft", None) now = datetime(2030, 1, 1, tzinfo=CENTRAL)