3cb-data

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.alexwennerberg.com/3cb-data.git
Log | Files | Refs | README | LICENSE

commit b99a102515a9cd69d1ba7a39992353662d9e3cd1
parent ee22d2986de7e8e55fd56ffdf12f7f784a0667b2
Author: alex wennerberg <alex@alexwennerberg.com>
Date:   Sat, 10 Feb 2024 15:46:03 -0500

new template system

Diffstat:
M.gitignore | 2+-
Abuildpage.py | 32++++++++++++++++++++++++++++++++
Mgetdata.py | 48+-----------------------------------------------
Mrequirements.txt | 1+
Atemplates/index.html | 35+++++++++++++++++++++++++++++++++++
5 files changed, 70 insertions(+), 48 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -2,5 +2,5 @@ allcards.txt *.db *.csv +*.tsv .venv - diff --git a/buildpage.py b/buildpage.py @@ -0,0 +1,32 @@ +import sqlite3,urllib +from jinja2 import Environment, PackageLoader, select_autoescape + +con = sqlite3.connect("3cb.db") +env = Environment( + loader=PackageLoader("buildpage"), + autoescape=select_autoescape() + ) + +def card_link(card): + return f"https://scryfall.com/search?q={urllib.parse.quote_plus(card)}" + +env.filters['card_link'] = card_link + +def rows_to_dict(res): + desc = res.description + column_names = [col[0] for col in desc] + return [dict(zip(column_names, row)) for row in res.fetchall()] + +def export_html(): + with open("sql/export.sql") as f: + query = f.read() + res = con.cursor().execute(query) + decks = rows_to_dict(res) + template = env.get_template("index.html") + print(template.render(decks=decks)) + +if __name__ == "__main__": + export_html() + + + diff --git a/getdata.py b/getdata.py @@ -110,7 +110,7 @@ def save_sheet(cur, sheet, n, final): cur.execute("insert into deck values (?,?,?,?,?);", (n, player, clean_card(cards[0]), clean_card(cards[1]), clean_card(cards[2]))) for o, s in enumerate(row[start:end]): cur.execute("insert into match values (?, ?, ?, ?, ?);", - (n, group, player,players[o],s)); + (n, group, player,players[o],int(s))); def save_round(n, fileid): wb = file_to_wb(fileid) @@ -185,52 +185,6 @@ def clean_card(card_name): return best_guess(clean) return clean -# TODO -def card_link(card): - return f"https://scryfall.com/search?q={urllib.parse.quote_plus(card)}" - -def export_html(): - with open("sql/export.sql") as f: - query = f.read() - res = con.cursor().execute(query) - print("""<html charset='UTF-8'><head> - <style> table { font-family: Arial, Helvetica, sans-serif; border-collapse: collapse; width: 100%; } - td, th { border: 1px solid #ddd; padding: 8px; } - tr:nth-child(even){background-color: #f2f2f2;} - tr:hover {background-color: #ddd;} - #th { - padding-top: 12px; - padding-bottom: 12px; - text-align: left; - background-color: #04AA6D; - color: white; -}</style> - </head><body><h1>3 card blind all data</h1><br> - <table> - <th><td>player</td><td>card_1</td><td>card 2</td> - <td>card 3</td><td>group</td><td>score</td><td>final</td> - </th> - """) - # html escape TODO - for row in res: - print("<tr>") - print(f"<td>{row[0]}</td><td>{row[1]}</td>") - for i in range(2,5): - card = row[i] - cardl = card_link(card) - if row[i+3]: # TODO fix - print(f"<td><a href='{cardl}'>{card}</a></td>") - else: - print(f"<td><a href='{cardl}'>{card}</a></td>") - print(f"<td>{row[8]}</td>") - print(f"<td>{row[9]}</td>") - final = row[10] or "" - print(f"<td>{final}</td>") - print("</tr>") - print("</table></body></html>") - - - if __name__ == "__main__": for table in schema: con.execute(table) diff --git a/requirements.txt b/requirements.txt @@ -2,3 +2,4 @@ requests titlecase openpyxl Levenshtein +jinja2 diff --git a/templates/index.html b/templates/index.html @@ -0,0 +1,35 @@ +<html charset='UTF-8'> +<head> +<style> +table { font-family: Arial, Helvetica, sans-serif; border-collapse: collapse; width: 100%; } +td, th { border: 1px solid #ddd; padding: 8px; } +tr:nth-child(even){background-color: #f2f2f2;} +tr:hover {background-color: #ddd;} +#th { padding-top: 12px; padding-bottom: 12px; text-align: left; background-color: #04AA6D; color: white; } +</style> +<title>3 card bagic data analysis</title> +<script src="sorttable.js"></script> +</head> +<body> + <h1>3 Card Blind Data Analysis</h1> + Full, cleaned data for <a href="//3cardmagic.org">3 card blind metashape</a>. Source code can be found <a href="//git.alexw.nyc/3cardblind">here</a>. + <p>Click on a header to sort by that value.</p> + <table class="sortable"> + <th><td>player</td><td>card_1</td><td>card 2</td> + <td>card 3</td><td>group</td><td>score</td><td>final</td> + </th> + {% for deck in decks %} + <tr> + <td>{{deck.round}}</td> + <td>{{deck.player}}</td> + <td><a href="{{deck.card1|card_link}}">{{deck.card1}}</a></td> + <td><a href="{{deck.card2|card_link}}">{{deck.card2}}</a></td> + <td><a href="{{deck.card3|card_link}}">{{deck.card3}}</a></td> + <td>{{deck.prelim_group}}</td> + <td>{{deck.prelim_score}}</td> + <td>{{deck.final_score or ""}}</td> + </tr> + {% endfor %} + </table> +</body> +</html>