GunRunMaps/create_index.py

104 lines
3.4 KiB
Python
Executable File

#!/usr/bin/python3
import glob, fileinput, os, re, shutil, sys, tempfile, time
year = 2023
webfile_dir = "~/public_html/GunRun{}/".format(year)
print("NOTE: year is {}".format(year))
webfile_dir = os.path.expanduser(webfile_dir)
for root, dirs, files in os.walk(webfile_dir):
documents=[]
for file in files:
if re.search('.(pdf|png|jpg|jpeg|htm|html|mp4|pptx)$', file) and not re.search('index.html', file):
try:
documents.append(os.path.join(file))
except OSError:
pass
canonical=[]
archive=[]
marshals=[]
for file in documents:
name=os.path.basename(file)
if re.search('^\d{8}', name):
archive.append(name)
elif re.search('_marshal_map_', name):
marshals.append(name)
else:
canonical.append(name)
indexfile = open(os.path.join(webfile_dir, root, "index.html"), "w")
output = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Gun Run {} Maps</title>
</head>
<body>
<h1>Gun Run {} Maps</h1>
""".format(year, year)
if canonical:
output += """<p>Maps</p><ul>"""
for link in sorted(canonical):
overview=re.search("Marshal overview", link)
if overview is not None:
continue
type=re.search("^Gun Run {} - (.*?)\.\S+$".format(year), link, re.IGNORECASE)
if type is not None:
name=type.group(1)
else:
name=link
output += """<li><a href="{}">{}</a></li>""".format(link, name)
output += """</ul>"""
if dirs:
output +="""<p>Clubs</p><ul>"""
dirs.sort()
for link in dirs:
if not os.path.islink(link):
output += """<li><a href="{}">{}</a></li>""".format(link, link)
output += """</ul>"""
if archive:
archive=[i.split(' - ') for i in archive]
archive.sort(key=lambda line: (line[2],line[0]))
archive = [' - '.join(i) for i in archive]
output +="""<p>Source Maps</p><ul>"""
for link in archive:
output += """<li><a href="{}">{}</a></li>""".format(link, link)
output += """</ul>"""
if marshals:
output +="""<p>Marshal maps</p><table style="border-collapse: collapse;">"""
marshals.sort(key=lambda x: int(re.sub('^.*_(\d+)\..{3,6}?$', '\g<1>', x)))
positions={}
for link in marshals:
m = re.search('^(.*?).(pdf|png|jpg|jpeg)$', link)
if m is not None:
positions.setdefault(m.group(1), {})[m.group(2)] = link
for name, ext in positions.items():
day = re.sub('^(\d+)_.*', '\g<1>', name)
num = re.sub('(?:\d+_)\D+', '', name)
if day == "1":
day = "Saturday"
else:
day = "Sunday"
output += """<tr style="border-bottom: 1pt solid black">"""
output += """<td style="padding: 4px 12px;">{}</td>""".format(day)
output += """<td style="padding: 4px 12px;">{}</td>""".format(num)
for link in ext.values():
output += """<td style="padding: 4px 12px;"><a href="{}">{}</a></td>""".format(link, link)
output += """<tr>"""
output += """<table>"""
output += """</body></html>"""
indexfile.write(output)
indexfile.close()
# vim: set expandtab shiftwidth=4 softtabstop=4 :