-
Notifications
You must be signed in to change notification settings - Fork 3
Python Camp Admin Guide (GW LAI)
Dolsy Smith edited this page Dec 12, 2024
·
13 revisions
This guide provides documentation for managing a regular instance of Python Camp. For documentation on the Python Camp textbook and course materials, see the README.
- Templates for email communications, application and evaluation forms, and a participant roster can be found in the Python Camp shared Google Drive.
- Google App scripts automate creation of documents specific to each Camp.
- We are currently using the GW Coders Slack workspace for asynchronous communication with participants.
- GitHub Classroom supports autograded homework exercises.
- We use GW LAI's hosted instance of JupyterHub for the Python Camp computing environment.
The following instructions should be done in order (so as to take advantage of the automated Google App scripts).
- In the GW Coders workspace, create a new Slack channel specific to this Python Camp (e.g.,
python-camp-spring-2024
).
- Create a new GitHub classroom, using the
GW-Python-Camp
organization.- The roster can be created later.
- Create a new assignment associated with this classroom. The following are the current details:
- Assignment title:
Python Camp Homework (Final)
- Visibility: Private
- Grant students admin access: Yes
- Template repository:
gwu-libraries/python-camp-hw-final-gr
- Assignment title:
- Add an autograding test to the assignment:
- Method:
run command
- Test name:
hw-final-gr-test
- Run command:
homework_nb=HW_Final_GR.ipynb python3 course_utils/autograder.py
- Method:
- Create the assignment.
- Open the spreadsheet Python Camp Variables from the Python Camp shared Drive.
- On the Details tab, create a new row at the bottom and enter the information for the upcoming camp.
- Dates should be entered in the following format: e.g.,
1/7/2024
. - Text will appear as entered here on the auto-generated Python Camp documents.
- Dates should be entered in the following format: e.g.,
- On the Links tab, update the following cells, using the URL's for the Slack channel and GitHub assignment created above:
- GitHub Assignment
- Slack Channel
- Open the
Templates
folder and update any template text as needed. Document placeholders (e.g.,{{camp-name}}
) will be replaced with text from thePython Camp Variables
sheet when the new documents are created from the templates. - Open the App Script file,
Python Camp Drive Setup
.- From the menu on the left, select the first script,
python_camp_drive_setup.gs
. - From the menu at the top, beside the
Run
andDebug
buttons, select themain
function from the dropdown menu. Ifmain
is not selected, the script will not run properly. - Click the
Run
button to execute the script. Triggering this script will do several things:- Create a new folder in the shared Python Camp drive with the name of the current Python Camp cohort.
- Create copies of all the template documents and forms, updating placeholder text with values from the Variables spreadsheet.
- Populate the
Links
tab on the Variables spreadsheet with links to forms and folders that will be shared with participants. (These links are also inserted into thePython Camp Links
document created in the new cohort folder.
- If the Apps Script console prompts you to grant the script permissions, please accept the prompt.
- From the menu on the left, select the first script,
- Within the cohort folder, open the
Python Camp Application Form
and theForm Text
document. Paste the text under the headingApplication Form
into the description field at the top of the application form. - Click the
Send
button on the form and create and copy the shortened URL.
- Update the following values in the
python-camp/_config.yml
file:
-
application_url
(using the URL from step 12 above) -
application_deadline
andcurrent_semester
(using text values) - Days and times of the Camp under
schedule
.
- Update the link to the Python Camp links document (from the cohort folder on Google Drive) in the
homework.md
file inpython-camp/textbook
. - Update the links in
notebooks/lessons/1_2_from_data_to_code.ipynb
to the GW Schedule of Classes. Even if the dataset is from a prior semester, the link should go to the current semester's schedule, as only there are theFind Textbooks
links still live.
- Open applications on the designated date: the
Python Camp Application Form
in the current cohort folder, select theResponses
tab, and enableAccepting responses
. - Link to the
Python Camp Applications
spreadsheet (in the main folder of the Python Camp shared drive) by clicking the option toLink to Sheets
. This action will create a new tab in the existing spreadsheet. - Open the
Python Camp Applications
spreadsheet and rename the new tab, which will by default have a name starting withForm Responses
, to the name of the current cohort, as it appears in thePython Camp Variables
spreadsheet. - Send notifications to the contacts on the
Python Camp Mailing List
spreadsheet in the shared drive.- Updated templates for the emails can be found in the current cohort folder, in the document
Application Notice [Cohort Name]
. - The mailing list is divided into two groups: faculty/staff/University contacts, and previous/interested applicants.
- Each list has a corresponding email template on
Application Notice
document. - Before sending a message to the addresses on the
Interested/Previous Applicants
tab of theMailing List
spreadsheet, try to remove anyone who has subsequently enrolled in Python Camp. (We do not encourage repeat participation, so people who have already taken Python Camp should receive this notification.)
- Updated templates for the emails can be found in the current cohort folder, in the document
- When the application deadline arrives, open the application form and disable responses from the
Responses
tab. Change the message text to something appropriate, e.g., "Applications for Python Camp [cohort name] have closed. Please visit the GW Libraries Events page to check for other opportunities to learn Python: https://library.gwu.edu/events." - Once applicants have been selected, send an email with the link to the
Python Camp Invitation
form, which asks them to confirm their intention to attend. The text for this email can be found in the Cohort folder, in theNotification
document. This document also has text for sending to applicants who were not accepted, should there be any. Text to insert at the top of the invitation form can be found in theForm Text
document. - Once the confirmation deadline has arrived, turn off the
Python Camp Invitation
form, and create a Google sheet with its responses, which should be namedPython Camp [Cohort Name] (Responses)
and should reside in the current cohort folder. - From the
Python Camp Drive Setup
scripts, run theroster_main
function underpython_camp_roster_setup
.- The script checks for matches on all provided email addresses between the original application responses for this cohort (on the
Python Camp Applications
spreadsheet) and the responses on the confirmation sheet (created in step 7 above). If the script flags applicants who could not be matched on email address, you can re-run the script after manually finding and correcting the mismatched emails. - The script will populate the
Python Camp [Cohort Name] Roster
sheet in the current cohort folder, distributing participants into groups to ensure a mix of experience (based on the responses to the multiple-choice question on the application form).
- The script checks for matches on all provided email addresses between the original application responses for this cohort (on the
- From the
Invitation Responses
sheet, collect GW user ID's for ITL to create JupyterHub accounts. This is currently a manual process, though the following formula, inserted into a blank column on the responses sheet, can help:=IFERROR(REGEXEXTRACT(C2, "^([a-z0-9_]+)@gw.+\.edu"), E2)
(assuming that the GW email address is in column C, and the optional User ID is in column E). For registrants who did not supply a valid GW user ID, it will be necessary to contact them directly. ITL needs the User ID to create the Jupyter Hub account for each Camp participant. Send these ID's to ITL with a request to create JupyterHub accounts.
- About a week prior to the start of Camp, send an email to all confirmed participants using the text in the
Initial Email
section of theInstructions for Participants
document in the current cohort folder. - Open the
Python Camp Roster
sheet in the cohort folder and share it with confirmed participants, granting them editing rights. - Share the
Team Folder
subfolder within the cohort folder, granting confirmed participantsContributor
rights. - Open the Slack channel from the link in the
Python Camp Variables
sheet,Links
tab (in the root of the Python Camp drive), and invite all confirmed participants to the channel. - Open the GitHub Classroom for this cohort and update the classroom roster with the email addresses for the participants in this cohort.
- Create the certificates using the Adobe InDesign template in the Python Camp shared drive,
Python Camp completion certificate.indd
.- Download the data from the current roster (in the cohort folder) as a CSV file.
- Delete the first row from the CSV file, so that the headers appear in the first row, including the
Name
column. - Using InDesign's data merge feature, load the CSV file and select the
Name
column as the data source. - Update the InDesign template to reflect the date of completion of the current Camp.
- Create the merged documents and export to PDF, using the option to create separate PDF files. Each file should be named
Python Camp completion certificate_N.pdf
, whereN
is a sequential two-digit number,starting with01
. It is important that the order of the PDF files correspond to the order of names on the roster. The script will use the order represented by the document names to match PDF's to participants. - Upload the PDF files to a folder within the current cohort folder; name this subfolder
certificates
.
- Download the list of submitted assignments ("grades") for the final homework on GitHub Classroom. Import this CSV into the roster spreadsheet, importing the data as a new sheet. Name this sheet
certificates
. - The script will use the
roster_identifier
column on thecertificates
sheet to identify participants who should receive a certificate. The emails in this column should match the emails in theEmails
column onSheet1
of the roster. If a participant who should receive a certificate is not listed on thecertificates
sheet, simply add the email address to the bottom of theroster_identifier
column. But please make sure that the email address matches exactly the email address used on the roster, or else the certificate will not be sent. - Run the
mailer_main
function in thepython_camp_certificates.gs
script in thePython Camp Drive Setup
script file. The script creates draft email messages in the script user's email account, one per certificate, and the PDF is renamed and attached to the email draft. The script does not send the emails automatically, in order to provide for quality control (i.e., an opportunity to ensure that each participant receives the correct certificate). - Certificate files that are matched to participants on the
certificates
tab of the roster are moved to asent
folder within thecertificates
folder. Thus, running the script multiple times will not result in participants receiving duplicate emails. - In your GW Gmail account, find the messages in the
Drafts
folder and send them. It is a good idea to spot check the attachments to make sure that the certificates are attached to the correct emails.