From 8ffca056fb60e37779fb9807ff64cb0b183e6d2f Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sun, 27 Dec 2020 12:34:58 -0800 Subject: [PATCH] Add (and use) a new function find_hunt_for_hunt_id The code to call get_table_item with a hunt_id was broken, (since in the schema, hunt_id is not the key, only channel_id is), so instead we need to scan the table looking for a matching hunt_id. We already had code to do this is find_hunt_for_channel, so here we factor that out into a new function, find_hunt_for_hunt_id and call it instead of get_table_item. --- turbot/interaction.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/turbot/interaction.py b/turbot/interaction.py index cb84976..94e8310 100644 --- a/turbot/interaction.py +++ b/turbot/interaction.py @@ -244,6 +244,27 @@ def channel_is_hunt(turb, channel_id): return get_table_item(turb, "hunts", 'channel_id', channel_id) +def find_hunt_for_hunt_id(turb, hunt_id): + """Given a hunt ID find the database for for that hunt + + Returns None if hunt ID is not found, otherwise a + dictionary with all fields from the hunt's row in the table, + (channel_id, active, hunt_id, name, url, sheet_url, etc.). + + """ + hunts_table = turb.db.Table("hunts") + + response = hunts_table.scan( + FilterExpression='hunt_id = :hunt_id', + ExpressionAttributeValues={':hunt_id': hunt_id} + ) + + if 'Items' in response and len(response['Items']): + item = response['Items'][0] + return item + + return None + def find_hunt_for_channel(turb, channel_id, channel_name): """Given a channel ID/name find the id/name of the hunt for this channel @@ -252,7 +273,7 @@ def find_hunt_for_channel(turb, channel_id, channel_name): Returns None if channel does not belong to a hunt, otherwise a dictionary with all fields from the hunt's row in the table, - (channel_id, active_, hun_id, name, url, sheet_url, etc.). + (channel_id, active, hunt_id, name, url, sheet_url, etc.). """ @@ -265,18 +286,7 @@ def find_hunt_for_channel(turb, channel_id, channel_name): # puzzle channel with a hunt-id prefix. hunt_id = channel_name.split('-')[0] - hunts_table = turb.db.Table("hunts") - - response = hunts_table.scan( - FilterExpression='hunt_id = :hunt_id', - ExpressionAttributeValues={':hunt_id': hunt_id} - ) - - if 'Items' in response and len(response['Items']): - item = response['Items'][0] - return item - - return None + return find_hunt_for_hunt_id(turb, hunt_id) def puzzle(turb, body, args): """Implementation of the /puzzle command @@ -447,7 +457,7 @@ def solved(turb, body, args): "Puzzle mark solved by {}: `{}`".format(user_name, args)) # Also report the solution to the hunt channel - (hunt, _) = get_table_item(turb, "hunts", "hunt_id", puzzle['hunt_id']) + hunt = find_hunt_for_hunt_id(turb, puzzle['hunt_id']) slack_send_message( turb.slack_client, hunt['channel_id'], "Puzzle '<{}|{}>' has been solved!".format( -- 2.43.0