diff --git a/database.py b/database.py index 0bddea3..326fd10 100644 --- a/database.py +++ b/database.py @@ -12,27 +12,51 @@ cur = conn.cursor() # exit(0) ## check if table exists, else create it -cur.execute("SELECT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'games');") -a = cur.fetchone() -if a[0] is False: - print("creating table") - cur.execute( - "CREATE TABLE games (" - "id SERIAL PRIMARY KEY," - "num_players SMALLINT NOT NULL," - "score SMALLINT NOT NULL," - "seed TEXT NOT NULL," - "variant_id SMALLINT NOT NULL," - "deck_plays BOOLEAN," - "one_extra_card BOOLEAN," - "one_less_card BOOLEAN," - "all_or_nothing BOOLEAN," - "num_turns SMALLINT" - ");") - conn.commit() -else: - print("table already exists") +def create_games_table(): + tablename = "games" + cur.execute("SELECT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = '{}');".format(tablename)) + a = cur.fetchone() + + if a[0] is False: + print("Creating table '{}'".format(tablename)) + cur.execute( + "CREATE TABLE {} (" + "id INT PRIMARY KEY," + "num_players SMALLINT NOT NULL," + "score SMALLINT NOT NULL," + "seed TEXT NOT NULL," + "variant_id SMALLINT NOT NULL," + "deck_plays BOOLEAN," + "one_extra_card BOOLEAN," + "one_less_card BOOLEAN," + "all_or_nothing BOOLEAN," + "num_turns SMALLINT" + ");".format(tablename)) + conn.commit() +# else: + # print("table already exists") + +def create_seeds_table(): + tablename = 'seeds' + cur.execute("SELECT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = '{}');".format(tablename)) + a = cur.fetchone() + + if a[0] is False: + print("Creating table '{}'".format(tablename)) + cur.execute( + "CREATE TABLE {} (" + "seed TEXT NOT NULL PRIMARY KEY," + "num_players SMALLINT NOT NULL," + "variant_id SMALLINT NOT NULL," + "feasible BOOLEAN," # theoretical solvability + "max_score_theoretical SMALLINT" # if infeasible, max score + ");".format(tablename)) + conn.commit() + +create_games_table() +create_seeds_table() + class Game(): diff --git a/download_data.py b/download_data.py index 4b6f5cd..1f45bc7 100644 --- a/download_data.py +++ b/download_data.py @@ -2,14 +2,17 @@ import json from site_api import get, api, replay from database import Game, store, load, commit -def download_games(variant_id): +with open('variants.json') as f: + variants = json.loads(f.read()) + +def download_games(variant_id, name=None): url = "variants/{}".format(variant_id) r = api(url) if not r: print("Not a valid variant: {}".format(variant_id)) return num_entries = r['total_rows'] - print("Downloading {} entries for variant {}".format(num_entries, variant_id)) + print("Downloading {} entries for variant {} ({})".format(num_entries, variant_id, name)) num_pages = (num_entries + 99) // 100 for page in range(0, num_pages): print("Downloading page {} of {}".format(page + 1, num_pages), end = '\r') @@ -21,9 +24,10 @@ def download_games(variant_id): g.variant_id = variant_id store(g) print() - print('Downloaded and stored {} entries for variant {}'.format(num_entries, variant_id)) + print('Downloaded and stored {} entries for variant {} ({})'.format(num_entries, variant_id, name)) commit() if __name__ == "__main__": - download_games(1) + for var in variants: + download_games(var['id'], var['name'])