X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=turbot%2Fpuzzle.py;h=abfe60b505308874109938f48f234cc2791c19a0;hb=c7c34060b8469fcb6c84ad8d850896ec2b0e7b88;hp=3a0e312720aad3ad6c76c39abf89e36ab6691f8a;hpb=d53959afec8688d3f3c164f1b94de6dbec8bc13c;p=turbot diff --git a/turbot/puzzle.py b/turbot/puzzle.py index 3a0e312..abfe60b 100644 --- a/turbot/puzzle.py +++ b/turbot/puzzle.py @@ -32,6 +32,34 @@ def find_puzzle_for_sort_key(turb, hunt_id, sort_key): else: return None +def find_puzzle_for_puzzle_id(turb, hunt_id, puzzle_id): + """Given a hunt_id and puzzle_id, return that puzzle + + Returns None if no puzzle with the given hunt_id and puzzle_id + exists in the database, otherwise a dictionary with all fields + from the puzzle's row in the database. + + Note: The sort_key is a modified version of the puzzle_id, (used + to make metapuzzles appear in the ordering before non-metapuzzles). + If you've been handed a sort_key, then looking up a puzzle by + sort_key is the right thing to do. But if you instead have just + a puzzle_id, see find_puzzle_for_puzzle_id rather than trying + to convert the puzzle_id into a sort_key to use this function. + """ + + response = turb.table.query( + IndexName='puzzle_id_index', + KeyConditionExpression=( + Key('hunt_id').eq(hunt_id) & + Key('puzzle_id').eq(puzzle_id) + ) + ) + + if response['Count'] == 0: + return None + + return response['Items'][0] + def find_puzzle_for_url(turb, hunt_id, url): """Given a hunt_id and URL, return the puzzle with that URL @@ -255,7 +283,7 @@ def puzzle_channel_name(puzzle): meta = '' if puzzle.get('type', 'plain') == 'meta': - meta = '-m' + meta = '--m' # Note: We don't use puzzle['puzzle_id'] here because we're keeping # that as a persistent identifier in the database. Instead we