You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1847 lines
81 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import datetime,os,re,requests
from bs4 import BeautifulSoup
from collections import Counter
import log,variables
values = ["red","orange","yellow","green","blue","purple","brown","gray","special"]
numbers = ["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20"]
print("Getting list of deck colours")
deckkey = []
request = requests.get("https://colors-tcg.eu/cards.php?view=alpha")
alldecks = open("key.html","w")
alldecks.write(request.text)
alldecks.close()
# need to correct some html issues
with open("key.html","r") as file:
filedata = file.read()
filedata = filedata.replace("</td></td>","</td>")
with open("key.html","w") as file:
file.write(filedata)
with open("key.html") as decks:
decksoup = BeautifulSoup(decks, "html.parser")
soupdecks = decksoup.find("table",{"id":"colors"})
souprows = soupdecks.find_all("tr")
for row in souprows:
soupcells = row.find_all("td")
deckname = soupcells[2].text.lower().replace(" ","").replace("'","").replace("ç","c").replace(".","").replace("politetness","politeness")
decktype = soupcells[3].text.lower()
thedeck = {}
thedeck[deckname] = decktype
if decktype in values:
deckkey.append(thedeck)
print("Parsing log")
cardlist = []
portfolios = []
crayred = 0
crayorange = 0
crayyellow = 0
craygreen = 0
crayblue = 0
craypurple = 0
craybrown = 0
craygrey = 0
tradeout = []
tradein = []
redeemedsketch = 0
coupons = []
datelist = []
logitems = []
for event in log.log:
logentry = {}
logentry["date"] = event["date"]
logentry["name"] = event["event"]
logentry["url"] = event["url"]
logit = False
if event["event"] == "portfolio":
portfolio = {}
thedecks = {}
for deck in event["decks"]:
for keydeck in deckkey:
if deck in keydeck:
thedecks[deck] = keydeck[deck]
break
portcolours = list(thedecks.values())
portcolours = sorted(list(dict.fromkeys(portcolours)))
if len(portcolours) < 3:
portfolio["type"] = "monochrome"
else:
portfolio["type"] = "palette"
portfolio["decks"] = thedecks
portfolio["url"] = event["url"]
portfolios.append(portfolio)
else:
try:
if event["received"]:
logit = True
receivedcards = []
for card in event["received"]:
thecard = {}
if card[0:4] != "sig_":
thedeck = card[:-2]
thecard["name"] = card
thecard["received"] = event["date"]
thecard["mass"] = []
if card[0:4] != "sig_":
for theme in variables.masscollect:
try:
if thedeck in variables.masscollect[theme]["decks"]:
thecard["mass"].append(theme)
except KeyError:
pass
try:
if card in variables.masscollect[theme]["singles"]:
thecard["mass"].append(theme)
except KeyError:
pass
if card[0:4] == "sig_":
thecard["colour"] = "sig"
else:
for deck in deckkey:
if thedeck in deck:
thecard["colour"] = deck[thedeck]
break
try:
if thecard["colour"]:
pass
except:
print("Warning: no colour found for " + thedeck)
if thecard["colour"] == "sig":
if card[4:] == variables.name.lower():
thecard["priority"] = 5
else:
thecard["priority"] = 1
else:
if thedeck in variables.highpriority:
thecard["priority"] = 1
elif len(thecard["mass"]) > 0:
thecard["priority"] = 2
else:
thecard["priority"] = 4
cardlist.append(thecard)
datelist.append(event["date"])
receivedcards.append(thecard)
logentry["received"] = receivedcards
except KeyError:
pass
try:
if event["lost"]:
logit = True
lostcards = []
for card in event["lost"]:
checkno = len(cardlist) - 1
deleted = False
while checkno >= 0:
if cardlist[checkno]["name"] == card:
if deleted == False:
colour = cardlist[checkno]["colour"]
cardlist.remove(cardlist[checkno])
deleted = True
checkno -= 1
if deleted == False:
print("Warning: trying to remove " + card + " but none found")
lostcard = {}
lostcard["name"] = card
lostcard["colour"] = colour
lostcards.append(lostcard)
datelist.remove(datelist[-1])
logentry["lost"] = lostcards
except KeyError:
pass
crayons = {}
try:
crayred += event["crayons"]["red"]
logit = True
crayons["red"] = event["crayons"]["red"]
except:
pass
try:
crayorange += event["crayons"]["orange"]
logit = True
crayons["orange"] = event["crayons"]["orange"]
except:
pass
try:
crayyellow += event["crayons"]["yellow"]
logit = True
crayons["yellow"] = event["crayons"]["yellow"]
except:
pass
try:
craygreen += event["crayons"]["green"]
logit = True
crayons["green"] = event["crayons"]["green"]
except:
pass
try:
crayblue += event["crayons"]["blue"]
logit = True
crayons["blue"] = event["crayons"]["blue"]
except:
pass
try:
craypurple += event["crayons"]["purple"]
logit = True
crayons["purple"] = event["crayons"]["purple"]
except:
pass
try:
craybrown += event["crayons"]["brown"]
logit = True
crayons["brown"] = event["crayons"]["brown"]
except:
pass
try:
craygrey += event["crayons"]["gray"]
logit = True
crayons["grey"] = event["crayons"]["gray"]
except:
pass
if len(crayons) > 0:
logentry["crayons"] = crayons
if event["event"][0:11] == "trade with ":
try:
for card in event["lost"]:
tradeout.append(event["event"])
except:
pass
try:
for card in event["received"]:
tradein.append(event["event"])
except:
pass
if len(crayons) > 0:
logentry["crayons"] = crayons
try:
redeemedsketch -= event["sketch"]
except:
pass
try:
for newcoupon in event["coupons"]:
found = False
for oldcoupon in coupons:
if found == False:
if newcoupon == list(oldcoupon.keys())[0]:
found = True
oldcoupon[newcoupon] += event["coupons"][newcoupon]
if found == False:
coupons.append({newcoupon:event["coupons"][newcoupon]})
except:
pass
if logit == True:
logitems.append(logentry)
logitems = logitems[::-1]
coupons = coupons[::-1]
print("Getting list of owned decks")
portdecks = []
for portfolio in portfolios:
oneportdecks = list(portfolio["decks"].keys())
portdecks.extend(oneportdecks)
portdecks = sorted(list(dict.fromkeys(portdecks)))
decks = []
for card in cardlist:
if card["colour"] != "sig":
deck = card["name"][:-2]
decks.append(deck)
decks = sorted(list(dict.fromkeys(decks)))
decklist = []
for deck in decks:
thedeck = {}
thedeck["name"] = deck
for keydeck in deckkey:
if deck in keydeck:
thedeck["colour"] = keydeck[deck]
break
thedeck["mass"] = []
thedeck["massmaster"] = []
for theme in variables.masscollect:
try:
if deck in variables.masscollect[theme]["decks"]:
thedeck["mass"].append(theme)
except KeyError:
pass
try:
if deck in variables.masscollect[theme]["masters"]:
thedeck["massmaster"].append(theme)
except KeyError:
pass
count = 0
for number in numbers:
thedeck[number] = None
for card in cardlist:
if card["name"] == deck + number:
if thedeck[number] == None:
thedeck[number] = card["received"]
count += 1
thedeck["count"] = count
if count == 20:
dates = []
for number in numbers:
dates.append(thedeck[number])
dates = sorted(dates)
thedeck["mastered"] = dates[-1]
else:
thedeck["mastered"] = False
if deck in variables.highpriority or count >= variables.highthreshold or deck in portdecks:
thedeck["priority"] = 1
elif len(thedeck["mass"]) > 0 or count >= variables.mediumthreshold:
thedeck["priority"] = 2
elif count >= variables.collectthreshold:
thedeck["priority"] = 3
else:
thedeck["priority"] = 4
decklist.append(thedeck)
print("Checking for new card images")
for card in cardlist:
if card["colour"] == "sig":
if not os.path.exists("build/decks/sigs/" + card["name"][4:] + ".gif"):
r = requests.get("https://colors-tcg.eu/cards/" + card["name"] + ".gif")
open("build/decks/sigs/" + card["name"] + ".gif","wb").write(r.content)
for deck in decklist:
if not os.path.isdir("build/decks/" + deck["name"]):
os.mkdir("build/decks/" + deck["name"])
print("Downloading " + deck["name"])
number = 0
while number < 21:
if number < 10:
r = requests.get("https://colors-tcg.eu/cards/" + deck["name"] + "0" + str(number) + ".gif")
open("build/decks/" + deck["name"] + "/0" + str(number) + ".gif","wb").write(r.content)
else:
r = requests.get("https://colors-tcg.eu/cards/" + deck["name"] + str(number) + ".gif")
open("build/decks/" + deck["name"] + "/" + str(number) + ".gif","wb").write(r.content)
number += 1
master = requests.get("https://colors-tcg.eu/cards/" + deck["name"] + "master.gif")
open("build/decks/" + deck["name"] + "/master.gif","wb").write(master.content)
print("Getting list of wanted cards")
wantedlist = []
for deck in decklist:
if deck["priority"] < 4:
for number in numbers:
if deck[number] == None:
wantedcard = {}
wantedcard["name"] = deck["name"] + str(number)
wantedcard["colour"] = deck["colour"]
wantedcard["priority"] = deck["priority"]
wantedlist.append(wantedcard)
print("Adjusting card priorities")
for card in cardlist:
for deck in decklist:
if card["name"][:-2] == deck["name"]:
if card["priority"] > deck["priority"]:
card["priority"] = deck["priority"]
cardlist = sorted(cardlist, key=lambda d: d["name"])
theindex = 0
for card in cardlist:
card["dupe"] = False
if card["name"][0:4] != "sig_":
if theindex > 0:
if card["name"] == cardlist[theindex-1]["name"]:
card["priority"] = 4
card["dupe"] = True
theindex += 1
theindex = 0
if variables.keepsig == True:
for card in cardlist:
if card["name"] == "sig_" + variables.name.lower():
card["priority"] = 1
if theindex > 0:
if cardlist[theindex-1]["name"] == "sig_" + variables.name.lower():
card["priority"] = 5
theindex += 1
# core functions
def headerwrite(thefile,pagename):
header = open(thefile,"a")
header.write("<!DOCTYPE html>\n<html lang=\"en\" style=\"--headbg:" + variables.headerbackground + ";\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <link rel=\"stylesheet\" href=\"/style.css\">\n <link rel=\"stylesheet\" href=\"/user.css\">\n <meta name=\"theme-color\" content=\"" + variables.headerbackground + "\">\n <title>" + variables.name + "s card collection :: " + pagename + "</title>\n </head>\n <body class=\"" + pagename + "\">\n <aside>\n \n </aside>\n <nav>\n <ul>\n <li>")
if pagename == "index":
header.write("home")
else:
header.write("<a href=\"/\">home</a>")
header.write("</li>\n <li>")
if pagename == "collecting":
header.write("collecting")
else:
header.write("<a href=\"/collecting\">collecting</a>")
header.write("</li>\n <li>")
if pagename == "mass":
header.write("mass collecting")
else:
header.write("<a href=\"/mass\">mass collecting</a>")
header.write("</li>\n <li>")
if pagename == "mastered":
header.write("mastered")
else:
header.write("<a href=\"/mastered\">mastered</a>")
header.write("</li>\n")
if variables.ownedpage:
header.write(" <li>")
if pagename == "owned":
header.write("owned")
else:
header.write("<a href=\"/owned\">owned</a>")
header.write("</li>\n")
header.write(" <li>")
if pagename == "trade":
header.write("trading")
else:
header.write("<a href=\"/trade\">trading</a>")
header.write("</li>\n <li>")
if pagename == "wanted":
header.write("wanted")
else:
header.write("<a href=\"/wanted\">wanted</a>")
header.write("</li>\n <li>")
if pagename == "search":
header.write("search")
else:
header.write("<a href=\"/search\">search</a>")
header.write("</li>\n <li>")
if pagename == "log":
header.write("log")
else:
header.write("<a href=\"/log\">log</a>")
header.write("</li>\n <li><a href=\"" + variables.tradepost + "\" target=\"_blank\">trade post @ dw</a></li>\n <li><a href=\"https://colors-tcg.eu/services.php\" target=\"_blank\">service links</a></li>\n </ul>\n </nav>\n <main>\n")
header.close()
def footerwrite(thefile):
footer = open(thefile,"a")
footer.write(" </main>\n </body>\n</html>")
footer.close()
def printcard(card):
if card["colour"] == "sig":
return "<img src=\"/decks/sigs/" + card["name"][4:] + ".gif\" title=\"" + card["name"] + "\" loading=\"lazy\">"
else:
deck = card["name"][:-2]
cardid = card["name"][-2:]
return "<img src=\"/decks/" + deck + "/" + cardid + ".gif\" title=\"" + card["name"] + "\" loading=\"lazy\">"
def cardtext(card):
cardtext = "<span class=\"cardname\">"
if card["colour"] == "sig":
cardtext += "<span title=\"signature\">✍</span>" + card["name"] + "</span>"
else:
if card["colour"] == "red":
cardtext += "<span title=\"red\">🔴</span>"
elif card["colour"] == "orange":
cardtext += "<span title=\"orange\">🟠</span>"
elif card["colour"] == "yellow":
cardtext += "<span title=\"yellow\">🟡</span>"
elif card["colour"] == "green":
cardtext += "<span title=\"green\">🟢</span>"
elif card["colour"] == "blue":
cardtext += "<span title=\"blue\">🔵</span>"
elif card["colour"] == "purple":
cardtext += "<span title=\"purple\">🟣</span>"
elif card["colour"] == "brown":
cardtext += "<span title=\"brown\">🟤</span>"
elif card["colour"] == "gray":
cardtext += "<span title=\""
if variables.british:
cardtext += "grey"
else:
cardtext += "gray"
cardtext += "\">⚪</span>"
elif card["colour"] == "special":
cardtext += "<span title=\"special\">✨</span>"
cardtext += card["name"] + "</span>"
return cardtext
def portfoliogen(theportfolio,thetype,portnumber):
if thetype == "palette":
portstring = "<table class=\"palette portfolio\">\n<tbody>\n<tr>\n<td colspan=\"2\">" + variables.name.lower() + "</td>\n</tr>\n<tr>\n<td class=\"deck1\">"
try:
reddeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("red")]
for deck in decklist:
if deck["name"] == reddeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + reddeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n<td class=\"deck5\">"
try:
bluedeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("blue")]
for deck in decklist:
if deck["name"] == bluedeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + bluedeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n</tr>\n<tr>\n<td class=\"deck2\">"
try:
orangedeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("orange")]
for deck in decklist:
if deck["name"] == orangedeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + orangedeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n<td class=\"deck6\">"
try:
purpledeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("purple")]
for deck in decklist:
if deck["name"] == purpledeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + purpledeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n</tr>\n<tr>\n<td class=\"deck3\">"
try:
yellowdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("yellow")]
for deck in decklist:
if deck["name"] == yellowdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + yellowdeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n<td class=\"deck7\">"
try:
browndeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("brown")]
for deck in decklist:
if deck["name"] == browndeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + browndeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n</tr>\n<tr>\n<td class=\"deck4\">"
try:
greendeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("green")]
for deck in decklist:
if deck["name"] == greendeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + greendeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n<td class=\"deck8\">"
try:
greydeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("gray")]
for deck in decklist:
if deck["name"] == greydeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + greydeck
except:
specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
for deck in decklist:
if deck["name"] == specialdeck:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + specialdeck
portstring += "</td>\n</tr>\n<tr>\n<td colspan=\"2\"><a href=\"" + theportfolio["url"] + "\">palette portfolio "
if portnumber < 10:
portstring += "0" + str(portnumber)
else:
portstring += str(portnumber)
portstring += "</a></td>\n</tr>\n</tbody>\n</table>\n"
elif thetype == "monochrome":
thecolour = list(theportfolio["decks"].values())[0]
portstring = "<table class=\"" + thecolour + " portfolio\">\n<tbody>\n<tr>\n<td colspan=\"2\">" + variables.name.lower() + "</td>\n</tr>\n<tr>\n<td class=\"deck1\">"
thedecks = sorted(list(theportfolio["decks"].keys()))
for deck in decklist:
if deck["name"] == thedecks[0]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[0] + "</td>\n<td class=\"deck5\">"
for deck in decklist:
if deck["name"] == thedecks[4]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[4] + "</td>\n</tr>\n<tr>\n<td class=\"deck2\">"
for deck in decklist:
if deck["name"] == thedecks[1]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[1] + "</td>\n<td class=\"deck6\">"
for deck in decklist:
if deck["name"] == thedecks[5]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[5] + "</td>\n</tr>\n<tr>\n<td class=\"deck3\">"
for deck in decklist:
if deck["name"] == thedecks[2]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[2] + "</td>\n<td class=\"deck7\">"
for deck in decklist:
if deck["name"] == thedecks[6]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[6] + "</td>\n</tr>\n<tr>\n<td class=\"deck4\">"
for deck in decklist:
if deck["name"] == thedecks[3]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[3] + "</td>\n<td class=\"deck8\">"
for deck in decklist:
if deck["name"] == thedecks[7]:
if deck["mastered"]:
portstring += ""
else:
portstring += ""
break
portstring += " " + thedecks[7] + "</td>\n</tr>\n<tr>\n<td colspan=\"2\"><a href=\"" + theportfolio["url"] + "\">monochrome portfolio "
if portnumber < 10:
portstring += "0" + str(portnumber)
else:
portstring += str(portnumber)
portstring += "</a></td>\n</tr>\n</tbody>\n</table>\n"
return portstring
portfoliosearch = len(portfolios)
latestpalette = 0
latestmonochrome = 0
palettes = 0
monochromes = 0
while portfoliosearch > 0:
if portfolios[portfoliosearch-1]["type"] == "palette":
palettes += 1
if latestpalette == 0:
latestpalette = portfoliosearch
if portfolios[portfoliosearch-1]["type"] == "monochrome":
monochromes += 1
if latestmonochrome == 0:
latestmonochrome = portfoliosearch
portfoliosearch -= 1
def filterwrite(page,colour=False,sigs=False):
filterstring = "<p class=\"typefilter\">"
if colour:
filterstring += "Filtered to <span class=\"" + colour + "\"><b>"
if colour == "gray":
if variables.british:
filterstring += "grey"
else:
filterstring += "gray"
else:
filterstring += colour
filterstring += "</b></span>. <a href=\"/" + page + "\">Show all</a>"
else:
filterstring += "Filter: <a href=\"/" + page + "/red\" title=\"red\">🔴</a> <a href=\"/" + page + "/orange\" title=\"orange\">🟠</a> <a href=\"/" + page + "/yellow\" title=\"yellow\">🟡</a> <a href=\"/" + page + "/green\" title=\"green\">🟢</a> <a href=\"/" + page + "/blue\" title=\"blue\">🔵</a> <a href=\"/" + page + "/purple\" title=\"purple\">🟣</a> <a href=\"/" + page + "/brown\" title=\"brown\">🟤</a> <a href=\"/" + page + "/gray\" title=\""
if variables.british:
filterstring += "grey"
else:
filterstring += "gray"
filterstring += "\">⚪</a> <a href=\"/" + page + "/special\" title=\"special\">✨</a>"
if sigs:
filterstring += " <a href=\"/" + page + "/sig\" title=\"sig\">✍</a>"
filterstring += "</p>\n"
return filterstring
def printdeck(deck,fold=True):
if fold:
deckstring = "<details class=\"deckwrap\">\n<summary>" + deck["name"] + " ["
if deck["mastered"]:
deckstring += deck["mastered"].strftime("%Y-%m-%d")
else:
deckstring += str(deck["count"]) + "/20"
deckstring += "]</summary>\n"
else:
deckstring = ""
deckstring += "<table class=\"decktable " + deck["colour"] + "\">\n"
if not fold:
deckstring += "<thead>\n <tr>\n <th colspan=\"5\">" + deck["name"] + " ["
if deck["mastered"]:
deckstring += deck["mastered"].strftime("%Y-%m-%d")
else:
deckstring += str(deck["count"]) + "/20"
deckstring += "]</th>\n </tr>\n</thead>\n"
deckstring += "<tbody>\n"
test = 1
while test < 21:
if test % 5 == 1:
deckstring += " <tr>\n"
deckstring += " <td>"
if test < 10:
teststring = "0" + str(test)
else:
teststring = str(test)
found = False
for card in cardlist:
if card["name"] == deck["name"] + teststring:
deckstring += printcard(card)
found = True
break
if found == False:
deckstring += "<img src=\"/decks/" + deck["name"] + "/00.gif\" loading=\"lazy\">"
deckstring += "</td>\n"
if test % 5 == 0:
deckstring += " </tr>\n"
test += 1
if deck["mastered"]:
deckstring += " <tr>\n <td colspan=\"5\" align=\"center\"><img src=\"/decks/" + deck["name"] + "/master.gif\" title=\"mastered " + deck["name"]
try:
if deck["name"] in variables.firstmasteries:
deckstring += " (first)\" class=\"first"
except:
pass
deckstring += "\"><td>\n</tr>\n"
deckstring += "</tbody>\n</table>\n"
if fold:
deckstring += "</details>\n"
return deckstring
def crayonlog(colour,event):
crayonno = event["crayons"][colour]
if variables.british:
if colour == "grey":
crayonrend = "grey"
else:
crayonrend = colour
else:
crayonrend = colour
if crayonno > 0:
crayonstring = "+" + str(crayonno) + " " + crayonrend
else:
crayonstring = str(crayonno) + " " + crayonrend
return crayonstring
print("Building index page")
def indexgen():
if os.path.exists("build/index.html"):
os.remove("build/index.html")
thefile = "build/index.html"
headerwrite(thefile,"index")
content = open(thefile,"a")
firstdate = log.log[0]["date"]
if len(cardlist) > 14400:
rankcode = "rainbow"
extra = len(cardlist) - 14400
plusranks = int(extra / 300)
if plusranks > 0:
rank = "rainbow + " + str(plusranks)
else:
rank = "rainbow"
else:
if len(cardlist) > 14100:
rank = "himalayan"
elif len(cardlist) > 13800:
rank = "puma"
elif len(cardlist) > 13500:
rank = "chartreux"
elif len(cardlist) > 13500:
rank = "russian blue"
elif len(cardlist) > 12900:
rank = "panther"
elif len(cardlist) > 12600:
rank = "cheetah"
elif len(cardlist) > 12300:
rank = "tiger"
elif len(cardlist) > 12000:
rank = "lion"
elif len(cardlist) > 11700:
rank = "metal"
elif len(cardlist) > 11400:
rank = "ground"
elif len(cardlist) > 11100:
rank = "darkness"
elif len(cardlist) > 10800:
rank = "water"
elif len(cardlist) > 10500:
rank = "nature"
elif len(cardlist) > 10200:
rank = "light"
elif len(cardlist) > 9900:
rank = "wind"
elif len(cardlist) > 9600:
rank = "fire"
elif len(cardlist) > 9300:
rank = "mercury"
elif len(cardlist) > 9000:
rank = "jupiter"
elif len(cardlist) > 8700:
rank = "uranus"
elif len(cardlist) > 8400:
rank = "neptune"
elif len(cardlist) > 8100:
rank = "earth"
elif len(cardlist) > 7800:
rank = "venus"
elif len(cardlist) > 7500:
rank = "saturn"
elif len(cardlist) > 7200:
rank = "mars"
elif len(cardlist) > 6900:
rank = "magnolia"
elif len(cardlist) > 6600:
rank = "chocolate cosmos"
elif len(cardlist) > 6300:
rank = "lilac"
elif len(cardlist) > 6000:
rank = "hydrangea"
elif len(cardlist) > 5700:
rank = "clover"
elif len(cardlist) > 5400:
rank = "daffodil"
elif len(cardlist) > 5100:
rank = "tiger lily"
elif len(cardlist) > 4800:
rank = "sakura"
elif len(cardlist) > 4500:
rank = "silver"
elif len(cardlist) > 4200:
rank = "bronze"
elif len(cardlist) > 3900:
rank = "amethyst"
elif len(cardlist) > 3600:
rank = "sapphire"
elif len(cardlist) > 3300:
rank = "emerald"
elif len(cardlist) > 3000:
rank = "gold"
elif len(cardlist) > 2700:
rank = "amber"
elif len(cardlist) > 2400:
rank = "ruby"
elif len(cardlist) > 2200:
rank = "dragon fruit"
elif len(cardlist) > 2000:
rank = "apricot"
elif len(cardlist) > 1800:
rank = "grape"
elif len(cardlist) > 1600:
rank = "blueberry"
elif len(cardlist) > 1400:
rank = "lime"
elif len(cardlist) > 1200:
rank = "lemon"
elif len(cardlist) > 1000:
rank = "tangerine"
elif len(cardlist) > 800:
rank = "strawberry"
elif len(cardlist) > 700:
rank = "gray"
elif len(cardlist) > 600:
rank = "brown"
elif len(cardlist) > 500:
rank = "purple"
elif len(cardlist) > 400:
rank = "blue"
elif len(cardlist) > 300:
rank = "green"
elif len(cardlist) > 200:
rank = "yellow"
elif len(cardlist) > 100:
rank = "orange"
else:
rank = "red"
rankcode = re.sub(" ","",rank)
content.write("<a href=\"/levels\"><img src=\"/assets/levels/" + rankcode + ".gif\"></a><img src=\"/decks/sigs/" + variables.name.lower() + ".gif\" loading=\"lazy\">\n<ul>\n<li>player name: <span class=\"name\">" + variables.name + "</span></li>\n<li>" + str(len(cardlist)) + " cards held <span class=\"rank " + rank + "\">(" + rank + ")</span></li>\n<li>started <code>" + firstdate.strftime("%Y-%m-%d") + "</code></li>\n<li>last updated <code>" + datetime.datetime.today().strftime("%Y-%m-%d") + "</code></li>\n<li><a href=\"https://git.praze.net/tre/tcg\" target=\"_blank\">code</a> under construction</li>\n")
if len(variables.misclink["text"]) > 0:
content.write("<li><a href=\"" + variables.misclink["link"] + "\">" + variables.misclink["text"] + "</a></li>\n")
content.write("</ul>\n")
if crayred + crayorange + crayyellow + craygreen + crayblue + craypurple + craybrown + craygrey > 0:
content.write("<table id=\"crayontable\">\n<tbody>\n<tr>\n")
if crayred > 0:
content.write("<td class=\"red\"><img src=\"/assets/crayons/crayon1.gif\" class=\"crayon\" title=\"red\"> × " + str(crayred) + "</td>\n")
if crayorange > 0:
content.write("<td class=\"orange\"><img src=\"/assets/crayons/crayon2.gif\" class=\"crayon\" title=\"orange\"> × " + str(crayorange) + "</td>\n")
if crayyellow > 0:
content.write("<td class=\"yellow\"><img src=\"/assets/crayons/crayon3.gif\" class=\"crayon\" title=\"yellow\"> × " + str(crayyellow) + "</td>\n")
if craygreen > 0:
content.write("<td class=\"green\"><img src=\"/assets/crayons/crayon4.gif\" class=\"crayon\" title=\"green\"> × " + str(craygreen) + "</td>\n")
if crayblue > 0:
content.write("<td class=\"blue\"><img src=\"/assets/crayons/crayon5.gif\" class=\"crayon\" title=\"blue\"> × " + str(crayblue) + "</td>\n")
if craypurple > 0:
content.write("<td class=\"purple\"><img src=\"/assets/crayons/crayon6.gif\" class=\"crayon\" title=\"purple\"> × " + str(craypurple) + "</td>\n")
if craybrown > 0:
content.write("<td class=\"brown\"><img src=\"/assets/crayons/crayon7.gif\" class=\"crayon\" title=\"brown\"> × " + str(craybrown) + "</td>\n")
if craygrey > 0:
content.write("<td class=\"grey\"><img src=\"/assets/crayons/crayon8.gif\" class=\"crayon\" title=\"")
if variables.british:
content.write("grey")
else:
content.write("gray")
content.write("\"> × " + str(craygrey) + "</td>\n")
content.write("</tr>\n</tbody>\n</table>\n")
tradecommon = list((Counter(tradeout) & Counter(tradein)).elements())
sketch = len(tradecommon)
if sketch > 0:
content.write("<table class=\"sketchpads\">\n<tbody>\n<tr>\n<td><img src=\"/assets/sketch/")
if sketch % 20 < 10:
content.write("0" + str(sketch % 20))
else:
content.write(str(sketch % 20))
content.write(".gif\"></td>\n")
if sketch > 19:
content.write("<td><img src=\"/assets/sketch/20.gif\" title=\"")
sketchdifference = int(sketch / 20) - redeemedsketch
if sketchdifference > 0:
content.write(str(sketchdifference) + " to turn in")
else:
content.write("all turned in")
content.write("\"></td>\n")
content.write("</tr>\n<tr>\n<td align=\"center\">" + str(sketch % 20) + "/20</td>\n")
if sketch > 19:
content.write("<td align=\"center\">" + str(int(sketch / 20)) + " completed</td>\n")
content.write("</tr>\n</tbody>\n</table>")
if latestpalette + latestmonochrome > 0:
content.write("<a href=\"/portfolios\">\n<div class=\"foliocase\">\n")
if latestpalette > 0:
content.write(portfoliogen(portfolios[latestpalette-1],"palette",palettes))
if latestmonochrome > 0:
content.write(portfoliogen(portfolios[latestmonochrome-1],"monochrome",monochromes))
content.write("</div>\n</a>\n")
decksofinterest = []
mastereddecks = []
for deck in decklist:
if deck["mastered"]:
mastereddecks.append(deck)
mastereddecks = sorted(mastereddecks,key=lambda d: d["mastered"],reverse=True)
if len(mastereddecks) > 0:
content.write("<h2>mastered decks</h2>\n<p id=\"masteredcarousel\">")
masteredcount = 0
for deck in mastereddecks:
if masteredcount < variables.maxmastered:
content.write("<img src=\"/decks/" + deck["name"] + "/master.gif\" title=\"mastered " + deck["name"])
try:
if deck["name"] in variables.firstmasteries:
content.write(" (first)\" class=\"first")
except:
pass
content.write("\">")
masteredcount += 1
if len(mastereddecks) > variables.maxmastered:
content.write(" <a href=\"mastered\">see all</a>")
content.write("</p>\n")
sigs = []
for card in cardlist:
if card["name"][0:4] == "sig_":
sigs.append(card)
if len(sigs) > 0:
content.write("<h2>signatures</h2>\n<p>")
for card in sigs:
content.write(printcard(card))
content.write("</p>\n")
if len(variables.faves) > 0:
content.write("<h2>faves</h2>\n<p>")
faveslist = sorted(variables.faves)
for card in faveslist:
for thecard in cardlist:
if card == thecard["name"]:
content.write(printcard(thecard))
break
content.write("</p>\n")
if len(coupons) > 0:
content.write("<h2>coupons</h2>\n<p>")
for coupon in coupons:
for key,value in coupon.items():
content.write("<img src=\"/assets/coupons/" + key + ".png\" class=\"coupon")
if value == 0:
content.write(" expired\" title=\"expired\"")
else:
content.write("\" title=\"" + str(value) + " left\"")
content.write(" loading=\"lazy\">")
content.write("</p>\n")
donations = []
try:
for deck in variables.donations["decks"]:
donations.append(deck + "00")
except:
pass
try:
for card in variables.donations["scrapbook"]:
donations.append(card)
except:
pass
if len(donations) > 0:
donations = sorted(donations)
content.write("<h2>donations</h2>\n<p>")
for donation in donations:
if donation[-2:] == "00":
content.write("<img src=\"/decks/" + donation[:-2] + "/00.gif\" loading=\"lazy\">")
else:
for thecard in cardlist:
if donation == thecard["name"]:
content.write(printcard(thecard))
break
content.write("</p>\n")
content.close()
footerwrite(thefile)
indexgen()
print("Building levels page")
def levelsgen():
if not os.path.isdir("build/levels"):
os.mkdir("build/levels")
if os.path.exists("build/levels/index.html"):
os.remove("build/levels/index.html")
thefile = "build/levels/index.html"
headerwrite(thefile,"levels")
content = open(thefile,"a")
content.write("<h1>levels</h1>\n<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/red.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[0].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/orange.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/yellow.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/green.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/blue.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/purple.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/brown.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/gray.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/strawberry.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/tangerine.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/lemon.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/lime.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/blueberry.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/grape.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/apricot.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/dragonfruit.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/ruby.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/amber.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/gold.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/emerald.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/sapphire.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/amethyst.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/bronze.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[4200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/silver.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[4500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/sakura.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[4800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/tigerlily.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[5100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/daffodil.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[5400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/clover.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[5700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/hydrangea.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/lilac.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/chocolatecosmos.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/magnolia.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/mars.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[7200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/saturn.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[7500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/venus.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[7800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/earth.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[8100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/neptune.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[8400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/uranus.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[8700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/jupiter.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/mercury.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/fire.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/wind.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/light.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[10200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/nature.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[10500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/water.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[10800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/darkness.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[11100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/ground.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[11400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/metal.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[11700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/lion.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/tiger.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/cheetah.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/panther.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/russianblue.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[13200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/chartreux.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[13500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/puma.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[13800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/himalayan.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[14100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
try:
content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"/assets/levels/rainbow.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[14400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
except:
pass
content.close()
footerwrite(thefile)
levelsgen()
print("Building portfolios page")
def portfoliosgen(colour=False):
if not os.path.isdir("build/portfolios"):
os.mkdir("build/portfolios")
if colour:
if not os.path.isdir("build/portfolios/" + colour):
os.mkdir("build/portfolios/" + colour)
thefile = "build/portfolios/" + colour + "/index.html"
else:
thefile = "build/portfolios/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"portfolios")
content = open(thefile,"a")
content.write("<h1>portfolios</h1>\n")
if latestpalette + latestmonochrome > 0:
if latestpalette > 0:
content.write("<div class=\"foliocase\">\n")
portnumber = 1
for portfolio in portfolios:
if portfolio["type"] == "palette":
content.write(portfoliogen(portfolio,"palette",portnumber))
portnumber += 1
content.write("</div>\n")
if latestmonochrome > 0:
content.write("<div class=\"foliocase\">\n")
portnumber = 1
for portfolio in portfolios:
if portfolio["type"] == "monochrome":
content.write(portfoliogen(portfolio,"monochrome",portnumber))
portnumber += 1
content.write("</div>\n")
content.close()
footerwrite(thefile)
portfoliosgen()
print("Building collecting page")
def collectinggen(colour=False):
if not os.path.isdir("build/collecting"):
os.mkdir("build/collecting")
if colour:
if not os.path.isdir("build/collecting/" + colour):
os.mkdir("build/collecting/" + colour)
thefile = "build/collecting/" + colour + "/index.html"
else:
thefile = "build/collecting/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"collecting")
content = open(thefile,"a")
content.write("<h1>decks in progress</h1>\n" + filterwrite("collecting",colour) + "<div>\n<h2 class=\"collectingheader\">High priority</h2>\n")
for deck in decklist:
if deck["priority"] == 1 and deck["mastered"] == False:
if colour:
if deck["colour"] == colour:
content.write(printdeck(deck,False))
else:
content.write(printdeck(deck,False))
content.write("</div>\n<div>\n<h2 class=\"collectingheader\">Medium priority</h2>\n")
for deck in decklist:
if deck["priority"] == 2 and deck["mastered"] == False:
if colour:
if deck["colour"] == colour:
content.write(printdeck(deck))
else:
content.write(printdeck(deck))
content.write("</div>\n<div>\n<h2 class=\"collectingheader\">Low priority</h2>\n")
for deck in decklist:
if deck["priority"] == 3 and deck["mastered"] == False:
if colour:
if deck["colour"] == colour:
content.write(printdeck(deck))
else:
content.write(printdeck(deck))
content.write("</div>\n")
content.close()
footerwrite(thefile)
def collectingall():
collectinggen()
for thevalue in values:
collectinggen(thevalue)
collectingall()
print("Building mass collecting pages")
masslist = sorted(list(variables.masscollect.keys()))
def massindexgen():
if not os.path.isdir("build/mass"):
os.mkdir("build/mass")
thefile = "build/mass/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"mass")
content = open(thefile,"a")
content.write("<h1>mass collecting/keeping</h1>\n<ul>\n")
massindex = 1
for series in masslist:
content.write("<li><a href=\"/mass/" + str(massindex) + "\">" + series + "</a>")
content.write("</li>\n")
massindex += 1
content.write("</ul>\n")
content.close()
footerwrite(thefile)
def massseriesgen(series,massindex):
if not os.path.isdir("build/mass/" + str(massindex)):
os.mkdir("build/mass/" + str(massindex))
thefile = "build/mass/" + str(massindex) + "/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"mass")
content = open(thefile,"a")
content.write("<h1>" + series + "</h1>\n<p><a href=\"/mass\">back to mass decks page</a></p>\n<p>")
for deck in decklist:
if deck["mastered"]:
if series in deck["mass"] or series in deck["massmaster"]:
content.write("<img src=\"/decks/" + deck["name"] + "/master.gif\" title=\"mastered " + deck["name"])
try:
if deck["name"] in variables.firstmasteries:
content.write(" (first)\" class=\"first")
except:
pass
content.write("\">")
content.write("</p><p>")
for card in cardlist:
if series in card["mass"]:
if card["dupe"] == False:
content.write(printcard(card))
content.write("</p>\n")
content.close()
footerwrite(thefile)
def massall():
massindexgen()
massindex = 1
for series in masslist:
massseriesgen(series,massindex)
massindex += 1
massall()
print("Building mastered page")
def masteredgen(colour=False):
if not os.path.isdir("build/mastered"):
os.mkdir("build/mastered")
if colour:
if not os.path.isdir("build/mastered/" + colour):
os.mkdir("build/mastered/" + colour)
thefile = "build/mastered/" + colour + "/index.html"
else:
thefile = "build/mastered/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"mastered")
content = open(thefile,"a")
content.write("<h1>mastered decks</h1>\n")
content.write(filterwrite("mastered",colour))
for deck in decklist:
if deck["mastered"]:
if colour:
if deck["colour"] == colour:
content.write(printdeck(deck))
else:
content.write(printdeck(deck))
content.close()
footerwrite(thefile)
def masteredall():
masteredgen()
for thevalue in values:
masteredgen(thevalue)
masteredall()
print("Building trading page")
tradelist = []
sigtradelist = []
for card in cardlist:
if card["priority"] == 4:
tradelist.append(card)
elif card["priority"] == 5:
sigtradelist.append(card)
alltradelist = tradelist + sigtradelist
def tradegen(colour=False):
if not os.path.isdir("build/trade"):
os.mkdir("build/trade")
if colour:
if not os.path.isdir("build/trade/" + colour):
os.mkdir("build/trade/" + colour)
thefile = "build/trade/" + colour + "/index.html"
else:
thefile = "build/trade/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"trade")
content = open(thefile,"a")
content.write("<h1>available for trade</h1>\n" + filterwrite("trade",colour,True) + "<p class=\"tradeterms\">")
if len(variables.tradestatement) > 0:
content.write(variables.tradestatement + " ")
content.write("Trade cards <a href=\"" + variables.tradepost + "\">here</a></p>\n<p><textarea readonly>")
precomma = False
for card in alltradelist:
if colour:
if card["colour"] == colour:
if precomma:
content.write(", ")
content.write(card["name"])
precomma = True
else:
if precomma:
content.write(", ")
content.write(card["name"])
precomma = True
content.write("</textarea>\n<p>")
for card in alltradelist:
if colour:
if card["colour"] == colour:
content.write(printcard(card))
else:
content.write(printcard(card))
content.write("</p>\n")
content.close()
footerwrite(thefile)
def tradeall():
tradegen()
for thevalue in values:
tradegen(thevalue)
tradegen("sig")
tradeall()
print("Building wanted page")
def wantedgen():
if not os.path.isdir("build/wanted"):
os.mkdir("build/wanted")
if os.path.exists("build/wanted/index.html"):
os.remove("build/wanted/index.html")
thefile = "build/wanted/index.html"
headerwrite(thefile,"wanted")
content = open(thefile,"a")
content.write("<h1>wanted cards</h1>\n<h2>High priority</h2>\n<textarea readonly>")
precomma = False
for card in wantedlist:
if card["priority"] == 1:
if precomma:
content.write(", ")
content.write(card["name"])
precomma = True
precomma = False
content.write("</textarea>\n<p>")
for card in wantedlist:
if card["priority"] == 1:
if precomma:
content.write(", ")
content.write(cardtext(card))
precomma = True
precomma = False
content.write("</p>\n<h2>Medium priority</h2>\n<textarea readonly>")
for card in wantedlist:
if card["priority"] == 2:
if precomma:
content.write(", ")
content.write(card["name"])
precomma = True
precomma = False
content.write("</textarea>\n<p>")
for card in wantedlist:
if card["priority"] == 2:
if precomma:
content.write(", ")
content.write(cardtext(card))
precomma = True
precomma = False
content.write("</p>\n<h2>Low priority</h2>\n<textarea readonly>")
for card in wantedlist:
if card["priority"] == 3:
if precomma:
content.write(", ")
content.write(card["name"])
precomma = True
precomma = False
content.write("</textarea>\n<p>")
for card in wantedlist:
if card["priority"] == 3:
if precomma:
content.write(", ")
content.write(cardtext(card))
precomma = True
content.write("</p>\n")
content.close()
footerwrite(thefile)
wantedgen()
print("Building search page")
def searchgen():
if not os.path.isdir("build/search"):
os.mkdir("build/search")
thefile = "build/search/index.html"
if os.path.exists(thefile):
os.remove(thefile)
headerwrite(thefile,"search")
content = open(thefile,"a")
content.write("<h1>card search</h1>\n<form>\n <label for=\"cardinput\">Enter a list of cards and/or decks here:</label>\n <textarea id=\"cardinput\" name=\"cardinput\"></textarea>\n <input type=\"button\" value=\"Search\" onclick=\"searchcards()\">\n</form>\n<p id=\"hpwfound\"></p>\n<p id=\"mpwfound\"></p>\n<p id=\"lpwfound\"></p>\n<p id=\"hptfound\"></p>\n<p id=\"mptfound\"></p>\n<p id=\"lptfound\"></p>\n<p id=\"nothing\"></p>\n<script>\n function searchcards() {\n const thecards = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20'];\n const hpw = [")
precomma = False
for card in wantedlist:
if card["priority"] == 1:
if precomma:
content.write(", ")
content.write("'" + card["name"] + "'")
precomma = True
content.write("];\n const mpw = [")
precomma = False
for card in wantedlist:
if card["priority"] == 2:
if precomma:
content.write(", ")
content.write("'" + card["name"] + "'")
precomma = True
content.write("];\n const lpw = [")
precomma = False
for card in wantedlist:
if card["priority"] == 3:
if precomma:
content.write(", ")
content.write("'" + card["name"] + "'")
precomma = True
content.write("];\n const hpt = [")
precomma = False
for card in cardlist:
if card["priority"] == 2:
if precomma:
content.write(", ")
content.write("'" + card["name"] + "'")
precomma = True
content.write("];\n const mpt = [")
precomma = False
for card in cardlist:
if card["priority"] == 3:
if precomma:
content.write(", ")
content.write("'" + card["name"] + "'")
precomma = True
content.write("];\n const lpt = [")
precomma = False
for card in cardlist:
if card["priority"] == 4:
if precomma:
content.write(", ")
content.write("'" + card["name"] + "'")
precomma = True
content.write("];\n const searchstring = document.getElementById('cardinput').value;\n const searcharray = searchstring.replaceAll(' ','').replaceAll('\\n',',').replaceAll('\\r',',').toLowerCase().split(',');\n const hpwfound = [];\n const mpwfound = [];\n const lpwfound = [];\n const hptfound = [];\n const mptfound = [];\n const lptfound = [];\n for (const element of searcharray) {\n let cardend = element.substring(element.length, element.length - 2);\n if (!(thecards.includes(cardend))) {\n for (const ending of thecards) {\n searcharray.push(element + ending);\n };\n };\n };\n for (const element of searcharray) {\n if (hpw.includes(element)) {\n hpwfound.push(element);\n } else if (mpw.includes(element)) {\n mpwfound.push(element);\n } else if (lpw.includes(element)) {\n lpwfound.push(element);\n } else if (hpt.includes(element)) {\n hptfound.push(element);\n } else if (mpt.includes(element)) {\n mptfound.push(element);\n } else if (lpt.includes(element)) {\n lptfound.push(element);\n };\n };\n if ((hpwfound.length) > 0) {\n document.getElementById('hpwfound').innerHTML = '<span class=\"sorttitle\">Wanted (high priority):</span> <span class=\"searchresults\">' + hpwfound.join(', ') + '</span>';\n } else {\n document.getElementById('hpwfound').innerHTML = '';\n };\n if ((mpwfound.length) > 0) {\n document.getElementById('mpwfound').innerHTML = '<span class=\"sorttitle\">Wanted (medium priority):</span> <span class=\"searchresults\">' + mpwfound.join(', ') + '</span>';\n } else {\n document.getElementById('mpwfound').innerHTML = '';\n };\n if ((lpwfound.length) > 0) {\n document.getElementById('lpwfound').innerHTML = '<span class=\"sorttitle\">Wanted (low priority):</span> <span class=\"searchresults\">' + lpwfound.join(', ') + '</span>';\n } else {\n document.getElementById('lpwfound').innerHTML = '';\n };\n if ((hptfound.length) > 0) {\n document.getElementById('hptfound').innerHTML = '<span class=\"sorttitle\">Will trade out for <a href=\"/wanted\">high priority cards</a> only:</span> <span class=\"searchresults\">' + hptfound.join(', ') + '</span>';\n } else {\n document.getElementById('hptfound').innerHTML = '';\n };\n if ((mptfound.length) > 0) {\n document.getElementById('mptfound').innerHTML = '<span class=\"sorttitle\">Will trade out for <a href=\"/wanted\">high or medium priority cards</a>:</span> <span class=\"searchresults\">' + mptfound.join(', ') + '</span>';\n } else {\n document.getElementById('mptfound').innerHTML = '';\n };\n if ((lptfound.length) > 0) {\n document.getElementById('lptfound').innerHTML = '<span class=\"sorttitle\">Will trade out for <a href=\"/wanted\">any wanted card</a>:</span> <span class=\"searchresults\">' + lptfound.join(', ') + '</span>';\n } else {\n document.getElementById('lptfound').innerHTML = '';\n };\n if ((hpwfound.length) + (mpwfound.length) + (lpwfound.length) + (hptfound.length) + (mptfound.length) + (lptfound.length) == 0) {\n document.getElementById('nothing').innerHTML = 'No results';\n } else {\n document.getElementById('nothing').innerHTML = '';\n }\n }\n</script>\n </main>\n </body>\n</html>")
content.close()
searchgen()
print("Building log page")
def loggen(month=False):
if month:
if not os.path.isdir("build/log/month"):
os.mkdir("build/log/month")
if os.path.exists("build/log/month/index.html"):
os.remove("build/log/month/index.html")
thefile = "build/log/month/index.html"
else:
if not os.path.isdir("build/log"):
os.mkdir("build/log")
if os.path.exists("build/log/index.html"):
os.remove("build/log/index.html")
thefile = "build/log/index.html"
headerwrite(thefile,"log")
content = open(thefile,"a")
content.write("<h1>log</h1>\n<p class=\"typefilter\">")
if month:
content.write("<a href=\"/log\">Show all</a>")
else:
content.write("<a href=\"/log/month\">Show current month only</a>")
content.write("</p>\n")
for event in logitems:
if month:
if event["date"].month == datetime.datetime.now().month and event["date"].year == datetime.datetime.now().year:
admit = True
else:
admit = False
else:
admit = True
if admit == True:
content.write("<p><code>" + event["date"].strftime("%Y-%m-%d") + "</code> <a href=\"" + event["url"] + "\">[" + event["name"] + "]</a>: ")
try:
if event["received"]:
content.write("Received ")
receivedlist = sorted(event["received"], key=lambda d: d["name"])
position = 1
for card in receivedlist:
content.write(cardtext(card))
if len(receivedlist) != position:
content.write(", ")
position += 1
content.write(".")
try:
if event["lost"]:
content.write(" ")
except:
try:
if event["crayons"]:
content.write(" ")
except:
pass
except:
pass
try:
if event["lost"]:
content.write("Lost ")
lostlist = sorted(event["lost"], key=lambda d: d["name"])
position = 1
for card in lostlist:
content.write(cardtext(card))
if len(lostlist) != position:
content.write(", ")
position += 1
content.write(".")
try:
if event["crayons"]:
content.write(" ")
except:
pass
except:
pass
try:
if event["crayons"]:
content.write("Crayons: ")
try:
content.write(crayonlog("red",event))
if list(event["crayons"])[-1] != "red":
content.write(", ")
except:
pass
try:
content.write(crayonlog("orange",event))
if list(event["crayons"])[-1] != "orange":
content.write(", ")
except:
pass
try:
content.write(crayonlog("yellow",event))
if list(event["crayons"])[-1] != "yellow":
content.write(", ")
except:
pass
try:
content.write(crayonlog("green",event))
if list(event["crayons"])[-1] != "green":
content.write(", ")
except:
pass
try:
content.write(crayonlog("blue",event))
if list(event["crayons"])[-1] != "blue":
content.write(", ")
except:
pass
try:
content.write(crayonlog("purple",event))
if list(event["crayons"])[-1] != "purple":
content.write(", ")
except:
pass
try:
content.write(crayonlog("brown",event))
if list(event["crayons"])[-1] != "brown":
content.write(", ")
except:
pass
try:
content.write(crayonlog("grey",event))
except:
pass
content.write(".")
except:
pass
content.write("</p>\n")
content.close()
footerwrite(thefile)
def logall():
loggen(False)
loggen(True)
logall()