82 KiB
Current Developments
(Work toward next release. Currently under development.)
ADDED
-
Added a way to change the
NPROCrlimit incsq_sandbox_options -
Information about the current user's dark mode settings are now available via
cs_dark_mode_settings -
Added the ability to specify additional arguments to pass to uWSGI via
cs_extra_uwsgi_options
CHANGED
- Improved error messages in the
list_usersAPI endpoint
DEPRECATED
REMOVED
-
Stopped officially supporting Python 3.8, 3.9, and 3.10
-
Removed
'codemirror'interface from thepythoncodequestion type (use'ace'instead).
FIXED
-
Updated
reporter.pyscript to work with up-to-datewebsockets -
Fixed visual jitter from varying character widths in the countdown timer when
cs_auto_lock = Trueis set -
Fixed
fileuploadquestion type so that it respectscs_upload_management
SECURITY
- Fixed issue that allowed access to
list_usersAPI endpoint in some cases when it should not have been allowed
ACCESSIBILITY
- Improved alt text for check/cross images indicating correctness
DOCUMENTATION
VENDORED SOFTWARE
-
Added Ace back to the distribution (version 1.43.3)
Version 19.0.6
CHANGED
- Updated several question types to bold the word "Solution" in answer displays so they all match
FIXED
-
Fixed an issue with broken save buttons
-
Fixed an issue with incorrect alignment of
multiplechoicequestions' answers in browsers other than Firefox
Version 19.0.5
ADDED
- Added the option to specify solutions to
fileuploadquestions with Markdown code instead of files
FIXED
-
Fixed a crash when a "checkbox"-style
multiplechoicequestion had noTrueanswers -
Fixed a UI issue whereby darkmode preferences were inherited when impersonating a student
-
Replaced code that used the
impmodule, which has been removed from Python 3.12 -
Updated handling of diagrams so that they respect darkmode settings
-
Fixed a broken implementation of solutions in
fileuploadquestions -
Fixed a rare crash with asynchronous checkers not always making sure the appropriate directories exist before attempting to write log files
-
Fixed an issue with password-locked pages that prevented them from ever being accessed.
VENDORED SOFTWARE
- A version of
cgi.pyfrom the Python standard library is now included in the distribution, since that module will be removed from the standard library in 3.13 and we depend on it for parsing form data.
Version 19.0.4
FIXED
- Fixed a regression that caused footnotes not to be displayed
Version 19.0.3
FIXED
- Added a workaround for
BeautifulSoupparsing<br/>tags strangely
Version 19.0.2
CHANGED
- The
fileuploadquestion type no longer alerts when an empty file is specified; instead, the submission is simply treated as empty
FIXED
-
Fixed a bug with questions that are re-rendered after submission
-
Fixed issues with handling of questions with
csq_indiv=Falsein the submission callback
Version 19.0.1
CHANGED
-
Changed size of per-user random seeds
-
Redesigned interface for staff for adjusting per-user random seeds
FIXED
- Fixed crash due to form values being specified multiple times
Version 19.0.0
ADDED
-
If
cs_sole_courseis set to a course's name, the root URL will now refer to that course directly (with no redirect) -
Added additional arguments to the callback function for
ajaxrequestin the default handler -
The
pythoncodequestion type now listens to thecsq_show_checkflag -
Added the
downloadandfilenameoptions to theraw_responsehandler to allow making the responses downloadable (thanks to Shen Shen) -
<python>tags can now be exited usingsys.exit(), with non-zero return codes causing the output to be ignored (or with a string value, using that instead of the Python block's output -
Additional information is now stored in the
question_infologs -
Added the ability for users to specify that they prefer light text on a dark background
-
Updates to the question info cache can now be avoided by setting
cs_update_questions_cache = False -
Added links to leave user settings pages, back to the most recent non-settings page viewed
CHANGED
-
Suppressed some warnings coming from
BeautifulSoup. -
Changed default session duration to fourteen days instead of two
-
Changed location of lock files to (hopefully) prevent the size of the locks directory from growing out of control
-
Javascript files are now located at
/js/instead of/scripts/ -
<chapter>,<section>,<subsection>, and<subsubsection>tags have been replaced with<catsoop-chapter>,<catsoop-section>, etc; and a conversion script has been provided -
Moved the default
remotePython sandbox and improved the error message when the sandbox is offline. -
Changed the following special variable names to make their purpose clearer:
csq_python_sandbox=>csq_python_sandbox_typecsq_python_interpreter=>csq_python_sandbox_interpreter
REMOVED
-
Due to build issues on some platforms, catsoop no longer depends on
uwsgiunless[server]is specified when installing. -
Removed the
certlogin type.
FIXED
-
Fixed a crash from
render_escaped_dollarmethod not existing (triggered bymistletoeupdate?) -
Fixed multiple issues with
-cflag andCATSOOP_CONFIGenvironment variable -
Fixed incorrect help text with
catsoop logeditcommand -
Fixed an old bug where submitting an asynchronously-checked question while another submission is queued for that same question caused confused results to be displayed
-
Fixed a potential bug in the
pythoncodequestion type when decoding submitted files containing a BOM -
An empty string is no longer considered to be a well-formed response to a
pythonicquestion -
Fixed a potential bug with the length calculation in the
raw_responseheader whenresponsewas given as a string containing unicode characters (thanks to Shen Shen) -
Fixed an issue with custom
csq_check_functionused withcheckboxrenderer inmultiplechoicequestions. -
Fixed a display issue causing a "hamburger" to appear on narrow screens even with no menu items present
-
Replaced the
<showhide>implementation so as to avoid broken rendering of<details>tags in Chromium/Chrome -
Code blocks within responses to question submissions are now properly highlighted
-
Fixed a regression that caused the
timeoutoption inpythoncodetest cases to be ignored -
Fixed several issues with submission data not being handled properly (potentially breaking pages after 'save' or 'view answer')
-
Fixed misleading error message in
expressionquestions withcsq_error_on_unknown_variableset toTrueand multiple solutions
SECURITY
- Several authentication types have been fixed to pull authentication information from a context that cannot be altered by individual courses.
ACCESSIBILITY
-
Changed
radioandcheckboxmultiplechoice variants to usefieldsets and to properly associate labels with inputs -
Improved screen-reader-friendliness of solution displays for the
checkboxmultiplechoice renderer -
Improved code displays (with and without line numbers) to make them more usable with a screen reader
-
Automatically set ARIA labels for built-in question types based on
csq_prompt(and added the ability to specify acsq_preamblethat is not included as part of the ARIA label). -
Switched from KaTeX to MathJax for math rendering, for better screen reader support
-
Improved keyboard-oriented navigation and screen-reader support for the navigation breadcrumbs and the top menu
-
Improved accessibility of modal dialogs from the
cs_modaljavascript function
VENDORED SOFTWARE
-
Removed KaTeX from the distribution
-
Included MathJax (v3.2.2) in the distribution
-
Upgraded CodeMirror to version 6
Version 18.0.0
(formerly known as 2022.9.0)
ADDED
-
Added
cs_log_lock_locationto control where locks for log files are written -
Added
csq_rendereroption topythonicqtype, to allow choosing betweenbigboxandsmallboxrenderers -
The
pythonicqtype now respects thecsq_check_functionvariable (which can still be overridden by specifying check functions for individual tests) -
Questions with a "Check" button now have a "Revert to Prior Submission" button
-
Added
cs_wsgi_server_worker_max_requestsoption to provide--max-requestsoption to uWSGI, to force workers to be killed and restarted after that many requests
CHANGED
-
cs_local_python_importnow raises a more meaningful exception when the given filename is incorrect -
Replaced hacky import mechanism for custom question types with access to
cs_local_python_import -
Questions with a "Check" button no longer also have a "Save" button
-
Added error reporting on failed
<include>tags -
Changed default message for when users are not logged in
REMOVED
tutor.init_randomnow uses randomly-generated random seeds again
FIXED
-
Fixed an issue with autolocking and auto answer viewing
-
Fixed an issue with
checkoffquestion type not understanding who has permissions to submit checkoffs -
Fixed an issue with storage of manual grades
-
Fixed an error with certain LTI integrations
-
Fixed an incorrect check for whether the target(s) of
<include>tags are within the tree -
Fixed an issue with
checker_local'smultiprocessingon MacOS -
Every page now loads the CodeMirror base code, to fix an error caused by multiple code-like questions using different CodeMirror modes but bringing in a completely fresh
codemirror.jsfor each one (overriding the old modes) -
Replaced deprecated
get_event_loopfunction in reporter.py script
REMOVED
- Removed the ability to use other machines as remote checkers
SECURITY
-
Don't allow fresh logins on user settings pages
-
cs_auth_typeis now only read fromconfig.py(course-levelpreload.pyfiles cannot change it)
VENDORED SOFTWARE
-
Upgraded Codemirror to v5.65.6 (upgrating to Codemirror v6 will happen in a later catsoop version)
-
Upgraded KaTeX to v0.16.0
-
Upgraded Twemoji to v14.0.2
Version 17.0.0
(formerly known as 2021.9.0)
ADDED
-
File uploads in the built-in question types now support dragging-and-dropping files (in addition to the normal file-chooser setup)
-
Logging of page views (in the
problemactionslog) can now be enabled by settingcs_log_page_views = True -
Allow running via
python3 -m catsoopin addition tocatsoop -
Added experimental support for running checkers on separate machines from the web server
-
Added a
delete_logfunction to thecslogmodule -
Added a "user settings" page for managing user information, API tokens, look-and-feel, and more
-
Unauthenticated users now receive the
"Unauthenticated"role, which can be used to control permissions -
Added a way to impersonate a user while preserving their permissions, via the
preserve_permissionsquery string parameter
CHANGED
-
On the main page, links are now shown even to courses that can't be properly loaded, so that the underlying issue is easier to find (clicking on the link shows a more detailed error message)
-
Auto-generated
csq_namefields now increment only for questions that don't have names specified (reverts a change from2020.9.0) -
The
pythonicandpythonliteralquestion types now allow checking for valid formatting -
Reverted changes to
cslogmodule and how the checker queue process works -
Logs now store information about file uploads in a more intuitive format
-
cs_upload_managementreturns as a way to control where uploaded files are stored (directly in the database, or as separate files) -
Changed the location of the default
remotesandbox for running Python code -
Replaced
csq_grading_mode="legacy"withcsq_autograder_asyncflag, and made synchronous checking the default
REMOVED
- Removed PostgreSQL as a logging mechanism
FIXED
-
Fixed issue with reporter websocket connection being lost frequently
-
Fixed a crash related to
multiprocessingon MacOS with Python 3.8 -
Fixed an issue with rendering inline code blocks split across multiple lines of Markdown
-
Attempted fix for rendering of the catsoop logo in the footer on iOS/Safari
-
Fixed a potential race condition in
cslog.most_recent
SECURITY
-
Logs are now encrypted by default
-
Removed information about the Python version from the default footer
-
Prevented lock file locations from leaking information when logs are encrypted
-
Switched to using the
secretsmodule to generate secure tokens -
API tokens are no longer generated automatically for users, and are no longer present in the source of exercises.
-
OpenID Connect auth type now implements PKCE.
VENDORED SOFTWARE
-
Upgraded KaTeX to version 0.13.16
-
Upgraded Twemoji to v13.1.0
-
Upgraded CodeMirror to v5.62.2
Version 16.1.0
(formerly known as 2021.2.0)
ADDED
-
Added information about the Python version to the default footer
-
Added ability to easily change the Javascript callback functions invoked after taking an action using the built-in action buttons
-
Javascript callback functions now take a second parameter, the name(s) of the question(s) that were affected by the action
FIXED
-
Fixed the color of the "callout" box for the checking queue
-
Fixed broken
tutor.read_checker_result -
Updated the
certauth type to work with NGINX
SECURITY
- Fixed an XSS vulnerability in the default handler
Version 16.0.0
(formerly known as 2020.9.0)
ADDED
-
Added ability to conditionally show or hide HTML elements via the
cs-show-ifandcs-hide-ifattributes -
Added support for showing line numbers next to code snippets by adding
-linesto the end of the language specified for a code block -
Added ability to avoid running children's preloads into
cs_children, by settingcs_load_children = False -
Added support for using LTI with Canvas, and added support for customizing the username inferred from LTI data, via
lti_username_functionincs_lti_config -
Added support for PostgreSQL as an alternative backend for storing logs
-
Added the ability to customize the text shown on the button in
<showhide>tags, via thesummaryattribute -
Added support for Markdown "callouts", similar to Markdeep's "admonitions"
-
Added support for syntax highlighting of inline code elements
-
Added the
ldap3authentication type for login using an LDAPv3 server -
Added the
ssoauthentication type for authentication using an arbitrary third-party single-sign-on provider -
Added support for sharing KaTeX macros across calls to
catsoop.render_math -
Added support for using
:short_name:syntax to reference emoji, which can be included as images or as unicode characters; and added emoji images from Twemoji as the default images
CHANGED
-
Auto-generated
csq_namefields increment for every question, even those that have names specified -
Switched to mistletoe for handling Markdown (CommonMark) instead of
Python-Markdown -
Some small changes to the way code is displayed on catsoop pages, to improve readability
-
Logging, upload management, and queue management are now unified within the
cslogmodule -
Changed default ports from 6010 and 6011 to 7667 and 7668 to avoid a conflict with X11, and modified the
catsoop configurecommand to ask about the port numbers -
Replaced
js_filesin question types withextra_headers, for injecting arbitrary strings into the header (which allows specifying not only Javascript files but also stylesheets) -
Removed Ace editor in favor of CodeMirror as the default web-based code editor
-
Upgraded KaTeX to v0.12.0
-
Upgraded highlight.js to version 10.0.2
-
cslognow usespickleprotocol 4 by default (rather than the highest possible protocol), to make sure that all supported Python versions can read logs produced by any other supported version.
REMOVED
-
Removed slow/broken code for logging in via e-mail instead of username when using the login auth type
-
cs_upload_managementis no longer relevant, as uploads are now handled via a standard interface incslog -
Custom authentication types can no longer be specified at the course level.
-
Removed the choice of where file uploads are stored (
cs_upload_managementis no longer recognized) -
Removed MathJax from the distribution
FIXED
-
Show an error message when two questions would have the same name
-
Fixed an issue with using cached results in the
pythoncodequestion type -
Fixed issues with incorrect scores being sent to LTI consumers
-
OpenID Connect auth type now properly checks JWT issuer.
-
Fixed issue with
numberquestion type not accepting negative inputs (thanks to Abdullah Negm)
SECURITY
- Closed an XSS vulnerability by escaping the URL on 404 error pages
Version 15.1.0
(formerly known as 2020.2.0)
ADDED
-
Added support for top-level math environments without
$or$$:equation,equation*,align,align*,eqnarray,eqnarray* -
Added support for drawing SVG diagrams using ASCII art (ported from Markdeep)
CHANGED
-
Upgraded KaTeX to v0.11.1.
-
Replaced Fernet encryption with simpler encryption scheme based on
libsodium.
FIXED
-
Fixed an issue with
showhidetags that prevented them from properly handling arbitrary contents (at the expense of nestedshowhidetags) -
Fixed alignment of first line within
<pre><code>tags -
Fixed issue with
csq_rerenderignoring prompts (courtesy of Valerie Richmond)
Version 15.0.6
(formerly known as 2019.9.6)
FIXED
- BACKPORT: Fixed an issue whereby submitting a
multiplechoicequestion using theradiorenderer would cause an error if no option was selected (courtesy of Kade Phillips)
Version 15.0.5
(formerly known as 2019.9.5)
FIXED
- BACKPORT: Fixed long-standing issue whereby certain students could not log
in due to cookies being parsed incorrectly by
SimpleCookie.
Version 15.0.4
(formerly known as 2019.9.4)
FIXED
- Fixed issue whereby having the logs on a different filesystem from
/tmpcould cause the checker to crash.
Version 15.0.3
(formerly known as 2019.9.3)
FIXED
- Fixed several lingering references to the
utilmodule, which has been renamed touser.
Version 15.0.2
(formerly known as 2019.9.2)
FIXED
- Fixed an issue preventing question types with multiple boxes (e.g.,
multiexpression) from pre-populating those boxes with values from the last submission.
Version 15.0.1
(formerly known as 2019.9.1)
FIXED
- Multiple fixes for the
remotePython sandbox
CHANGED
- The version codename is now displayed when running
catsoop --version, and in the default footer.
Version 15.0.0
(formerly known as 2019.9.0)
ADDED
-
Checking functions for
pythoncodequestions can now optionally return a tuple(score, message)or a dictionary{'score': score, 'msg': message}to display an additional message in response to a test case. -
Added
cs_local_python_importfunction to the context of a page load. This function takes a string containing a filename (with extension, relative to the current page's directory) and returns a Python module object. -
Added
.catsoopas a content file extension, parsed using the same parser as content files with the.mdextension. -
Added rudimentary support for syntax highlighting of
.catsoopfiles in Vim. -
Added
cs_ui_config_flags, including option to automatically view explanations when viewing answers, and to highlight the 'view explanation' button. -
Added
cs_user_config, including option to specify which variable should be used for grouping when managing groups. -
Added
csq_result_as_stringoption topythoncodequestion types, allowing the result to come back as a string (useful for custom types as return values frompythoncodeorpythonicquestion types, where evaluation would otherwise fail). -
Added
logread,logwrite, andlogeditcommands for working with log entries in a human-readable format. -
Plugins can now start scripts when catsoop is started. scripts in
cs_data_root/plugins/autostart/that end with.pywill be run when catsoop start is invoked. -
Added nicer names for URL fragments of sections and updated the
<tableofcontents/>generator to use these when linking to sections. -
Added option to show permalinks next to section headers (enabled by setting
cs_show_section_permalinks=True). -
The
printfunction can now be used to add content to the page when using the Python source format. -
The
cs_content_headertext now has the CSS classcs_content_header. -
Items in the top menu in the default theme now have the CSS class
cs_top_menu_item.
CHANGED
-
Question names can no longer begin with an underscore (
_). -
Plugins should now be stored in
cs_data_root/pluginsrather than incs_fs_root/__PLUGINS__. URLs starting with_pluginnow point to the proper location. -
File locks are now stored with a
.lockextension, to avoid potential collisions with directory names. -
Renamed
loader.do_early_loadtoloader.do_preloadandloader.do_late_loadtoloader.load_contentto hopefully remove the last of the "early load" and "late load" terminology. -
Changed the name of the
utilmodule touserto better reflect its purpose. -
CAT-SOOP will use date-based versioning moving forward. Planned regular releases are
20XX.9and20XX.2(September and February, corresponding with the start of the fall and spring terms at MIT, respectively). Each release will also now have a codename. -
Upgraded KaTeX to v0.11.0.
-
Changed the solution display for the
richtextquestion type. -
util.read_user_filenow does not raise an exception if there is an error in a user's file. Rather, it always returns a dictionary, but includes error information in the case of an error. -
Logs are now stored in a binary format in order to improve the efficiency of reading/writing log entries.
-
The configuration script for production instances now uses
uwsgiby default, and it asks about the number of processes to use foruwsgiand for the checker.
REMOVED
-
Removed several deprecated features:
-
__MEDIA__can no longer be used as a name for directories containing static files.__STATIC__should be used instead. -
csm_toolsno longer points to utility functions from third-party libraries. Usecsm_thirdpartyinstead. -
cs_printhas been removed. Useprintinstead. -
csq_multiplechoice_rendererandcsq_multiplechoice_soln_modevariables for multieplchoice questions have been renamed tocsq_rendererandcsq_soln_mode, respectively. -
cs_score_messagehas been removed as a special variable. Usecsq_score_messageinstead. -
loader.spoof_early_loadhas been renamed toloader.generate_context.
-
-
Removed
circuitquestion type, which has not been used by anyone for a long time and may no longer work with catsoop updates.
FIXED
-
loader.generate_contextno longer breaks when given an empty path. -
Reverted changes to
languagemodule from version 14.x.x. -
Scores and messages are now logged in
problemactionsfor questions in legacy grading mode (checker IDs are still logged for questions using the asynchronous checker) -
Fixed an issue whereby
set()could not be accepted as an answer to apythonicorpythonliteralquestion. -
Fix for malformed HTML in
multiexpressionquestion output. -
Fix for "preview" in
richtextquestion type. -
Fixed an issue related to complex numbers in the
expressionquestion type. -
Implemented a fix for the long-standing issue with empty lines in
showhidetags escaping out of them. -
Fixed an issue with the checker process, whereby submissions would forever be marked as 'running' if they experienced an error during page load or when looking up the question that was submitted.
-
Fixed the lack of decompression of uploaded files when downloaded via the 'Download Most Recent Submission' link.
-
Fixed an issue that caused the contents of
<ref>tags to be ignored. -
Fixed several issues with the
openid_connectimplementation to make it more general. -
"divider"can once again be used as an element incs_top_menudrop-downs.
Version 14.0.3
FIXED
- Fix for issue with multiple blank lines in output from
pythoncodequestions.
Version 14.0.2
FIXED
-
Fix for a UI issue with the alignment of the timer when used in an iframe.
-
Fixed an issue with the
post_loadhook not being able to affect page content. -
Fixed the LTI behavior by passing form POSTs through, if the session is already LTI authenticated.
-
Fixed a regression from
language.pychanges that prevented content after the last question on a page from being rendered. -
Fixed a regression from
language.pythat prevented footnotes from being shown in most cases. -
Fixes for Python unicode.
Version 14.0.1
FIXED
-
Fix for a problem with unicode characters in the pythoncode question type when using the
aceinterface. -
Fixed an issue with older Pythons by using an
OrderedDictto storecs_internal_qinfoinlanguage.py.
Version 14.0.0
ADDED
-
Added the dummy
questiontype, which can be used as a placeholder for a question that should be removed (but without affecting automatically-generatedcsq_namesfor questions that follow. -
Added support for using CAT-SOOP as an LTI Tool Provider (courtesy of Ike Chuang).
-
Added a few unit tests (courtesy of Ike Chuang).
-
Added
cs_debug_logger, an instance oflogging.Logger, for debugging (courtesy of Ike Chuang). -
Added
do_rlimitskey to thepythonsandbox, which can be used to disable setting resource limits (workaround for Cygwin issue). -
Several additional features were added to
pythoncodequestions:-
pythoncodecheck functions now have a lot of additional information available to them, beyond the value that was returned (includingstdout,stderr, information about any exceptions that were raised, and information about timing). -
Added the option to selectively show/hide stderr via
test['show_stderr']. -
Added the option to count the number of executed opcodes, and to set timeouts based on number of executed opcodes.
-
Added the
csq_test_defaultsoption to provide default per-test-case options within a single question.
-
-
Brought back breadcrumbs in the default theme.
-
The CAT-SOOP source distribution now includes the Ace code editor.
-
Added
cs_custom_tagsfor specifying custom tags for a course.
CHANGED
-
Updated KaTeX to version 0.10.0.
-
Updated CAT-SOOP to use
Python-Markdownversion 3+. -
Replaced default favicon with one that does not have the letters "CS" in it.
-
Modified the default theme to ensure the body of a page is always at least 900px wide.
-
CAT-SOOP now exists as a proper Python package.
-
Moved file locks to a subdirectory of
cs_data_root. -
Sessions are now stored in
cs_data_root/_sessionsinstead ofcs_data_root/__SESSIONS__. -
Logs are now stored in
cs_data_root/_logsinstead ofcs_data_root/__LOGS__. -
Improved display of test case results for
pythoncodequestions. -
Per-test-case sandbox options for
pythoncodequestions are now specified viatest['sandbox_options']. -
The
run_codefunction for Python sandboxes now returns a dictionary, rather than a 3-tuple. -
Changed the structure of JS web labels for LibreJS, to make it clearer which parts of a page's Javascript are explicitly licensed under AGPLv3.
FIXED
-
js_filesnow preserves the order of its arguments. -
Fixed an issue with Microsoft Edge not accepting button presses.
-
Fixed an issue with the default handler's timer not properly synchronizing with the server's time.
-
Fixed a type issue related to
mpmathobjects innumpyarrays. -
Fixed confusing results from
pythonicquestion type by making sure that the submission constitutes a single Python expression. -
Fixed a bug in the
pythonicandpythonliteralquestion types so that answers with leading whitespace are allowed. -
Fixed a bug whereby non-JSON-serializable objects in someone's
__USERS__file would break theget_user_informationAPI endpoint. -
Fixed an issue with
expressionquestion types, whereby if all values were specified incsq_names, the question would use the specified values, likelyints orfloats (instead ofmpmath.mpf) to represent them, occasionally causing corect answers to be marked as incorrect due to a loss of precision. -
Fixed an issue with the Python sandbox's
sandbox_run_codeby making it respectcsq_sandbox_options. -
Fixed bugs with multiple functions in the
catsoop.checkmodule. -
Fixed bug in
cs_ajax.jsrelated to submitting manual grades. -
Fixed an issue with proper display of whitespace in
pythoncodequestion types' inputs/outputs. -
Fixed an issue that caused
last_submitvalues to be updated too soon (before checking to see if a submission was allowed). -
Fixed an issue that caused bare content files starting with
_or.to be web-accessible. -
Fixed the
permissionsfield incs_user_infoto make sure it is always aset. -
Fixed the 'Show/Hide Detailed Results' button in the
pythoncodequestion type to have the same styling as other buttons. -
Fixed a bug with
catsoop.modalJavascript that caused an error ifcancelwas set tofalse. -
Fixes for reporting line numbers in
<python>tags.
DOCUMENTATION
- The CAT-SOOP web site is now included in the distribution, and includes a new page to automatically generate API documentation.
Version 13.0.0
ADDED
-
Added the
<tableofcontents/>tag, which produces a table of contents for a page. -
Added support for question types to have a
js_filesfunction that returns a list of Javsacript files that should be loaded before rendering the question. -
The decimal precision of numbers in the expression question type can now be altered via the
csq_precisionvariable. -
Added the
multiexpressionquestion type for questions about multiple related expressions. -
Made CAT-SOOP work properly with LibreJS.
-
Added support for Python sandboxing via bubblewrap
-
The
cs_question_type_defaultsvariable can be used to set default values of variables for specific question types. -
The
catsoop.checkmodule is now available. It provides access to a small library of common check functions (to be used ascsq_check_functionor similar). It is accessible during normal page loads ascsm_check. -
CAT-SOOP can now optionally encrypt log entries, with keys specified via
cs_log_encryption_passphraseandcs_log_encryption_salt -
CAT-SOOP can now optionally compress log entries, by setting
cs_log_compression = True. -
Added support for Python 3.7.
CHANGED
-
Updated KaTeX to version 0.10.0-rc.1.
-
Updated MathJax to version 2.7.5.
-
Updated highlight.js to version 9.12.0.
-
The location and format in which uploaded files are stored on disk as changed.
-
The URL format for static files has changed (
__STATIC__->_static). -
The URL format for utilities has changed (
cs_util->_util). -
csq_thresholdandcsq_ratio_checkhave been replaced withcsq_ratio_thresholdandcsq_absolute_thresholdin theexpressionquestion type. The more lenient of the two thresholds is used. Default behavior is the same as before.
DEPRECATED
-
The special directory name
__MEDIA__has been renamed to__STATIC__to better reflect its purpose.__MEDIA__will be removed in a future version. Use__STATIC__instead. -
The
catsoop.toolslibrary was renamed tocatsoop.thirdpartyto better reflect its contents. Thecsm_toolspointer to these libraries will be removed in a future version. Usecsm_thirdpartyinstead. Many of the libraries themselves were also removed (and should be imported directly, rather than accessed viacsm_thirdparty) -
printshould now be used instead ofcs_printto inject page content from within<python>tags.cs_printwill be removed in a future version. -
The
csq_multiplechoice_rendererandcsq_multiplechoice_soln_modevariables have been renamed tocsq_rendererandcsq_soln_mode. The options including_multiplechoicewill be removed in a future version.
REMOVED
-
Removed jQuery, Bootstrap, and SweetAlert2 (replaced with our own JS/CSS).
-
Removed
cs_util/process_themeand removed dependence on outside fonts. -
Removed many bundled third-party applications, in favor of installation via pip.
-
cs_login_aes_key_locationhas been removed. Thecs_log_encryption*variables should be used instead.
FIXED
-
Fixed a bug that assigned the wrong
qtypevariable to question types that inherit from other question types. -
Fixed an issue with error reporting when trying to log a tuple that contains an element that can't be logged.
-
Fixed an issue that caused CAT-SOOP's main page to crash if a course with a malformed
preload.pywas present. -
Removed some redundant calls to
cslog.most_recentfrom the default handler to improve efficiency. -
Fixed multiple instances of improper handling of questions with multiple boxes.
-
Fixed a bug related to improper handling of internal links with trailing slashes.
-
"Log In" and "Log Out" no longer discard the query string associated with the current page (courtesy of Jeremy Wright).
-
Fixed the 'check' action so that it respects
csq_grading_modeand checks to see whether checking is allowed before actually running the check.
SECURITY
- Prevent submissions from being able to access materials defined in
csq_code_prefrompythoncodequestions.
Version 12.1.1
FIXED
-
Fixed an issue with unintentional "broadcasting" of
numpyarrays in certain expression questions. -
Fixed an issue that prevented
datetimeandtimedeltaobjects from being logged.
Version 12.1.0
ADDED
-
Added questions' types and grading modes to the
question_infocache. -
datetimeandtimedeltaobjects (from thedatetimemodule) are now allowed in log entries.
CHANGED
-
The automatic source code download no longer saves cached copies, to avoid accidentally filling small disks.
-
Upgraded KaTeX to version 0.9.0.
-
Upgraded SweetAlert2 to version 7.15.1.
-
Upgraded MathJax to version 2.7.3.
-
Upgraded PLY to version 3.11.
REMOVED
'questions'is no longer a valid key fortutor.compute_page_stats, as it is redundant with'question_info'.
FIXED
-
Fixed an issue where invalid question names were failing silently.
-
Prevented scroll bars from showing up in the CAT-SOOP logo at the bottom of the page.
-
The
question_infocache is now checked/updated after thepre_handleplugin is executed, rather than after. -
expressionquestions now support implicit multiplication byj(the imaginary unit). -
Fixed an issue that caused scores in the
problemstatelog to be overwritten withNonewhen the "check" button was used. -
Entering an empty expression and entering an invalid expression to a
pythonicquestion now produce the same error message. -
Fixed a bug where API token was not being properly set when impersonating a user.
-
In the default handler, ensure that
handle_checkcreates allproblemstatefields if they don't already exist. -
The checker script is now aware of the
cs_nowvariable. -
Fixed an issue that caused a misleading error message when the
remotePython sandbox couldn't be reached. -
Fixed a misleading error message about how to install
josewhen using theopenid_connectauthentication type. -
Fixed a broken link after an error message when using the
openid_connectauthentication type.
SECURITY
- Prevented
as_rolefrom affecting the'role'field incs_user_infoif the user does not have the'impersonate'permission.
Version 12.0.0
ADDED
- Added a cache of question information, to avoid having to fake a page load
to get question information in
tutor.compute_page_stats.
CHANGED
-
CAT-SOOP can optionally be configured to use uWSGI, and the options for configuring the WSGI server have changed.
-
Logs are now stored in plain-text files, as opposed to binary log file.
-
Page views are no longer logged in the problemactions log.
-
Updated KaTeX to 0.9.0-beta1.
-
'question_points'is no longer a valid key intutor.compute_page_stats.'question_info'should be used instead.
FIXED
- Fixed a bug with rendering of scores when manual grades are submitted.
Version 11.1.2
ADDED
- Added "Log In" / "Log Out" to top menu by default, and gave authentication types the ability to populate that menu.
CHANGED
-
Separated WSGI server into separate process, and allow
cs_wsgi_server_portto be a list to start multiple servers (for load balancing). -
Updated
wsgi.pyso that it can be used by an external WSGI server (such as uWSGI). -
csq_nosubmit_messageis now sent only on an actual submission (not when viewing the page), so that the submit button still appears when loading pages withcs_nosubmit_message set. -
Buttons are now always created under 'view' mode in the default handler.
-
cs_nosubmit_messagewas replaced withcsq_nosubmit_message(specific to each question).
FIXED
-
Fixed an issue where checker results were stored in an invalid location in the case of some errors.
-
Fixed an issue with the checker updating scores for problems that don't yet have a
problemstatelog. -
Added CSS to prevent scrollbars from appearing on the CAT-SOOP logo in page footers.
-
Fixed key generation for AES encryption in
loginauthentication mode. -
Fixed a bug with changing password in
loginauthentication mode. -
Fixed a bug with client-side password hashing so that the hash is now a proper PBKDF2 hash of the given password.
-
The
last_submit_timeandlast_submit_timesentries in theproblemstatelog are now only updated if the submission was successful. -
Fixed a bug whereby some compound expressions were treated as literals in the
pythonliteralquestion type. -
Fixed a bug with rendering of
<and>in therichtextquestion type. -
Fixed an issue with empty
<python>tags. -
Fixed a broken link in the OpenID Connect login page.
Version 11.1.1
ADDED
- Added the
legacygrading mode, which does not use the asynchronous checker.
CHANGED
-
Separated checker results into subdirectories to prevent a single directory growing too large.
-
Helper scripts are now launched using
sys.executable, rather than a hard-codedpython3. -
Checks run through the asynchronous checker now cache their results in the
problemstatedirectory, to avoid having to do a double-lookup. -
Attempts at improved error reporting throughout CAT-SOOP.
REMOVED
- Removed the
PKillerclass, which is no longer used anywhere.
FIXED
-
Temporary workaround for automatic scrolling to location of anchor.
-
Fixed a bug with username/password-based access to the
get_user_informationAPI endpoint. -
Fixed a bug with the name of uploaded files.
SECURITY
- The current session ID and API token are now filtered from error messages.
DOCUMENTATION
- Added (hopefully) meaningful docstrings to almost everything in the codebase.
Version 11.1.0
ADDED
-
Added cheroot as a
catsoop.toolspackage. -
Added websockets as a
catsoop.toolspackage.
CHANGED
-
cherootis now used instead of uWSGI. -
File names for uploaded files now include the
csq_nameof the question they were uploaded for.
FIXED
-
Fixed an issue whereby the Python sandbox could leave handles to deleted files open (eventually leading to an error from having too many files open).
-
Changed the Python sandbox to use
sys.executable(instead of hard-coded path to an assumed location of a Python interpreter) whencsq_python_interpreteris not set.
SECURITY
- File names for uploaded files now include a hash of their contents to limit the feasibility of a brute-force attack to grab a different user's files.
Version 11.0.5
ADDED
-
Added the
get_uploadutility for downloading uploaded files. -
Added
'extra_data'field to checker results. -
Added
tutor.read_checker_resultfor quickly reading checker results. -
Added
csq_npointsas an option to thepythoncodequestion type. If specified, it overrides any point values assigned to the individual test cases.
CHANGED
-
Changed the default checker used for multiple-choice-multiple-answer problems.
-
The
fileuploadquestion type now usesget_uploadto download user files, rather than a data URI. -
Made changes to make sure that files are always closed after being opened.
FIXED
-
Fixed a potential race condition in the
pythoncodequestion type. -
Fixed an issue with the
expressionquestion type, where overzealous type checking led to some correct answers being marked as incorrect. -
Fixed issues with the
circuitquestion type that prevented an AC analysis from being run interactively, and that caused incorrect AC results to be sent to the checker. -
Changes to make sure that reasonable fonts are used (particularly in
<pre>,<code>, and<tt>) even if our fonts are not loaded. -
Some small temporary fixes to AC analysis in the circuit simulator for the
circuitquestion type.
SECURITY
- Fixed an issue whereby
get_uploadcould be used to read arbitrary files from disk via a carefully constructed request.
Version 11.0.4
FIXED
-
Fixed issue with matrix comparison in
expressionquestion type. -
Fixed syntax error (typo) in
handouthandler.
Version 11.0.3
FIXED
- Use https://github.com/aaugustin/websockets for websocket connections.
REMOVED
-
Removed the included simple websockets implementation.
-
Removed more traces of the abandoned queue.
Version 11.0.2
FIXED
- Moving a file from
runningtoresultsin the checker is now implemented as an atomic operation, to avoid the potential for corrupted results files.
Version 11.0.1
FIXED
- Changes to the way the 'reporter' process handles websocket connections.
Version 11.0.0
ADDED
- Added script to migrate SQLite logs (and checker) to new format.
CHANGED
-
Logs are now, once again, stored in
catsoopdbformat. No other options. -
The checker's state is now stored via the filesystem, rather than through SQLite.
-
File upload paths are now stored relative to
cs_data_rootto make moving between systems easier. Old (absolute) paths still work, but the system will now store relative paths. -
Results from completed checks are now loaded in a way that avoids requiring a websocket connection.
-
The checker and reporter are now two separate processes.
FIXED
-
Fixed serious bug (deadlock) with checker script / logging.
-
Fixed HTML rendering of
pythoncodequestion type.
Version 10.4.0
ADDED
-
Added a means of viewing a page with different (lower) permissions by spoofing your role (the
as_rolequery string argument). -
Added a
dummyauth type to make authentication on local testing setups easier. -
Added preliminary support for running on MacOS and Windows (Cygwin) hosts by fixing a number of Mac-specific issues.
-
The score display can now be changed on a per-problem basis via
csq_score_message.
CHANGED
-
pycs-compiled files are now stored in
<cs_data_root>/_cached, to avoid polluting the course itself. -
The body of the CAT-SOOP default template is now slightly wider.
-
Local Python sandboxes now write their
stdoutandstderrto files instead of relying on low-level hacks involving pipes. -
Updated KaTeX to version 0.8.2.
-
Updated python-markdown to version 2.6.9.
-
The magic variable controlling the checker's location is now
cs_checker_websocketinstead ofcs_websocket_location(which is now ambiguous). -
Added more options to modify the styling of the "login required" page.
-
Cross/check images are now preceded by a newline.
DEPRECATED
cs_score_messagehas been deprecated, in favor ofcsq_score_message.cs_score_messagewill be removed in a future version.
REMOVED
- Removed lots of unused imports, unused local variables, etc, courtesy of
pyflakes.
FIXED
-
Fixed a race condition related to clearing expired session data.
-
Fixed serious bug (deadlock) with checker script / logging.
-
Modified the way
PKillerkills processes to avoid a potential race condition. -
Fixed several breaking issues with the grouping mechanism related to the version 10 changes.
-
Fixed a bug that prevented WHDW from loading students' scores.
-
Fixed a bug that caused some
<showhide>tags' buttons to affect othershowhideelements on the page instead of themselves. -
Fixed an issue with error reporting in the
openid_connectauth type. -
Fixed an issue with the
loginauthentication type that caused false negatives when checking passwords from different browsers. -
Fixed an issue with broken loading of uploaded files from the database.
-
Fixed an issue that caused an error message not to be shown when
cs_formwas not defined. -
Replaced a lingering instance of
xrange. -
Questions with the
checkoffquestion type now render as totally empty if the description and name are empty, rather than as a single colon.
SECURITY
nohup.outfiles are now ignored when generating the .zip files of the CAT-SOOP source.
Version 10.3.0
CHANGED
- Moved all logs to one central location to make backups easier.
Version 10.2.2
REMOVED
-
Removed several calls to the deprecated
cs_printfrom the default "main" page. -
Removed "Acknowledgments" section from the default "main" page.
FIXED
-
Removed an extraneous
printstatement from the default handler. -
Remove HTML formatting from course name in
source.zipdownloads.
Version 10.2.1
CHANGED
- Prevented the creation of extra directories when reading nonexistent logs.
REMOVED
- Removed the defunct
checker_reporter.jsscript.
FIXED
-
Fixed a number of issues with sessions.
-
Fixed an issue with serializing Python
sets for logging.
Version 10.2.0
ADDED
- Added more options to modify the styling of the "login required" box.
CHANGED
-
Submission IDs are no longer visible by default, though they can be made visible with
cs_show_submission_id. -
Logs once again use SQLite instead of RethinkDB.
REMOVED
- Removed RethinkDB completely.
FIXED
- Updated the location of the default remote sandbox.
Version 10.1.0
ADDED
cs_user_infoandcs_usernameare now always defined, even on pages that don't require authentication
CHANGED
- The built-in
printfunction can now be used instead ofcs_printto inject page content from within<python>tags.
DEPRECATED
printshould now be used instead ofcs_printto inject page content from within<python>tags.cs_printwill be removed in a future version.
FIXED
-
Fixed issue with clearing session data.
-
Fixed an issue with QTYPEs'
initfunctions being called with incorrect arguments.
Version 10.0.1
CHANGED
-
RethinkDB is now used to store session data, as opposed to the file-based storage used in the past.
-
Slight changes to the way version numbers are displayed in the default template.
FIXED
-
Fixed multiple large issues with manually-graded submissions.
-
Fixed multiple large issues with the
fileuploadquestion type.
Version 10.0.0
ADDED
-
Added the dot product operator to
expressionquestion type. -
Added
process.py, containing some common operations relating to process management. -
Added support for storing uploaded files on disk rather than in the database directly.
CHANGED
-
RethinkDB is now a hard dependency.
-
The API for logging functions was changed, to avoid a special character as a separator.
-
Submissions are now handled asynchronously, and results are retrieved via web sockets.
-
Markdown no longer outputs
<em>or<strong>, preferring<i>and<b>to improve browser compatibility. -
Many images are now included in pages as data URI's rather than being loaded from a separate request.
-
Replaced the CSS-based loading spinner with an image.
-
Changed the password hashing scheme for the login authentication type to one based on https://blogs.dropbox.com/tech/2016/09/how-dropbox-securely-stores-your-passwords/
-
Re-styled buttons throughout the system.
REMOVED
-
Removed CSS-only spinner, replaced with data URI for image in the base context.
-
Removed images for check/cross/favicon, replaced with data URI's in the base context.
-
Removed SQLite and catsoopdb as backends for logging.
FIXED
-
Improved the Javascript code responsible for making sure the top menu doesn't block text when moving around a page.
-
Errors in the registration form now prevent submitting the form.
Version 9.4.3
ADDED
-
Added the
circuitquestion type. -
Added support for nonscalar values in
expressionquestions.
FIXED
-
Changed exponentiation to be right-associative in the
expressionquestion type. -
Fixed a bug with rendering implicit multiplication in
expressionquestions. -
Fixed a bug with rendering of chained exponentiation in
expressionquestions. -
Fixed a bug with order of operations when using the Python syntax in
expressionquestions.
Version 9.4.2
ADDED
-
Added the
<section*>family of tags, for unnumbered sections. -
Added the
<include>tag, to include the contents of another file. -
Added the ability to add an additional message to the default page, via
cs_main_page_text.
FIXED
- Fixed an issue whereby expressions utilizing binary subtraction were not properly parenthesized in the "Check Syntax" rendering of expression questions.
Version 9.4.1
FIXED
-
Fixed an issue with rendering of certain test cases in the
pythoncodequestion type. -
Modified the handling of streams in the Python sandbox to avoid buffers filling up.
-
Modified error message handling in the Python sandbox to avoid long-running regex searches.
Version 9.4.0
ADDED
-
Added support for custom "submissions not allowed" messages via
cs_nosubmit_message. -
Added the
cs_nowvariable to page load contexts. -
Added the
code_preoption to tests in thepythoncodequestion type, for code to be run before submitted code.
CHANGED
-
Code is now licensed under the GNU Affero General Public License, v3+. Footer text has been updated to reflect this change.
-
cs_nsubmits_messagewas replaced bycsq_nsubmits_message. -
Updated MathJax to version 2.7.1, and updated it to use a future-proof renderer.
-
Updated PLY to version 3.10.
-
Updated Markdown to version 2.6.8.
-
Updated BeautifulSoup to version 4.6.0.
-
Fixed several issues with rendering of
pythoncodequestion types. -
Updated the "Formatting Help" page of the
richtextquestion type.
REMOVED
- Removed large pieces of the default MathJax install because they will not be used.
FIXED
-
Fixed broken "home" link for pages in the
cs_util"pseudo-course." -
Fixed issue with HTML tags not rendering inside of
<section>tags. -
Fixed error messages for expressions that can't be parsed in the
expressionquestion type. -
Fixed a crash when the
<cs_data_root>/coursesdirectory did not exist or was not writeable by the web server. -
Fixed a bug with HTML tags being ignored inside
<ref>tags.
Version 9.3.0
ADDED
-
Default handler now logs scores of all questions in the
problemactionslog when submitting. -
Added the
csq_always_show_testsoption topythoncodequestions, to enable/disable the "Show/Hide Detailed Results" button. -
New plugin infrastructure.
-
catsoop.ajaxrequestnow accepts a callback function that can be executed once the request has completed. -
More options for rendering pages (
content_onlyandraw_html).
CHANGED
-
Code is now released under version 2 of the Soopycat License.
-
Math expressions are now rerendered in all responses to AJAX calls.
-
Updated KaTeX to version 0.7.0
-
Updated MathJax to version 2.7.0
-
Python syntax highlighting updated.
-
Several improvements to WHDW and stats displays.
REMOVED
- Errors related to evaluating the expression are no longer displayed in the
pythonicquestion type.
FIXED
-
Allowed
pythonicquestion type to accept tuples without parentheses. -
Fixed issue with
expressionquestion type, withcsq_ratio_check = Trueandcsq_soln = 0. -
Switched to different CDN for loading Ace editor code.
-
Fixed an issue related to automatic locking when no answers have been viewed.
-
Fixed a regression related to rendering the answers to
multiplechoicequestions using thecheckboxrenderer. -
Fixed a regression related to answer checking in
multiplechoicequestions. -
Fixed issue related to improper handling of empty
<python>or<question>tags. -
Fixed issue related to incorrectly filtering user information when generating API tokens.
-
Fixed issues with type errors from decoding data URI's in the
pythoncodeandfileuploadquestion types. -
Fixed several issues related to invalid HTML output in response to
pythoncodesubmission. -
Fixed
source.zipgeneration to be more pedantic about when to re-build the file. -
Fixed rendering of questions via
'rerender'in the default handler. -
Fixed problem with trying to render a template from a context where not all variables are defined.
-
Fixed rendering of check/cross images in
expressionquestion type. -
Manual grading interface now displays more relevant feedback to the grader after submission (exactly the score and comments as the student will see them).
-
Fixed the display of answers to
pythoncodequestions so that syntax highlights properly. -
Fixed issue with processes not being properly closed with the Python sandbox.
SECURITY
- Fixed a regression that opened a XSS vulnerability in
pythoncodequestions.
DOCUMENTATION
- Use American spelling in documentation.
Version 9.2.0
ADDED
-
Added
render_single_questionto the default handler, for rendering a single question's contents. -
Added ability to customize how e-mail address is created from available information when using OpenID Connect.
-
Added the ability to override
get_group's section lookup and instead use the specified section. -
Added stats and whdw (Who Has Done What) actions to the default handler.
CHANGED
-
Better checks and display for
checkoffquestion type. -
Improved error handling in the
pythonicquestion type. -
Improved the formatting of HTML in the
pythoncodequestion type to prevent BeautifulSoup from modifying it too much. -
Noneis now a special category that is skipped when assigning groups. -
Improved formatting of answers to
pythoncodequestions. -
Cells in HTML tables are no longer automatically center-aligned.
-
Removed confusing answer display from
checkoffquestion type.
FIXED
-
Fixed a bug with
cs_path_infonot being defined in certain situations. -
Fixed the stylesheet so that pages can be printed again.
-
Fixed a bug with reporting error messages related to malformed questions.
-
Fixed a type error in
list_groupsthat prevented students' sections from being determined correctly. -
Brought the
richtextquestion type up to speed with current CAT-SOOP. -
Brought the
multiplechoicequestion type up to speed with current CAT-SOOP. -
Brought the
handouthandler up to speed with current CAT-SOOP and improved its error reporting. -
Fixed a regression that rendered
pythonliteralquestions unusable. -
Fixed a typo in
dispatch.pythat broke proper 404 handling of handouts. -
Fixed a regression with the permissions check for the "Save" button.
-
Several fixes for the
fileupload,richtext, andpythoncodequestion types. -
Prevented a misleading error message from being displayed when automatically viewing answers on a timed exercise.
-
Several fixes for
catsoop.tools.data_uri. -
Fixed a bug that prevented per-user randomness from functioning as expected.
-
Updated automatic source downloader to use
spoof_early_load, fixing a bug. -
Fixed a typo in the
checkoffquestion type.
Version 9.1.0
ADDED
-
Added
catsoop.path_infoto javascript (for groups). -
Added
cs_pre_handlefor normal use andpre_handle.pyfor plugins. -
The state of the context is now stored after every
preload.pyfile in the chain has been executed (incs_loader_states), to allow, e.g., looking up parents' names. -
Added "breadcrumbs" to the default theme.
-
Fleshed out the interactive group management page.
CHANGED
-
Navigational menu entries can now optionally be specified in a more straightforward (Pythonic) manner.
-
csq_names are now automatically assigned as part of the XML parsing step, rather than in the default handler. -
Changed "Are you sure you want to view the answer" dialog to use SweetAlert2.
-
Nicer-looking tables in default theme.
-
Added a more complete message to the "log in" box for OpenID Connect.
FIXED
-
Fixed bug with
cs_view_without_authflag. -
Fixed bug with listing groups.
-
Fixed bug with file locking stemming from a change in 9.0.0.
-
cs_post_loadand plugins' post-load hooks now fire at the right time (after<python>tags are evaluated). -
Fixed bug with additional files in the Python sandbox.
-
Fixed several bugs related to HTML parsing/display.
-
Internal Server Errors in AJAX callbacks now display an error message.
-
Fixed a bug that prevented saving entries to questions.
-
Fixed a bug that prevented reading user information from the
__USERS__directory fromcatsoop.util.read_user_file.
SECURITY
- Logins are no longer carried over between courses (user must log in to each course separately).
Version 9.0.0
ADDED
-
Added back the catsoopdb format (last seen in version 4.0.1), with improvements to prevent collisions and a few bugfixes.
-
Added BeautifulSoup to the distribution.
-
Included Bootstrap in the distribution, and updated the default theme to use it (also moved
main.templateandbase.csstoold.templateandold.css, respectively, to make room for new style). -
Added the
cs_base_colorvariable, for switching the main color of the default theme. -
Added syntax highlighting to code blocks, via highlight.js. If no language is explicitly specified for syntax highlighting, the value stored in
cs_default_code_languagewill be used (default is no syntax highlighting; explicitly setting that value toNonewill causehighlight.jsto guess the appropriate language for each block). -
Added support for authentication via OpenID Connect.
-
Added support for default courses via
cs_default_course. -
Added the
list_questionsandget_stateAPI endpoints to the default handler. -
Added an easier way to spoof context loading with
loader.spoof_early_load. -
Added
cslog.modify_most_recent, which updates the most recent log entry atomically. -
Added method for sending e-mail to a CAT-SOOP user from the API without knowing their e-mail address.
-
Added support for input checks and ratio checking (rather than absolute error checking) to the
expressionquestion type. -
Added
numberquestion type for single numbers (or simple fractions). -
Added
__PLUGINS__directory for plugins which work in ways other than defining a new QTYPE or handler (ability to affect the context before or after preload, before or after content load, and after handler is invoked).
CHANGED
-
CAT-SOOP is now only compatible with Python version 3.5+. Python 2 compatibility was dropped intentionally, but versions 3.0.0 <= x < 3.5 are not supported because CAT-SOOP does some strange things with imports.
-
CAT-SOOP no longer runs on Windows hosts.
-
Drastically improved inheritance for question types (requiring far less manual work) via
tutor.qtype_inherit. -
CAT-SOOP XML parsing is now largely handled by BeautifulSoup instead of by regular expressions.
-
Renamed
gb.py->base_context.pyto more accurately reflect its usage. -
Modified the
loginauthentication type to use Python's built-in implementation of PBKDF2. -
Changed the way authentication is handled in AJAX requests, in preparation for including the public-facing API.
-
Themes are now run through a pre-processor that handles
<python>and<printf>tags (including@{...}syntax). -
Passwords (in all forms) are now hashed both before and after being sent to the server (passwords are now never sent in plain-text).
-
Navigation links should now be held in
cs_top_menuinstead ofcs_navigation. -
<ref>tags can now take the relevant label aslabel="x"in addition to just asx. -
Improved error pages shown on 404 File Not Found.
-
Default permissions now include the
'view'permission. -
Modified the default "loading" spinner to use CSS instead of an image
-
csq_check_functioncan now return a dictionary mapping'score'to the score and'msg'to a message to be returned, eliminating the need forcsq_msg_functionwhen it is more convenent to compute the score and message at the same time. Alternatively, it can return a tuple(score, message). The old form is still supported. -
csq_msg_function, if used, can now optionally take a second argument representing the solution (the message doe not need to be computed from the submission alone). -
Replaced
"response"field with"message"in JSON returned by the default handler's AJAX calls, to avoid duplicate use of"response". -
A little easter egg: the CAT-SOOP cat changes when displaying a 404 or 500 error message.
-
Improved error reporting in
pythonicquestion type.
FIXED
-
Tracebacks in CAT-SOOP error messages now actually show useful information.
-
Pre-compiled CAT-SOOP (
.pycs) files' names now include the Python implementation's cache tag, so that the same course can be migrated to a CAT-SOOP instance running on a different version of Python without issue. -
Fixed a bug whereby an empty entry in a
multiplechoicequestion (--) was interpreted as being the last element in thecsq_optionslist. -
Missing files/directories are now always handled as 404 errors, rather than 500.
-
Fixed a bug resulting from a nonexistent
coursesdirectory. -
The
cs_post_loadhook is now invoked at a time whencs_contentis still relevant. -
Fixed bug with
expressionquestion type erroring when using multiple values for a variable. -
Prevented PLY from writing its parsing tables to disk.
SECURITY
-
Included the option to tune the number of iterations used with PBKDF2, and increased the default number of iterations from 50,000 to 250,000.
-
Minimum password length in the login authentication type is now 8 instead of 5, per the NIST recommendation at https://pages.nist.gov/800-63-3/sp800-63b.html
Version 8.0.0
ADDED
-
<label>and<ref>tags are now available, for easier referencing of sections within a CAT-SOOP page. -
Answers and explanations can now be automatically viewed in certain situations (running out of submissions, earning 100% score).
-
Added a check for non-ASCII characters in input, and an error message to be displayed in this case.
-
Most CAT-SOOP options related to the default handler can now be specified as functions that return the appropriate value, rather than the value itself, which allows them to be set in a way that depends on the current context.
-
Added a way to compute stats about a particular page (for use in making gradebooks).
-
Question types can now have multiple form fields by having names starting with
__QNAME__, whereQNAMEis the name of the question. -
The
multiplechoicequestion type has two new modes which allow for arbitrary formatting (including math) in the options:'checkbox', which allows multiple answers to be selected; and'radio', which allows only one answer to be selected. -
Added the
cs_debugfunction, which can be used to log arbitrary information to a file during execution of a preload or content file. -
Resources can now be loaded from arbitrarily-named files (e.g.,
<root>/path/to/foo.mdinstead of<root>/path/to/foo/content.md). -
In the
pythoncodequestion type, it is now possible to hide the code associated with test cases. -
Added
data_urimodule from https://gist.github.com/zacharyvoase/5538178 for better handling of file uploads. -
Users can now log in with their e-mail addresses instead of their usernames when using the
loginauthentication type. -
Permissions can now be specified directly via
cs_permissions, instead of exclusively via roles. -
The
pythoncodequestion type can now handle Python 3 code. -
Handlers and question types can now have viewable pages inside them, viewable at, for example,
<url_root>/__HANDLER__/default/page_name. -
Every page footer now links to both the terms of the license, and also to the "download source" link.
-
Added a module for sending e-mails, primarily for use in the
loginauthentication type. -
MathJax is now included directly, rather than loaded from their CDN.
CHANGED
-
Functions inside of question types no longer need to manually load default values; values from the defaults variable are automatically used when not specified inside the
<question>tag. -
The
loginauthentication type was much improved, including the option to send confirmation e-mails, change passwords, and recover lost passwords; and to customize the types of e-mail addresses that are accepted. -
Improved error reporting in the
loginauth type. -
The
cs_post_loadhook now executes before the page's handler is invoked, and a new hookcs_post_handlewas introduced, which is called after the handler is invoked. -
CAT-SOOP's handling of HTML tags is now case-insensitive.
-
The "view as" page was updated to show more accurately what the user in question would see.
-
Many options related to the default handler (primarily related to which actions should be allowed) are now specified on a per-question basis rather than a per-page basis.
-
Locking a user out of a problem has been separated from viewing the answer to that question.
-
Improved rendering in the
expressionquestion type. -
name_mapis now stored as an ordered dictionary. -
Results from the
pythonicquestion type are now evaluated in the question's scope, rather than in the question type's scope. -
The number of rows to be displayed in the ACE interface for coding questions is now customizable.
-
Answers in the
smallboxandbigboxquestion types are no longer wrapped in<tt></tt>. -
Markdown and/or custom XML, depending on the source type used, is now interpreted inside of answers and explanations (including math rendering).
-
All CAT-SOOP modules are now available inside of the source files for handlers and question types.
-
The
cs_scriptsstring is now injected into the template after jQuery, katex, MathJax, andcs_mathhave been loaded. -
Modified the generation of per-user random seeds to (eventually) allow for re-generating of random seeds.
-
Moved much of the Javascript code from the default handler to separate files.
-
Moved WSGI file and changed the way imports are handled in order to make sure everything can access the CAT-SOOP modules/subpackages.
-
Moved handling of
csq_promptout of individual question types and into the default handler to avoid duplicating code. -
Removed logo image from main page.
-
cs_source_formatis now inferred (rather than specified explicitly). -
In question type specifications,
handle_submissionnow returns a dictionary instead of a tuple. -
Restructured authentication types to make adding more types in the future easier.
-
Section labels are now rendered as id's of the associated headers.
FIXED
-
Fixed a bug whereby
$characters could not be escaped with backslash. -
Fixed issues with certain tags' internals being parsed as Markdown (
script,pre,question, etc). -
Trying to access a resource that doesn't exist on disk now gives a 404 error instead of crashing.
-
Fixed several bugs related to uploading multiple files in a single submission.
-
Spaces are now allowed in question names.
-
CAT-SOOP no longer crashes on a malformed
<question>, but rather displays an error message. -
Fixed an issue with intermittent WSGI failures by re-trying failed actions.
-
Updated MathJax to version 2.6.1 to fix a rendering issue in Chrome.
-
Updated the URL of the default Python sandbox to reflect changes in the CAT-SOOP web site.
-
Improved handling of query strings and fragment identifiers when rewriting URLs.
-
Improved handling of implicit multiplication in the
expressionquestion type. -
Added unary + to Python syntax in the
expressionquestion type. -
cslog.most_recentnow returns the default value when the log file does not exist, instead of crashing. -
Fixed handling of temporary files on Windows hosts.
-
Fixed validation of user information when registering under the
loginauthenatication type. -
Fixed several bugs with manual grading, reported from 6.02.
-
Log files are no longer created when trying to read from a nonexistent log.
-
Mercurial temporary files (
.orig) are now ignored in the zip generated when downloading the source. -
<pre>tags are now used instead of<tt>for wrapping answers in thepythoncodequestion type. -
Fixed an issue in the
pythoncodesandboxes whereby aMEMORYlimit of 0 actually allowed 0 bytes of heap storage, rather than unlimited. -
Prevent a crash if
<cs_data_root>/coursesdoes not exist. -
Modified to always use the local markdown package, even if one is installed globally, to make sure Markdown extensions are loaded properly.
-
Buttons are now re-enabled on page load, to prevent an issue whereby buttons would remain disabled after a refresh on Firefox.
SECURITY
-
PBKDF2 is now used for the
loginauthentication mode. -
Closed a XSS vulnerability in the
pythoncodequestion type. -
Closed a security hole in session handling that allowed for arbitrary code execution under certain circumstances by validating session ids and modifying the way session data are stored.
-
Fixed a bug that allowed logs to be accessed/created outside of the appropriate
__LOGS__directories.
Version 7.1.1
FIXED
- Fixed an issue that prevented the last question on each page from being displayed.
Version 7.1.0
ADDED
-
Added the option to grade questions manually, from 6.02 fall 2015.
-
Added a
richtextquestion type, which allows for formatting of text using CAT-SOOP-flavored Markdown. -
Added the
fileuploadquestion type, which allows users to upload arbitrary files. -
Added checks for valid configuration options.
CHANGED
- Rewrote the
expressionquestion type to use PLY for parsing, and included a default syntax for expressions that is more approachable to users not familiar with Python.
Version 7.0.1
FIXED
- Fixed a syntax error in the
expressionquestion type.
Version 7.0.0
ADDED
-
Included KaTeX.
-
Added three new handlers:
passthrough, which displayscs_contentwithout modification;raw_response, which allows sending a raw HTTP response; andredirect, for redirecting to other resources easily. -
Added support for Markdown as an alternative source format, and included python-markdown in the distribution.
-
Question type specifications can now include an arbitrary action (beyond saving/submitting) that will be executed when a user presses a new button.
-
Added support for streaming content (via returning a generator instead of a string), and for automatic streaming of large static files.
-
Added support for inline (runnable by users) test cases in
pythoncodequestion types. -
Added
cs_utilresources: time, which yields the current time (according to the server) for synchronization purposes;source.zip, which downloads a zip archive containing the CAT-SOOP source code; andlicense, which contains the text of CAT-SOOP's license. -
Added a
'string'mode to thepythonicquestion type, which allows the answer to be specified as a string to be evaluated. Also added thecsq_code_prevariable to this question type, for setting up the environment into which csq_soln will be evaluated in string mode.
CHANGED
-
Math rendering now uses KaTeX (fast, but limited support) when possible, and falls back to MathJax (slow, but more support) when necessary.
-
"Special" CAT-SOOP variables are now prefixed with
cs_(for page-specific values) orcsq_(for question-specific values) to prevent accidental shadowing -
Changed nomenclature: "activity type" -> "handler"
-
Complete rewrite of
defaulthandler. -
Reorganization of sandboxing for Python code.
-
gb.pyshould no longer be changed; rather, global configuration values should be overwritten viaconfig.py(which is loaded intogb.py) -
Improved handling of footnotes.
REMOVED
- Removed
jquery_typingplugin, which is no longer needed forexpressionquestions.
FIXED
-
Fixed bug with newline handling in CGI interface.
-
Fixed bugs related to static files when using the CGI interface running on Windows hosts.
-
The default theme now handles resizing of the containing window more smoothly.
STYLE
- Mostly embraced PEP8 style.
Version 6.0.0
ADDED
-
Added
post_loadhook, which is executed after the content file is loaded. -
Added support for XML as an additional source format, and set it to be the default format.
-
Change names
EARLY_LOAD.py->preload.pyandLATE_LOAD.py->content.xml. -
Added the
pythonliteralquestion type, which behaves much likepythonic, but requires that the submission be a literal value (rather than the result of a more complicated expression).
CHANGED
-
Modified handling of footnotes.
-
File containing user information should now end in .py (e.g.,
username.pyinstead of justusername). -
Reorganized
pythonquestion types to properly inherit from one another to avoid duplicate code.
REMOVED
- The
problemactivity type was removed, in favor ofajaxproblem.
FIXED
-
Fixed an issue where
last_submitwas keeping information only about the most recent submission overall, instead of the most recent submission for each question. -
The
__LOGS__directory will now be created if it does not exist, rather than crashing CAT-SOOP.
SECURITY
- Error messages now show less information, to avoid displaying sensitive information.
Version 5.0.0
ADDED
-
Added support for footnotes via
<footnote> -
Added support for page organization via
<section>,<subsection>, etc. -
The ability to save and submit are now controllable via special variables in the problem activity type.
-
Added a warning message upon clicking the 'view solution' button to indicate that users will not be able to submit after doing so. Also maintained the ability to bypass this check, for things like automatically submitting at the end of a timed exercise.
-
Added the
handoutactivity type, which allows for showing a static file, but with access controls (releasing after a particular date, only viewable by particular role, etc). -
Added support for displaying explanations in addition to answers in particular question types.
CHANGED
-
Logs are now stored in SQLite databases.
-
The logo in the main page is now displayed as text, rather than as an image.
-
Buttons in
ajaxproblemquestion types are now disabled before processing the request, to avoid multiple identical submissions from mis-clicks.
REMOVED
- Removed catsoopdb format, in favor of SQLite.
FIXED
-
Renamed
logging.pytocslog.pyto prevent accidentically importing Python's built-in logging module. -
Fixed rendering of math when viewing solution to an
expressionquestion. -
Scores are now properly handled in the
ajaxproblemactivity type. -
Fixed a bug with displaying the solution for
pythonicquestion types whose solutions are tuples. -
Fixed a bug with displaying the solution for
pythonicquestion types whose solutions are strings. -
Fixed a bug related to handling of dynamic pages in the
__BASE__course. -
Fixed numerous
ajaxproblembugs. -
Improved detection of static files.
SECURITY
- Error messages no longer show information about the location of CAT-SOOP (or the course in question) on disk
Version 4.0.1
FIXED
-
Fixed issue whereby a missing
EARLY_LOAD.pywould crash CAT-SOOP. -
Fixed bug with caching of static files.
-
Fixed bug related to authenticating in
loginmode.
REMOVED
- Removed rendering time from default template.
Version 4.0.0
ADDED
-
Added the
ajaxproblemactivity type, which allows submitting individual questions without reloading the entire page. Madeajaxproblemthe default activity type. -
Added support for skipping ahead or behind by weeks in relative timestrings, using + or - (e.g.,
M+:17:00means next Monday at 5pm). -
Solutions for individual students are now displayed when impersonating them.
-
Source for pages is now cached in a marshaled format, to prevent having to re-parse the source of pages that have not changed.
-
Added support for authenticating via login (username and password) rather than via client certificate.
-
Added support for per-user randomness (users see the same numbers upon returning to a page, but different users may see different numbers).
-
Added documentation (via
epydoc-compatible docstrings) throughout. -
CAT-SOOP now asks the browser to use cached versions of static files where appropriate.
-
Allowed question types and activity types to be specified in the course rather than in the base system.
CHANGED
- Changed internal nomenclature:
meta->contexteverywhere to represent the context in which a page is rendered.
REMOVED
- Removed several hard-coded references to
sicp-s2.mit.eduin the code.
FIXED
-
Fixed impersonation glitch whereby permissions were inherited from the impersonated user.
-
Fixed glaring bug with static file handling.
-
Fixed inheritance bug in the
pythonicquestion type.
Version 3.1.0
ADDED
-
Added WSGI interface (and moved main function elsewhere so WSGI and CGI can share code).
-
Questions are automatically given names if they were not explicitly given a name.
-
Question types and activity types are now pre-compiled to avoid having to re-parse them on every load.
Version 3.0.0
ADDED
-
problemactivities now store due dates, to account for changes in due date after submitting. -
Added support for the ACE code editor in
pythoncodequestions.
CHANGED
-
Separated loading from
METADATA.pyintoEARLY_LOAD.pyandLATE_LOAD.py.EARLY_LOADfiles are executed all the way down the source tree (for the sake of inheritance, as withMETADATA.py), but only theLATE_LOAD.pyassociated with the leaf node is executed (to allow some code execution to be avoided when working down the tree). -
Moved/improved impersonation code.
-
Refactored logging code.
-
Refactored main control loop.
FIXED
-
Better sandboxing of Python code.
-
Fixed an issue with
submitAscontrol for questions with randomness. -
Fixed handling of paths on Windows hosts.
-
Modified
expressionquestion type to be compatible with Python 2.6. -
Several bug fixes in
pythoncodequestion type.
SECURITY
- Prune out
'..'and'.'from URLs to avoid escaping the CAT-SOOP tree.
Version 2.0.0
Complete re-write. First version used in 6.01 (spring 2013). First version with any similarity to the current code.
Version 1.0.0
The original version, used in 6.003 fall 2011, and described in http://dspace.mit.edu/handle/1721.1/77086. This version has very little in common with later versions.