From 90a419eebe357ea72766c9c5c9d712ad02c0d4cf Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 19 Jun 2025 17:58:27 +0200 Subject: [PATCH 1/2] fix: Correct datetime import library --- prophet/infra/improvement_supa_repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prophet/infra/improvement_supa_repo.py b/prophet/infra/improvement_supa_repo.py index 1292e9a..b65e643 100644 --- a/prophet/infra/improvement_supa_repo.py +++ b/prophet/infra/improvement_supa_repo.py @@ -1,7 +1,7 @@ from datetime import timezone from typing import override -from gotrue import datetime +from datetime import datetime from supabase import Client from prophet.config import SupaConfig From 434773025b1d3d4a42086f008fdfc796a1d8edde Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 19 Jun 2025 17:57:52 +0200 Subject: [PATCH 2/2] feat: Remove old articles from database --- prophet/app.py | 21 +++++++++++++++++++-- prophet/domain/improvement_repo.py | 8 ++++++++ prophet/infra/improvement_supa_repo.py | 25 +++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/prophet/app.py b/prophet/app.py index b8d568d..9ec67f0 100644 --- a/prophet/app.py +++ b/prophet/app.py @@ -19,6 +19,7 @@ BEE_FEED = "https://babylonbee.com/feed" BEE_FEED_TEST = "test/resources/feed_short.atom" # NOTE: Switch out when done testing REFRESH_PERIOD = 3600 # between fetching articles, in seconds +NUM_ARTICLES_TO_KEEP = 50 llm: GroqClient = GroqClient() repo: IImprovementRepo = ImprovementSupaRepo() @@ -107,6 +108,18 @@ def improve_summary(original_title: str, new_title: str, original_summary: str): @repeat_every(seconds=REFRESH_PERIOD) async def refresh_articles(): _ = await fetch_update() + truncate_to(NUM_ARTICLES_TO_KEEP) + + +def truncate_to(max_num: int = 50): + all = repo.get_all() + if len(all) > max_num: + to_delete = all[max_num:] + to_delete_ids = [a.id for a in to_delete] + try: + _ = repo.remove_all(to_delete_ids) + except ValueError: + print(f"Error deleting articles with IDs: {id}") @app.get("/update") @@ -128,11 +141,12 @@ def start() -> None: if __name__ == "__main__": # start() + ## ADD MANUALLY # adding = keep_only_new_originals(grab_latest_originals()) # improved = improve_originals(adding) # save_new_improvements(improved) - # migrate to newer version + ## SHOW ALL improved = repo.get_all() for imp in improved: imp.original.__post_init__() @@ -144,4 +158,7 @@ if __name__ == "__main__": print(f"Summary: {imp.summary}") print("-" * 50) - repo.add_all(improved) + # repo.add_all(improved) + + ## DELETE TOO_MANY + # truncate_to(48) diff --git a/prophet/domain/improvement_repo.py b/prophet/domain/improvement_repo.py index 7081e34..14b750c 100644 --- a/prophet/domain/improvement_repo.py +++ b/prophet/domain/improvement_repo.py @@ -19,3 +19,11 @@ class IImprovementRepo(Protocol): def get_all(self) -> list[Improvement]: raise NotImplementedError + + def remove(self, id: str) -> Improvement: + """Returns single deleted improvement""" + raise NotImplementedError + + def remove_all(self, ids: list[str]) -> list[Improvement]: + """Returns list of deleted improvements""" + raise NotImplementedError diff --git a/prophet/infra/improvement_supa_repo.py b/prophet/infra/improvement_supa_repo.py index b65e643..18f691e 100644 --- a/prophet/infra/improvement_supa_repo.py +++ b/prophet/infra/improvement_supa_repo.py @@ -1,7 +1,6 @@ -from datetime import timezone +from datetime import datetime, timezone from typing import override -from datetime import datetime from supabase import Client from prophet.config import SupaConfig @@ -59,6 +58,28 @@ class ImprovementSupaRepo(IImprovementRepo): .data ] + @override + def remove(self, id: str) -> Improvement: + resp = ( + self.client.table(self.config.TABLE).delete().eq("uuid", id).execute().data + ) + if not resp: + raise ValueError + return self._from_tbl_row(resp[0]) + + @override + def remove_all(self, ids: list[str]) -> list[Improvement]: + resp = ( + self.client.table(self.config.TABLE) + .delete() + .in_("uuid", ids) + .execute() + .data + ) + if not resp: + raise ValueError + return [self._from_tbl_row(item) for item in resp] + def _to_tbl_row(self, imp: Improvement) -> dict[str, str | int]: return { "uuid": imp.id,