The system configuration and state are stored in several different types of JSON data files. demonstration purposes we assume the system has a user “smithj” and assignment “hw1”. The examples below are relative to a top level course path /var/local/submitty/courses/f16/csci1100/, for assignment hw1 and student smithj. Listed are first the JSON files and then examples of these JSON files.

Each line is preceded by a comment in the structure of // [type|default] comment

config/form/form_<gradeable_id>.json: The last set of data exported from the “Gradeable” form when a gradeable is created/updated. These files may be imported in bulk from the “Import From JSON” option. [{config}/form/form_<gradeble_id>.json]

config/build/build_<gradeable_id>.json: Details on specific automated tests for this assignment

user_assignment_settings.json: Data for which version the user wants to submit as the final assignment as well as history of version changes [{submission}/hw1/smithj/user_assignment_settings.json]

submission.json: All data about a specific user submission [{results}/hw1/smithj/1/submission.json]

.grade.timestamp: Timestamp data about a specific user submission [{results}/hw1/smithj/1/submission.json

*_assignment_config.json

The * would be equivalent to the assignment_id field in class.json as well as the id field in this json file. This file is generated when you build an assignment from it’s config.json file.

{
    // [String] assignment id, should match the first part of the filename as well as field in class.json
    "id": "hw01",
    // [String|""] message to show to the user above any of their submission results
    "assignment_message": "Be sure to upload the assignment to the right bucket to get full credit",
    // [int|20] max number of submissions allowed by the server for an assignment before user
    // would lose credit for each additional submission attempt
    "max_submissions": 20,
    // [Numeric] max size of the submission of all files added together. for zips, we open the zip
    //and add up the size of all contained files
    "max_submission_size": 100000,
    "auto_pts": 8,
    "points_visible": 8,
    "ta_pts": 42,
    "total_pts": 50,
    "num_testcases": 3,
    // [Integer|1] Number of parts for submission, each part gets its own submission bucket
    "num_parts": 3,
    // [Array(String)|[]] Names for each part. If not set, defaults to "Part #" where # is the part number
    "part_names": [
        // [String] name for a given part to be shown in the upload zone for that part
        "Part 1",
        "Part 2",
        "Part 3"
    ],
    // [Array(Objects)|[]] array of test cases that represent how the assignment will be auto-graded
    "testcases": [
        {
            // [String|""] Name of the test case to be displayed to the user
            "title": "Test 1 README",
            // [String|""] Additional details about the test such as command used to run the test case
            "details": "",
            // [Numeric|0] How many points is this test case worth
            "points": 2,
            // [Boolean|false] Is the results (including score) hidden from the user
            "hidden": false,
            // [Boolean|false] Do the hidden details turn visible when grades are released
            "release_hidden_details": false,
            // [Boolean|false] Is this test case worth extra credit or regular credit
            "extracredit": false,
            // [Boolean|true] Doesn't do anything?
            "visible": true,
            // [Boolean|true] Doesn't do anything?
            "points_visible": true
        }
    ]
}

user_assignment_settings.json

{
    // [Integer] What's the active version of the assignment, a 0 signifies that it's been cancelled
    "active_version": 1,
    // [Array(Objects)|[]] history of the active version changes that a user has done. This is ordered earliest to latest.
    "history": [
        {
            // [Integer] Version that user had changed to
            "version": 1,
            // [String] Timestamp of when user changed to this particular version
            "time": "2016-07-24 12:05:35"
        }
    ]
}

Proposed changes:

submission.json

{
    "submission_number": 1,
    "points_awarded": 0,
    "nonhidden_points_awarded": 0,
    "extra_credit_points_awarded": 0,
    "non_extra_credit_points_awarded": 0,
    "submission_time": "2012-07-08 11:59:0.0",
    "testcases": [
        {
            "test_name" : "Readme",
            "points_awarded": 2,
            "message": "You have a README!"
        },
        {
            "test_name": "Compilation",
            "points_awarded": 3,
            "message" : "You were able to compile!"
        },
        {
            "test_name": "Case1",
            "points_awarded": 5,
            "diff":{
                "instructor_file":"path/from/CSCI1200",
                "student_file":"path/from/submission.json",
                "difference":"path/from/submission.json"
            }
        }
    ]
}

form.[gradeable_id].json

{
    "gradeable_id": "cpp_custom",
    "gradeable_title": "CPP Custom",
    "gradeable_type": "Electronic File",
    "date_submit": "07/30/2016 00:00:01",
    "instructions_url": "https://github.com/Submitty/Submitty/tree/master/more_autograding_examples/cpp_custom/sample_submissmions",
    "date_due": "08/07/2016 23:59:59",
    "eg_late_days": 2,
    "upload_type": "Upload File",
    "config_path": "/usr/local/submitty/more_autograding_examples/cpp_custom/config/",
    "point_precision": 0.5,
    "ta_grading": true,
    "comment_title": [
        "Uses non-trivial recursion"
    ],
    "ta_comment": [
        "Subtract 2 pts for static variables. No credit if no recursion was used."
    ],
    "student_comment": [
        "Made use of recursion without static variables"
    ],
    "points": [
        5
    ],
    "minimum_grading_group": 1,
    "ta_instructions": "",
    "section_type": "reg_section",
    "date_grade": "08/11/2016 23:59:59",
    "date_released": "08/08/2016 23:59:59",
    "gradeable_buckets": "homework"
}

.grade.timestamp

{
  // [String] Timestamp for when the assignment is due
  "assignment_deadline"            : "Fri Jul 22 23:59:59 EDT 2016",
  // [String] Timestamp for when this version was submitted
  "submission_time"                : "Sun Jul 24 12:11:49 EDT 2016",
  // [Integer] Days the version is late (difference between deadline and submission time, rounded up to next day)
  "days_late_(before_extensions)"  : "2",
  // [String] timestamp on when the version entered the grading queue
  "queue_time"                     : "Sun Jul 24 12:11:49 EDT 2016",
  // [String] timestamp on when the version left the grading queue and started being graded
  "grading_began"                  : "Sun Jul 24 12:11:50 EDT 2016",
  // [String] number of seconds that the assignment was in the queue
  "wait_time"                      : "1 seconds",
  // [String] timestamp when grading for the version was finished
  "grading_finished"               : "Sun Jul 24 12:11:50 EDT 2016",
  // [String] number of seconds that the assignment took to be graded
  "grade_time"                     : "0 seconds"
}