Custom terminal tools for Princeton University to manage codePost.
Project description
codePost Princeton Tools
The tools in this repository were written to provide convenient access to the codePost platform from Princeton University's Department of Computer Science. They make a set of assumptions to simplify to workflow of uploading assignments to codePost from submissions made by students to Tigerfile, the submission platform provided by the department's IT staff (including @jcrouth).
Quick Setup
-
Install the codePost Princeton Tools to your path using pip:
pip install --upgrade codePost-princeton-tools
If you do not have sufficient privileges to install the tools globally, you can install them in your home directory:
pip install --user --upgrade codePost-princeton-tools
-
Retrieve your codePost API key from codePost's settings at https://codepost.io/settings. Note that as of March 2019, you can only retrieve a codePost API key if you are an administrator for a course on codePost.
-
Create a configuration file in your home directory, either called
codepost-config.yaml
or.codepost-config.yaml
, and complete the following template for the information relevant to your course. You should at most have to add the codePost API key, and set the proper course name and period.api_key: "<API KEY HERE>" # <-- obtain your codePost API key from https://codepost.io/settings # Course specific settings course_name: COS126 course_period: S2019 # Tigerfile specific settings (do not change) tigerfile_path: /n/fs/tigerfile/Files/{course_name}_{course_period}/{assignment_name} user_pattern: "{}@princeton.edu" partners_path: "{pwd}/partners.txt" group_separator: "-" # Run-script specific settings (for COS 126, 226, etc., comment out if not using) tests_path: "{pwd}/../.output/{submission}.output.txt"
Command Line Syntax
$ push-to-codePost --help
usage: push-to-codePost [-h] [-a A] [-s S [S ...]] [--netid] [--groupname]
[--extend] [--overwrite] [--verbose]
[--without-tests] [--use-cache] [--skip-notdone]
optional arguments:
-h, --help show this help message and exit
-a A The name of the assignment to upload to (e.g. Loops)
-s S [S ...] The list of folders, one folder per submission to upload.
--netid Assume each folder name is a different NetID instead of
submission hashes, and resolve partners. [NOT RECOMMENDED]
--groupname Assume each folder name contains all NetIDs of a group, of
submission hashes.
--extend If submission already exists, add new files to it and
replace old files if the code has changed.
--overwrite If submission already exists, overwrite it.
--verbose Display informational messages.
--without-tests Allow upload assignments that do not have compiled tests.
--use-cache Allow for caching mechanism (i.e., for groups).
--skip-notdone Skip submissions that are not done.
Usage Examples
In both the following examples, we asssume there is a configuration file ~/.codepost-config.yaml
which is properly configured for the course "COS126"
and period "S2019"
. We assume that the autograding scripts can be invoked by calling ~/assignments/guitar/run-script *
.
Upload a single submission
When uploading a single submission, it is more convenient to copy from the by_netid
folder and to use the --netid
upload mode.
$ cd $(mktemp -d)
$ cp -pr /n/fs/tigerfile/Files/COS126_S2019/Guitar/by_netid/jstudent ./
$ ~/assignment/guitar/run-script *
$ push-to-codePost --netid -a 'Guitar' -s jstudent
Upload many submissions
When uploading a batch of submissions, it is better to copy submissions from the submissions
folder.
$ cd $(mktemp -d)
$ cp -pr /n/fs/tigerfile/Files/COS126_S2019/Guitar/submissions/* ./
$ ~/assignment/guitar/run-script *
$ push-to-codePost -a 'Guitar' -s *
Remarks
-
The root tree of TigerFile submissions is located on the CS department's NFS at:
/n/fs/tigerfile/Files/
. -
When creating a course, use the same naming conventions used throughout Princeton, both for the course name
"COSxxx"
and the course period"S2019"
, for Spring 2019, (in both cases with no spaces). This is important to properly resolve the path associated with your course in TigerFile's tree. -
If you have an assignment that contains a space in its name, such as
"My Assignment"
, the associated TigerFile will substitute the space" "
by an underscore"_"
; you must be sure to use quotes when specifying the assignment name in the command line call. -
The directory tree for the submissions to
"My Assignment"
in course"COS101"
taught during"S2019"
would be/n/fs/tigerfile/Files/COS101_S2019/My_Assignment/
. There are two subdirectories:submissions
contains a folder per submission;by_netid
contains a folder per student (and so some submissions are duplicated as they appear for each student). -
The autograders used in Princeton CS' intro courses typically outputs the result of processing a submission in the hidden folder
.output
, such that the result of submissionXXXXXX
would be available as.output/XXXXXX.output.txt
. This can be changed in this part of the configuration file (or commented out if not using these autograders):# Run-script specific settings (for COS 126, 226, etc., comment out if not using) tests_path: "{pwd}/../.output/{submission}.output.txt"
-
If you are not using TigerFile, or running this tool outside of the Princeton CS infrastructure, you will lose partnerships detection. One way to circumvent this, is to use the
--groupname
mode, and to include all the names of a partnerships in the directory name, separated by dashes, such aspartner1-partner2
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for codePost-princeton-tools-1.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3a456efed9c383994904ee16bb46cccc36a2abd1cef4dd84bece8b3792d2e80e |
|
MD5 | 314ca463c1487ac7b83b673cbff1f770 |
|
BLAKE2b-256 | 4b14802d8f24093d9d772786a802ad3e9a6d36ad407a3da56c15332fe0676372 |
Hashes for codePost_princeton_tools-1.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bea4481b9b075bc8d96a5fc4a4859484999f8ef51c053a443073e49a0aaeb922 |
|
MD5 | ec9aaaae3014f5da2efdb74e6f7a559f |
|
BLAKE2b-256 | 41ad726d8302467114697bfda9c8c2f732a37e70ad1fdb0b5c6bdc71beb5c2b5 |