X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=turbot%2Fhunt.py;h=5bbbbc6cd6e77f72aabd1717b7b83f2dff6c44c7;hb=f261affba59d0d8853d7e486acf2a91e36d96071;hp=edc8b87c4c2365394a2abcc5163928ec41bdfde8;hpb=61f3273b217ea1be55adc24c294a4318a98733ef;p=turbot diff --git a/turbot/hunt.py b/turbot/hunt.py index edc8b87..5bbbbc6 100644 --- a/turbot/hunt.py +++ b/turbot/hunt.py @@ -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'): @@ -107,8 +114,11 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[], ] if not len(puzzles): + text = "No puzzles found." + if puzzle_status != 'all': + text += ' (Consider searching for "all" puzzles?)' blocks += [ - section_block(text_block("No puzzles found.")) + section_block(text_block(text)) ] # Construct blocks for each round @@ -120,6 +130,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]