Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 1833
Image: ubuntu2004
1
from IPython.display import display, Markdown, HTML
2
import ipywidgets as widgets
3
from os import listdir, path
4
from .bank import Bank
5
import io
6
from contextlib import redirect_stdout
7
8
# grab version number from VERSION file in directory with notebook
9
with open("VERSION","r") as f:
10
VERSION = f.readline()
11
12
13
def run():
14
bank_output = widgets.Output()
15
bank_slugs = [f for f in listdir('banks') if not path.isfile(path.join('banks', f))]
16
bank_slugs.sort()
17
bank_dropdown_options = ['']+bank_slugs
18
bank_dropdown = widgets.Dropdown(options=bank_dropdown_options)
19
build_button = widgets.Button(description="Build bank files")
20
build_amount_widget = widgets.BoundedIntText(
21
value=300,
22
min=1,
23
max=1000,
24
step=1,
25
description='Count:',
26
)
27
build_public_dropdown = widgets.Dropdown(options=[("Non-public",False),("Public",True)])
28
29
def bank_dropdown_callback(c=None):
30
bank_output.clear_output()
31
if bank_dropdown.value != bank_dropdown_options[0]:
32
f = io.StringIO()
33
with redirect_stdout(f):
34
bank = Bank(bank_dropdown.value)
35
bank_errors = f.getvalue()
36
boilerplate_button = widgets.Button(description="Create missing outcome files",layout=widgets.Layout(width="auto"))
37
def write_boilerplate(c=None):
38
bank.write_outcomes_boilerplate()
39
boilerplate_button.description = boilerplate_button.description + " - Done!"
40
boilerplate_button.on_click(write_boilerplate)
41
bank_suboutput = widgets.Output()
42
def build_bank(c=None):
43
bank_suboutput.clear_output()
44
with bank_suboutput:
45
bank.generate_exercises(public=build_public_dropdown.value,amount=build_amount_widget.value,regenerate=True)
46
print("Now building all output formats...")
47
f = io.StringIO()
48
with redirect_stdout(f):
49
bank.build(public=build_public_dropdown.value,amount=build_amount_widget.value,regenerate=False)
50
display(Markdown(f.getvalue()))
51
build_button.on_click(build_bank)
52
outcomes_dropdown = widgets.Dropdown(options=[(f"{o.slug}: {o.title}",o) for o in bank.outcomes])
53
def preview_outcome(c=None):
54
bank_suboutput.clear_output()
55
with bank_suboutput:
56
display(HTML(f"<strong>Description:</strong>" +
57
f"<em>{outcomes_dropdown.value.description}</em>"))
58
display(HTML(outcomes_dropdown.value.HTML_preview()))
59
outcome_button = widgets.Button(description="Preview exercise")
60
outcome_button.on_click(preview_outcome)
61
with bank_output:
62
display(Markdown(f'### {bank.title}'))
63
display(HTML(bank_errors))
64
display(boilerplate_button)
65
display(widgets.HBox([build_button,build_public_dropdown,build_amount_widget]))
66
display(widgets.HBox([outcome_button,outcomes_dropdown]))
67
display(bank_suboutput)
68
bank_dropdown.observe(bank_dropdown_callback,names='value')
69
70
display(Markdown("### Select a bank directory"))
71
display(bank_dropdown)
72
display(bank_output)
73
display(Markdown("---"))
74
display(Markdown(f"`CheckIt Dashboard v{VERSION}`"))
75
76