From d3de3c7b21045003d661f170de17d3adbc47f5e0 Mon Sep 17 00:00:00 2001 From: ado Date: Mon, 17 Jun 2024 07:06:04 -0400 Subject: [PATCH] Fix duplication bug --- lionseat.py | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/lionseat.py b/lionseat.py index 9db927e..deddb6a 100644 --- a/lionseat.py +++ b/lionseat.py @@ -5,30 +5,36 @@ import sqlite3 def get_food(): - foods = [ - "no spoilers", - ] - + foods = ["no spoilers"] food = foods[random.randint(0, len(foods) - 1)] return food -def get_cur_and_ensure_table(): - db_con = sqlite3.connect("lionseat.db") +def get_cur_and_ensure_table(db_con): cur = db_con.cursor() cur.execute("CREATE TABLE IF NOT EXISTS used(used TEXT)") - return cur -def get_unique_food(cursor): - max_attempts = 10 +def record_usage(cursor, my_food): + cursor.execute("INSERT INTO USED(used) values (?)", (my_food,)) + + +def is_already_used(cursor, my_food): + cursor.execute("SELECT used FROM Used where used = ?", (my_food,)) + result = cursor.fetchone() + return result is not None + + +def get_unique_food(db_con): + cursor = db_con.cursor() + max_attempts = 3 current_attempt = 1 while True and current_attempt < max_attempts: current_attempt = current_attempt + 1 my_food = get_food() - cursor.execute("SELECT used FROM Used WHERE used = ?", (my_food,)) - result = cursor.fetchone() - if not result: + used = is_already_used(cursor, my_food) + if not used: + record_usage(cursor, my_food) return my_food @@ -50,8 +56,11 @@ def get_masto_client_and_login(): return mastodon -food = get_unique_food(cursor=get_cur_and_ensure_table()) -if food is not None: - status = f"Lions will eat {food}" - mastodon = get_masto_client_and_login() - mastodon.status_post(status, visibility="public") +with sqlite3.connect("lionseat.db") as db_con: + get_cur_and_ensure_table(db_con) + food = get_unique_food(db_con) + if food is not None: + status = f"Lions will eat {food}" + print(status) + mastodon = get_masto_client_and_login() + mastodon.status_post(status, visibility="public")