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 1292e9a..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 gotrue 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,