Skip to content

Commit

Permalink
add nbgrader
Browse files Browse the repository at this point in the history
  • Loading branch information
derekyoungmath committed Nov 21, 2022
1 parent 057c621 commit 37a4516
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 0 deletions.
35 changes: 35 additions & 0 deletions nbgrader_jupyterhub_startup/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
A script to setup nbgrader with Jupyterhub using the one class one grader demo. See

`https://github.com/jupyter/nbgrader/tree/main/demos`

# Installation

`git clone https://github.com/derekyoungmath/nbgrader_jupyterhub_startup.git`
`cd nbgrader_jupyterhub_startup`

# Example

## Initializing course

Here the instructor is `jupyter-dyoung` and the course is `math232`.

`sudo ./startup.sh jupyter-dyoung math232`

Press `ok` for the 'Pending kernel upgrade' warning.
Press `ok` to restart 'Daemons using outdated libraries'.

## Adding students to course

The following line adds students that have jupyter-hub accounts by using the
default `Roster.xls` file provided by `my.mtholyoke.edu`.

`sudo ./add_students.sh jupyter-dyoung math232 Roster.xls`

### Manually adding students

In addition to the student must being added to the course from the jupyter-hub
notebook, the following lines must be run to enable the student's notebook
functionality.

`sudo -u jupyter-student_id /opt/tljh/user/bin/jupyter nbextension enable --user assignment_list/main --section=tree`
`sudo -u jupyter-student_id /opt/tljh/user/bin/jupyter serverextension enable --user nbgrader.server_extensions.assignment_list`
20 changes: 20 additions & 0 deletions nbgrader_jupyterhub_startup/add_students.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash

teacher=$1
course=$2
xls_file=$3

nbgrader='/opt/tljh/user/bin/nbgrader'
jupyter='/opt/tljh/user/bin/jupyter'

student_csv="/home/$teacher/$course/students.csv"
echo "id,last_name,first_name,email" > $students_csv
sed -r '/@mtholyoke.edu/!d; s/([^\t]*)\t([^\t]*)\t([^\t]*).*/\1,\2,\3/; s/ ([^(])/\1/g' $xls_file >> $students_csv
$nbgrader db student import $students_csv

while read i; do
sudo -u jupyter-$i $jupyter nbextension enable --user assignment_list/main --section=tree
sudo -u jupyter-$i $jupyter serverextension enable --user nbgrader.server_extensions.assignment_list
# sudo -u jupyter-$i $jupyter labextension disable --level=user nbgrader/assignment-list
# sudo -u jupyter-$i $jupyter labextension enable --level=user nbgrader/assignment-list
done < <(sed -r '/@mtholyoke.edu/!d; s/.*[\t ]([^ ]*)@mtholyoke.edu.*/\1/g' $xls_file)
26 changes: 26 additions & 0 deletions nbgrader_jupyterhub_startup/formgrader_workspace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"data": {
"layout-restorer:data": {
"main": {
"dock": {
"type": "tab-area",
"currentIndex": 0,
"widgets": [
"nbgrader-formgrader:nbgrader-formgrader"
]
},
"current": "nbgrader-formgrader:nbgrader-formgrader"
},
"down": {
"size": 0,
"widgets": []
}
},
"nbgrader-formgrader:nbgrader-formgrader": {
"data": {}
}
},
"metadata": {
"id": "formgrader"
}
}
57 changes: 57 additions & 0 deletions nbgrader_jupyterhub_startup/startup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env bash

teacher=$1
course=$2

echo "Installing dependencies..."
apt install -y npm
npm install -g configurable-http-proxy

echo "Creating directory '/srv/nbgrader' with permissions 'ugo+r'"
mkdir -p /srv/nbgrader
chmod ugo+r /srv/nbgrader

pip install nbgrader
nbgrader='/opt/tljh/user/bin/nbgrader'
jupyter='/opt/tljh/user/bin/jupyter'

rm -rf /opt/tljh/user/etc/jupyter

$jupyter nbextension install --symlink --sys-prefix --py nbgrader --overwrite
$jupyter nbextension disable --sys-prefix --py nbgrader
$jupyter serverextension disable --sys-prefix --py nbgrader

$jupyter nbextension enable --sys-prefix validate_assignment/main --section=notebook
$jupyter serverextension enable --sys-prefix nbgrader.server_extensions.validate_assignment

echo "Creating dir '/usr/local/share/nbgrader/exchange' with permissions 'ugo+rwx'"
mkdir -p /usr/local/share/nbgrader/exchange
chmod ugo+rwx /usr/local/share/nbgrader/exchange

rm -f /etc/jupyter/nbgrader_config.py
echo "Setting up JupyterHub to run in '/srv/nbgrader/jupyterhub'"
mkdir -p /srv/nbgrader/jupyterhub
rm -f /srv/nbgrader/jupyterhub/jupyterhub.sqlite
rm -f /srv/nbgrader/jupyterhub/jupyterhub.cookie_secret
echo "c=get_config()" > /srv/nbgrader/jupyterhub/jupyterhub_config.py
echo "c.Authenticator.allowed_users = ['$teacher',]" >> /srv/nbgrader/jupyterhub/jupyterhub_config.py

echo "Setting up nbgrader for user $teacher"
mkdir /home/$teacher/.jupyter
echo "c = get_config()'" > /home/$teacher/.jupyter/nbgrader_config.py
echo "c.CourseDirectory.root = '/home/jupyter-$teacher/$course' >> /home/$teacher/.jupyter/nbgrader_config.py"
echo "c.CourseDirectory.course_id = '$course' >> /home/$teacher/.jupyter/nbgrader_config.py"
chown $teacher:$teacher /home/$teacher/.jupyter/nbgrader_config.py

cd /home/$teacher
runas="sudo -u $teacher"

$runas $nbgrader quickstart $course

$runas $jupyter nbextension enable --user create_assignment/main

$runas $jupyter nbextension enable --user formgrader/main --section=tree
$runas $jupyter serverextension enable --user nbgrader.server_extensions.formgrader

$runas $jupyter nbextension enable --user assignment_list/main --section=tree
$runas $jupyter serverextension enable --user nbgrader.server_extensions.assignment_list

0 comments on commit 37a4516

Please sign in to comment.