Skip to content

Instantly share code, notes, and snippets.

@wakita
Created October 12, 2021 04:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wakita/4d9a467a6fad13507f4f9b4e0bc22497 to your computer and use it in GitHub Desktop.
Save wakita/4d9a467a6fad13507f4f9b4e0bc22497 to your computer and use it in GitHub Desktop.
#!/Users/wakita/.venvs/vis/bin/python
# Requirements: pandoc and imported Python modules
import json
import os
from pathlib import Path
import gspread
import pandas as pd
ROOT = Path('/Users/wakita/Dropbox/doc/classes/q3-prg1')
QUIZ_DIR = ROOT.joinpath('quiz')
QUIZ = {
'quiz1': '1zgW28QASRWjXcTdVAcgeBKH4DahB92glp13EG9x4Y_U'
}
QUIZ_JSON = ROOT.joinpath(QUIZ_DIR, 'quiz.json')
GC = gspread.service_account()
def download():
book = {}
for key, url in QUIZ.items():
df = pd.DataFrame(GC.open_by_key(url).get_worksheet(0).get_all_records()).sort_values('学籍番号')
book[key] = json.loads(df.to_json(orient='records', force_ascii=False))
with open(QUIZ_JSON, 'w') as quiz_json:
json.dump(book, quiz_json, ensure_ascii=False, indent=2)
KEYS = None
def report(quiz_id, code_keys):
global KEYS
with open(QUIZ_JSON) as j:
df = pd.DataFrame.from_records(json.load(j)[quiz_id], index='学籍番号')
KEYS = df.keys()
MD = '/tmp/quiz.md'
with open(MD, 'w') as md:
md.write(f'''---
title: "{quiz_id}"
---
''')
md.write(f"{df.shape[0]} Answers \n\n")
for id, ans in df.iterrows():
md.write(f"# {id} {ans['氏名']} ({ans['Timestamp']})\n\n")
for k in KEYS:
if k in set(['氏名', 'Timestamp', '提出前の確認']): continue
if k in code_keys:
md.write(f"- **{k}:**\n\n")
md.write(" ~~~ {.scala}\n")
for line in ans[k].split('\n'):
md.write(f" {line}\n")
md.write(" ~~~\n")
continue
content = ans[k].split('\n')
if len(content) > 1:
md.write(f"- **{k}**\n\n")
for line in content:
md.write(f" {line}\n")
else: md.write(f"- **{k}:** {ans[k]}\n")
md.write('\n')
HTML = QUIZ_DIR.joinpath(f'{quiz_id}.html')
STYLE = QUIZ_DIR.joinpath('style.html')
os.system(f'pandoc --standalone --toc --include-in-header={STYLE} -f markdown -t html5 -o {HTML} {MD}')
def scratch():
download()
report('quiz1', ['def main(...)', 'extends App', '逆点滅'])
if __name__ == '__main__':
scratch()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment