]> git.cworth.org Git - turbot/commitdiff
Add (and use) a new function find_hunt_for_hunt_id
authorCarl Worth <cworth@cworth.org>
Sun, 27 Dec 2020 20:34:58 +0000 (12:34 -0800)
committerCarl Worth <cworth@cworth.org>
Sun, 27 Dec 2020 20:39:25 +0000 (12:39 -0800)
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

index cb849763c33ff153ec92f06201dffe0e57cd6007..94e8310ebd5ee03838cbf3a7f2b4496846a5bbe8 100644 (file)
@@ -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(