got senses into YAML -> Sql in gendb.py
parent
c4d610bc2c
commit
2271c58a2d
|
@ -36,6 +36,11 @@ def main():
|
||||||
do_sources(data, conn)
|
do_sources(data, conn)
|
||||||
do_source_entry_table(conn)
|
do_source_entry_table(conn)
|
||||||
|
|
||||||
|
# move on to senses
|
||||||
|
with open('senses.yaml') as yl:
|
||||||
|
data = yaml.full_load(yl)
|
||||||
|
do_senses(data, conn)
|
||||||
|
|
||||||
# move on to skills
|
# move on to skills
|
||||||
with open('skills.yaml') as yl:
|
with open('skills.yaml') as yl:
|
||||||
data = yaml.full_load(yl)
|
data = yaml.full_load(yl)
|
||||||
|
@ -866,6 +871,115 @@ CREATE TABLE sourceentry_damagecategory (
|
||||||
"""
|
"""
|
||||||
c.execute(table)
|
c.execute(table)
|
||||||
|
|
||||||
|
def do_senses(data, conn):
|
||||||
|
|
||||||
|
table = """
|
||||||
|
CREATE TABLE senses (
|
||||||
|
senses_id INTEGER PRIMARY KEY,
|
||||||
|
name TEXT NOT NULL UNIQUE,
|
||||||
|
descr TEXT
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute(table)
|
||||||
|
|
||||||
|
# make sourceentry many-to-many table
|
||||||
|
table = """
|
||||||
|
CREATE TABLE sourceentry_senses (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
sourceentry_id INTEGER NOT NULL,
|
||||||
|
senses_id INTEGER NOT NULL,
|
||||||
|
UNIQUE (sourceentry_id, senses_id), -- prevent duplicates
|
||||||
|
FOREIGN KEY (sourceentry_id) REFERENCES sourceentry(sourceentry_id),
|
||||||
|
FOREIGN KEY (senses_id) REFERENCES senses(senses_id)
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute(table)
|
||||||
|
|
||||||
|
# insert basics into senses table
|
||||||
|
inp_data = []
|
||||||
|
for i in data['senses']:
|
||||||
|
print(i)
|
||||||
|
inp_data.append((i['name'], i['descr']))
|
||||||
|
|
||||||
|
stmt = "INSERT INTO senses(name, descr) VALUES (?,?)"
|
||||||
|
try:
|
||||||
|
conn.executemany(stmt, inp_data)
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
print("Error creating senses: {}".format(e))
|
||||||
|
except:
|
||||||
|
print("Error creating senses something other than sqlite3 error")
|
||||||
|
else:
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# go through and do source entry linking
|
||||||
|
|
||||||
|
for i in data['senses']:
|
||||||
|
# print("\n\nDoing the skill: {}".format(i['name']))
|
||||||
|
srcs = []
|
||||||
|
# TODO refactor this inner loop for sources out
|
||||||
|
for j in i['source']:
|
||||||
|
abbr = j['abbr']
|
||||||
|
page_start = j['page_start']
|
||||||
|
if 'page_stop' in j:
|
||||||
|
page_stop = j['page_stop']
|
||||||
|
else:
|
||||||
|
page_stop = page_start
|
||||||
|
srcs.append([i['name'], abbr, page_start, page_stop])
|
||||||
|
# print("srcs: {}".format(srcs))
|
||||||
|
do_sourceentry_to_senses(srcs, conn)
|
||||||
|
|
||||||
|
# TODO ugggh;;; this is soooo ugly and needs refactoring but it's working
|
||||||
|
def do_sourceentry_to_senses(srcs, conn):
|
||||||
|
c = conn.cursor()
|
||||||
|
|
||||||
|
stmt = "SELECT source.source_id, senses.senses_id FROM source, senses WHERE source.abbr=? AND senses.name=?"
|
||||||
|
istmt = "INSERT INTO sourceentry (source_id, page_start, page_stop) VALUES (?,?,?)"
|
||||||
|
for i in srcs:
|
||||||
|
# print("i in srcs: {}".format(i))
|
||||||
|
inp_data = (i[1], i[0])
|
||||||
|
# print("inp data: {}".format(inp_data))
|
||||||
|
for row in c.execute(stmt, inp_data):
|
||||||
|
# print("source_id:{} skill_id:{}".format(row[0], row[1]))
|
||||||
|
iinp_data = (row[0], i[2], i[3])
|
||||||
|
# print("iinp data: {}".format(iinp_data))
|
||||||
|
|
||||||
|
try:
|
||||||
|
c.execute(istmt, iinp_data)
|
||||||
|
except sqlite3.IntegrityError as e:
|
||||||
|
if "UNIQUE" in str(e):
|
||||||
|
# we fully expect UNIQUE constraint to fail on some of these so it's fine
|
||||||
|
conn.commit()
|
||||||
|
# print("committed istmt")
|
||||||
|
else:
|
||||||
|
# but we still want to know what's going on if there's some other error
|
||||||
|
print("Something went wrong with istmt: {}".format(e))
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
print("Error inserting a sourceentry for senses: {}".format(e))
|
||||||
|
else:
|
||||||
|
conn.commit()
|
||||||
|
# print("committed istmt")
|
||||||
|
|
||||||
|
linkstmt = "INSERT INTO sourceentry_senses (sourceentry_id, senses_id) VALUES ((SELECT sourceentry_id from sourceentry WHERE source_id=? AND page_start=? AND page_stop=?), ?)"
|
||||||
|
linkinp_data = (row[0], i[2], i[3], row[1])
|
||||||
|
# print(linkinp_data)
|
||||||
|
try:
|
||||||
|
c.execute(linkstmt, linkinp_data)
|
||||||
|
except sqlite3.IntegrityError as e:
|
||||||
|
if "UNIQUE" in str(e):
|
||||||
|
# we fully expect UNIQUE constraint to fail on some of these so it's fine
|
||||||
|
conn.commit()
|
||||||
|
# print("committed linkstmt")
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# but we still want to know what's going on if there's some other error
|
||||||
|
print(e)
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
print("Error inserting a sourceentry for senses: {}".format(e))
|
||||||
|
else:
|
||||||
|
# print("committed linkstmt")
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
def do_skills(data, conn):
|
def do_skills(data, conn):
|
||||||
# make skill table
|
# make skill table
|
||||||
|
|
Loading…
Reference in New Issue