Created
October 12, 2021 04:32
-
-
Save wakita/4d9a467a6fad13507f4f9b4e0bc22497 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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