A+ v1.12 Release Notes
December 2021
A+ v1.12.0
- A+ v1.12.0
- MOOC-Grader v1.12.0
- Git Manager v1.12.0
- a-plus-rst-tools v1.4.3 (updates related to the Git Manager were delayed to a-plus-rst-tools v1.5 and A+ v1.15)
Highlights
- New Git manager service, separate from the MOOC-Grader
- Sisu integration for course enrolments
- Automatic saving of submission drafts in questionnaires
- Improved teacher’s deviations user experience
Changes
- New Git manager service that has been separated from the old gitmanager app in the MOOC-Grader.
- See details below in the section New Git manager service.
- Integration to the student information system Sisu.
- Course information and participants may be retrieved from Sisu to A+.
- The Sisu integration is triggered manually.
- A+ administrators may link an A+ course to Sisu or the teacher may link it when cloning a new course instance under the “Edit course - Instances” page.
- After the Sisu link has been set up, course participants are retrieved from Sisu in the “Participants - Enrol students” page.
- If a student’s enrolment has been deactivated in Sisu, the A+ enrolment is deactivated when the Sisu participants are retrieved.
- Sisu enrolment may be used alongside other A+ enrolment methods.
- Automatic saving of submission drafts in questionnaires.
- Drafts are useful in exams so that not all written text is lost if the student’s browser closes or crashes before submitting.
- A draft is saved every ten seconds.
- If a draft exists, it is loaded in the assignment when the page is loaded.
- Disabled by default. You may enable it with new settings in a-plus-rst-tools v1.4.3.
- Teacher can not view a student’s drafts.
- Drafts are not graded.
- Added deviations to the student’s assignment user interface.
- Student can now see his/her personal deadline extensions or personal increases to submission attempts.
- Improved teacher’s deviations user experience.
- User search fields in forms, such as “add deadline deviations”, support copy-pasting of the selected users.
- Deviations save the granter and grant time.
- Date fields in forms have a date time picker widget.
- POSTPONED to v1.13.0: Existing deviations may be easily overridden in the “add new deviations” form. There is a confirmation screen before anything is overridden.
- New authentication and authorization method for securing the messages
between the A+ frontend service and exercise services, such as the MOOC-Grader:
JWT, JSON Web token
- This changes the grader protocol, however, A+ still supports the old grader protocol without JWTs as well. A+ is still compatible with old exercise services that do not support JWTs, for example, Rubyric, MOOC-Jutut and Acos server.
- A+ frontend no longer checks the IP address of the exercise service when the frontend receives grading results asynchronously. This makes the authorization tokens used in the old grader protocol a bit more vulnerable and incentivizes the removal of the old grader protocol in the future.
- Removed the old gitmanager app from the MOOC-Grader.
- MOOC-Grader receives the grading configurations and files from the new Git manager.
- Support for multiple mounting points in exercise grading containers in the MOOC-Grader.
- The
container
field in the exercise config.yaml has a new optional fieldmounts
in addition to the oldmount
field. - While
mount
mounts a directory to the path/exercise
in the container,mounts
can map to any new path in the container (but not to the reserved paths/exercise
,/submission
and/personalized_exercise
). Example config.yaml snippet:container: image: apluslms/grade-python:3.9-4.3-4.0 mount: exercises/hello_python cmd: /exercise/run.sh mounts: exercises/common/libraries: /library exercises/utilities: /util
- The
New Git manager service
- Instructions for teachers at Aalto University
- The GitLab webhook target (URL) needs to be changed in the course repositories. The new target is in the Git manager instead of the MOOC-Grader. (At Aalto, GitLab is version.aalto.fi.)
- The A+ course import and configuration URL (aplus-json) needs to be changed from the MOOC-Grader to the Git manager.
- Course is built in a Docker container.
- You may freely configure the container and install any frameworks and tools needed in the build.
- By default, Git manager uses the image
apluslms/compile-rst:1.6
that has Sphinx v1.6 installed. - If you use RST chapters and the latest version of A-plus-rst-tools,
you need to change the image to
apluslms/compile-rst:4.1
that has Sphinx v4.1 installed. - The image and build command are configured in the
apps.meta
file in the course repository. - Example
apps.meta
file:build_image=apluslms/compile-rst:4.1 build_command=legacy_build
- New environment variables for the build container:
COURSE_KEY
: key in the Git manager (directory name). For example,aplus_manual_master
orc1234_2021
.COURSE_ID
: database ID of the A+ course instance. For example,142
.STATIC_URL_PATH
: URL to the course static files (without scheme or host). For example,/static/default
or/static/aplus_manual_master
.STATIC_CONTENT_HOST
: full URL to the course static files (including scheme and host). For example,https://gitmanager.cs.aalto.fi/static/aplus_manual_master
.
- Git manager emails error messages from failed course builds.
- Git manager serves chapter HTML contents to A+ and course static files to the users. All these static files used to be hosted in the MOOC-Grader. This implies that the URLs of the static files change.
- Git manager does not serve the whole build output directory to the public Internet like the MOOC-Grader used to.
This protects the chapter HTML contents.
The course may configure which file paths are served to the Internet
with the field
unprotected_paths
in index.yaml. The paths_static
,_downloads
and_images
are public by default. - The A+ frontend service can update the course configurations automatically after a successful build. This means that teachers need not manually press the “Apply” button for “Import and override content configuration from URL” under the Edit course section. However, Git manager needs to know the course instance ID of the A+ course in order to connect to it. For now, the system administrators need to set up the IDs manually.
- Accessing the Git manager web interface requires a JWT token from A+.
Usually, the web interface is not needed.
Tokens may be generated at the URL path
/api/v2/get-token/
in the A+ frontend service. The Git manager web interface is used to change these settings:email_on_error
: Enabled by default. Build error messages are emailed to the course technical error email recipients.update_automatically
: Enabled by default. The A+ course imports settings automatically after the build.
- A+
/api/v2/get-token/
requires a JSON payload for selecting the course instance for the generated JWT token. Example JSON payload:{ "taud": "gitmanager", "exp": "01:00:00", "permissions": [ ["instance", 1, {"id": <course_instance_id>}], ["instance", 2, {"id": <course_instance_id>}] ] }
- New parameters in the Git webhook
- You don’t generally need to use these but they can be useful in some niche cases.
The following options are available for the git push hook, either in the POST or GET (query string) parameters:
skip_git
: whether to skip updating the course files from gitskip_build
: whether to skip the building stepskip_update
: whether to skip automatic updating (true
overridesupdate_automatically
)build_image
andbuild_command
can also be overridden
- For example,
https://gitmanager.cs.aalto.fi/gitmanager/<course_key>/hook?skip_build=true
skips the build step. This could be useful if, for whatever reason, the git repository already contains the built materials.
- You don’t generally need to use these but they can be useful in some niche cases.
The following options are available for the git push hook, either in the POST or GET (query string) parameters:
For system administrators and developers
- The points cache in the A+ frontend server has been heavily refactored in order to save memory.
- The cache (usually Memcached) must be cleared after upgrading.
- Error messages of the course import (MOOC-Grader’s aplus-json) are more descriptive than before.
- Added new options to the A+ manage.py command
export_submissions
. -
Fixed multiple bugs in the A+ REST API endpoints aggregatedata, submissiondata and resultsdata.
- Sisu integration:
- New interface to student information systems in A-plus: base class
StudentInfoSystem
incourse/sis.py
- Since the Sisu API may vary at each university/institution, each institution needs to implement the interface to their Sisu system.
- Example at Aalto University: https://github.com/apluslms/aalto-sisu
- New settings in local_settings.py for defining the Sisu interface:
SIS_PLUGIN_MODULE
andSIS_PLUGIN_CLASS
- New interface to student information systems in A-plus: base class
- MOOC-Grader no longer has a database (SQLite) since the gitmanager app has been removed.
- New Git manager:
- See the deployment documentation: https://github.com/apluslms/gitmanager
- A few settings have changed in the MOOC-Grader.
COURSE_STORE
: required if external configuration from the Git manager is used.CONTAINER_SCRIPT
replaced withRUNNER_MODULE
. This is now a Python module instead of a Bash script. The module is responsible for starting the exercise grading containers. The default isscripts/docker-run.py
that starts Docker containers like the old default. There is a templatescripts/run-template.py
for creating new modules.APLUS_AUTH_LOCAL
: define the new RSA key pairs.
A-plus-rst-tools
- New options for the new A+ feature: automatic saving of submission drafts in questionnaires.
- You may enable automatic saving for all questionnaires in conf.py:
enable_autosave = True
- The questionnaire directive has the option
:autosave:
if you want to enable autosaving only for specific questionnaires.
- You may enable automatic saving for all questionnaires in conf.py:
- New options for the Git manager (POSTPONED to A+ v1.15):
unprotected_paths
in the course configuration yaml is used to determine which files (relative to thestatic_dir
) should be freely available to the Internet. This can be set in the conf.py file with the a-plus-rst-tools library. Always contains_downloads
,_images
and_static
.- The fields
configure
for exercises andconfigures
for the course in the course yaml files are used to specify where to configure the exercises/course during the build process. This defaults to MOOC-grader for backwards compatibility. See the course configuration documentation in the gitmanager repository for the exact format in the yaml. See a-plus-rst-tools for how to change them in RST courses.
Radar (source code similarity analysis or plagiarism detection)
- New views for investigating student pairs across all assignments.
- Similarity report may be printed for a student pair.
- New list of the flagged student pairs. The flags for compared submission pairs could already be set previously.
- New list of all the students in the course.