From: Carl Worth Date: Wed, 12 Jan 2022 08:12:58 +0000 (-0800) Subject: Make the code robust against a puzzle without some fields X-Git-Url: https://git.cworth.org/git?p=turbot-web;a=commitdiff_plain;h=88cc255b97357ff671194816186c88b6b42eaccf 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. --- 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',