]> git.cworth.org Git - turbot/blobdiff - turbot/hunt.py
Extend puzzle search to include type and tags
[turbot] / turbot / hunt.py
index edc8b87c4c2365394a2abcc5163928ec41bdfde8..1e46f6c94eb2c96ed2f721e29facb73551bce85b 100644 (file)
@@ -23,6 +23,18 @@ def find_hunt_for_hunt_id(turb, hunt_id):
     else:
         return None
 
+def hunt_puzzles_for_hunt_id(turb, hunt_id):
+    """Return all puzzles that belong to the given hunt_id"""
+
+    response = turb.table.query(
+        KeyConditionExpression=(
+            Key('hunt_id').eq(hunt_id) &
+            Key('SK').begins_with('puzzle-')
+        )
+    )
+
+    return response['Items']
+
 def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[],
                 limit_to_rounds=None):
     """Generate Slack blocks for a hunt
@@ -42,8 +54,9 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[],
                     all of these terms will be included in the
                     result. A match will be considered on any of
                     puzzle title, round title, puzzle URL, puzzle
-                    state or solution string. Terms can include
-                    regular expression syntax.
+                    state, puzzle type, tags, or solution
+                    string. Terms can include regular expression
+                    syntax.
 
       limit_to_rounds: A list of rounds. If provided only the given
                        rounds will be included in the output. Note:
@@ -62,13 +75,7 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[],
     hunt_id = hunt['hunt_id']
     channel_id = hunt['channel_id']
 
-    response = turb.table.query(
-        KeyConditionExpression=(
-            Key('hunt_id').eq(hunt_id) &
-            Key('SK').begins_with('puzzle-')
-        )
-    )
-    puzzles = response['Items']
+    puzzles = hunt_puzzles_for_hunt_id(turb, hunt_id)
 
     # Filter the set of puzzles according the the requested puzzle_status
     if puzzle_status in ('solved', 'unsolved'):
@@ -120,6 +127,7 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[],
             blocks += round_blocks(round, puzzles, omit_header=True)
         else:
             blocks += round_blocks(round, puzzles)
+        blocks.append(divider_block())
 
     # Also blocks for any puzzles not in any round
     stray_puzzles = [puzzle for puzzle in puzzles if 'rounds' not in puzzle]