from sqlalchemy import create_engine, Table, MetaData, select
import datetime
import os, re
def insertAnswer(sid, divid, ts, course, correct, passed, failed):
print("inserting ", sid, divid, course, ts, passed, failed)
s = unit_answers.insert().values(
timestamp=ts,
div_id=divid,
sid=sid,
course_name=course,
correct=correct,
passed=passed,
failed=failed,
)
engine.execute(s)
engine = create_engine(os.environ["DEV_DBURL"])
meta = MetaData()
useinfo = Table("useinfo", meta, autoload=True, autoload_with=engine)
unit_answers = Table("unittest_answers", meta, autoload=True, autoload_with=engine)
s = select([useinfo]).where(useinfo.c.event == "unittest").order_by(useinfo.c.id)
result = engine.execute(s)
for row in result:
ignore sid’s of the form: 1423153196780@199.185.67.12 or 208.191.24.178@anon.user
if re.match(r"^\d+@[\d\.]+$", row["sid"]):
continue
try:
statslist = row["act"].split(":")
pct = float(statslist[1])
passed = int(statslist[3])
failed = int(statslist[5])
if pct >= 99.99999:
correct = "T"
else:
correct = "F"
except:
print(f"bad act data {row['act']}")
continue
insertAnswer(
row["sid"],
row["div_id"],
row["timestamp"],
row["course_id"],
correct,
passed,
failed,
)