From 88cc255b97357ff671194816186c88b6b42eaccf Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Wed, 12 Jan 2022 00:12:58 -0800 Subject: [PATCH] Make the code robust against a puzzle without some fields Specifically, some puzzles may be missing any of the 'rounds', 'tags', or 'url' keys. Previousl, the code was crashing whenever this was the case. With this commit, empty strings or empty lists are used as the values for any missing keys as appropriate. --- html_generator.py | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/html_generator.py b/html_generator.py index 3ee751c..b944391 100644 --- a/html_generator.py +++ b/html_generator.py @@ -246,22 +246,22 @@ def round_overview(rnd, puzzles): if puzzle['status'] == 'solved': puzzle_list += [ ' \n', ' {}\n'.format(elink(slack_url, puzzle['name']+meta)), - ' {}\n'.format(elink(puzzle['url'], 'Puzzle')), + ' {}\n'.format(elink(puzzle.get('url',''), 'Puzzle')), ' {}\n'.format(elink(puzzle['sheet_url'], 'Sheet')), ' {}\n'.format(link(website + "_".join(puzzle['name'].split()) + '.html', 'Overview')), ' {}\n'.format(puzzle['solution']), # ' \n', - ' {}\n'.format("".join(puzzle['tags'])), + ' {}\n'.format("".join(puzzle.get('tags',[]))), ' \n'] else: puzzle_list += [ ' \n', ' {}\n'.format(elink(slack_url, puzzle['name']+meta)), - ' {}\n'.format(elink(puzzle['url'], 'Puzzle')), + ' {}\n'.format(elink(puzzle.get('url',''), 'Puzzle')), ' {}\n'.format(elink(puzzle['sheet_url'], 'Sheet')), ' {}\n'.format(link(website + "_".join(puzzle['name'].split()) + '.html', 'Overview')), ' \n', # ' \n', - ' {}\n'.format(" ".join(puzzle['tags'])), + ' {}\n'.format(" ".join(puzzle.get('tags',[]))), ' \n'] end = [' \n', ' \n', @@ -285,7 +285,10 @@ def puzzle_overview(puzzle): else: meta = '' slack_url = channel_url(puzzle['channel_id']) - round_url = [link(website + "_".join(rnd.split()) + "_round.html", rnd) for rnd in puzzle['rounds']] + if 'rounds' in puzzle: + round_url = [link(website + "_".join(rnd.split()) + "_round.html", rnd) for rnd in puzzle['rounds']] + else: + round_url = '' if puzzle['status'] == 'solved': solution = puzzle['solution'] status = 'solved' @@ -308,7 +311,7 @@ def puzzle_overview(puzzle): ' \n', ' \n', ' \n'.format(elink(slack_url, 'Channel')), #slack channel - ' \n'.format(elink(puzzle['url'], 'Puzzle')), + ' \n'.format(elink(puzzle.get('url',''), 'Puzzle')), ' \n'.format(elink(puzzle['sheet_url'], 'Sheet')), ' \n', ' \n', @@ -316,7 +319,7 @@ def puzzle_overview(puzzle): '
{}{}{}{}Additional Resources
\n', ' \n', ' \n'.format(" ".join(round_url)), #round page on our site - ' \n'.format(" ".join(puzzle['tags'])), #add tags + ' \n'.format(" ".join(puzzle.get('tags',[]))), #add tags ' \n', ' \n', ' \n'.format(solution), @@ -378,17 +381,20 @@ def puzzle_lists(puzzles, filt): else: meta = '' slack_url = channel_url(puzzle['channel_id']) - round_url = link(website + "_".join(rnd.split()) + "_round.html", puzzle['rounds'][0]) + if 'rounds' in puzzle: + round_url = link(website + "_".join(rnd.split()) + "_round.html", puzzle['rounds'][0]) + else: + round_url = '' #assuming one round per puzzle for now solved_code += [' \n', ' \n'.format(elink(slack_url, puzzle['name']+meta)), - ' \n'.format(elink(puzzle['url'], 'Puzzle')), + ' \n'.format(elink(puzzle.get('url',''), 'Puzzle')), ' \n'.format(elink(puzzle['sheet_url'], 'Sheet')), ' \n'.format(link(website + "_".join(puzzle['name'].split()) + '.html', 'Overview')), ' \n'.format(puzzle['solution']), ' \n'.format(round_url), - ' \n'.format("".join(puzzle['tags'])), + ' \n'.format("".join(puzzle.get('tags',[]))), ' \n'] for puzzle in unsolved_puzzles: if puzzle['type'] == 'meta': @@ -396,17 +402,20 @@ def puzzle_lists(puzzles, filt): else: meta = '' slack_url = channel_url(puzzle['channel_id']) - round_url = link(website + "_".join(rnd.split()) + "_round.html", puzzle['rounds'][0]) + if 'rounds' in puzzle: + round_url = link(website + "_".join(rnd.split()) + "_round.html", puzzle['rounds'][0]) + else: + round_url = '' #assuming one round per puzzle for now unsolved_code += [' \n', ' \n'.format(elink(slack_url, puzzle['name']+meta)), - ' \n'.format(elink(puzzle['url'], 'Puzzle')), + ' \n'.format(elink(puzzle.get('url',''), 'Puzzle')), ' \n'.format(elink(puzzle['sheet_url'], 'Sheet')), ' \n'.format(link(website + "_".join(puzzle['name'].split()) + '.html', 'Overview')), ' \n', ' \n'.format(round_url), - ' \n'.format("".join(puzzle['tags'])), + ' \n'.format("".join(puzzle.get('tags',[]))), ' \n'] end = [' \n', '
Round(s): {}Tags: {}Tags: {}
Answer: {}
{}{}{}{}{}{}{}{}{}
{}{}{}{}{}{}{}{}
\n', -- 2.43.0