X-Git-Url: https://git.cworth.org/git?p=turbot-web;a=blobdiff_plain;f=html_generator.py;h=0fef3d421c3f1b9158a7e97932f07b43342b24a6;hp=3ee751c989348e6c5004ec399fa6dc403f4972be;hb=HEAD;hpb=72e26f791228ad95c4cc5bd67eba4e0d23396f63 diff --git a/html_generator.py b/html_generator.py index 3ee751c..f187032 100644 --- a/html_generator.py +++ b/html_generator.py @@ -16,10 +16,30 @@ Requires sorttable.js, which should be included """ import boto3 from boto3.dynamodb.conditions import Key +import os import re +import sys -website = "https://halibut.cworth.org/" -#change this if we're using AWS or some other subdomain instead +WEBROOT = "/srv/halibut.cworth.org/www" + + +def hunt_file(hunt, name): + """Return a path file 'name' within the given hunt. + + This will be withing WEBROOT and in a hunt-specific path.""" + + return "{}/{}/{}".format(WEBROOT, hunt['channel_id'], name) + +def internal_link(hunt, name): + """Returns a path for a link on this site.""" + + # Just generate a relative link, (which is just the name itself) + return "{}".format(name) + +def filename_from_name(name): + """Returns a string derived from name, but with all spaces and slashes + replaced with underscores, (for making a clean filename)""" + return re.sub(r'[ /]', '_', name) def channel_url(channel_id): """Given a channel ID, return the URL for that channel.""" @@ -86,7 +106,7 @@ def hunt_info(table, hunt_id): rounds = list(rounds) rounds.sort() - return puzzles, rounds + return hunt, puzzles, rounds def round_stat(rnd, puzzles): #Counts puzzles, solved, list of puzzles for a given round @@ -118,15 +138,16 @@ def round_stat(rnd, puzzles): -def overview(puzzles, rounds): +def overview(hunt, puzzles, rounds): #big board, main page. saves as index.html start = ['\n', '\n', '
\n', ' \n', ' \n', + ' \n', '\n', - ' \n', + ' \n', ' \n', '\n', '{}
\n'.format(link(website + "index.html", 'Hunt Overview')), + '{}
\n'.format(link(internal_link(hunt, "index") + ".html", 'Hunt Overview')), '{} | \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(link(internal_link(hunt, filename_from_name(puzzle['name'])) + ".html", 'Overview')), + '{} | \n'.format(", ".join(puzzle['solution']).upper()), # '\n', - ' | {} | \n'.format("".join(puzzle['tags'])), + '{} | \n'.format(", ".join(puzzle.get('tags',[]))), '
{} | \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(link(internal_link(hunt, filename_from_name(puzzle['name'])) + ".html", 'Overview')), '\n', # ' | \n', - ' | {} | \n'.format(" ".join(puzzle['tags'])), + '{} | \n'.format(", ".join(puzzle.get('tags',[]))), '
{}
'.format(link(website + 'index.html', 'Hunt Overview')), + '{}
'.format(link(internal_link(hunt, 'index') + ".html", 'Hunt Overview')), '\n', '\n', '\n'.format(status), @@ -308,7 +337,7 @@ def puzzle_overview(puzzle): '{} | \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')), 'Additional Resources | \n', '
Round(s): {} | \n'.format(" ".join(round_url)), #round page on our site - 'Tags: {} | \n'.format(" ".join(puzzle['tags'])), #add tags + 'Tags: {} | \n'.format(", ".join(puzzle.get('tags',[]))), #add tags '
Answer: {} | \n'.format(solution), @@ -327,15 +356,15 @@ def puzzle_overview(puzzle): '\n', '\n', '