.gitignore
.gitmodules
.mypy.ini
.pylintrc
.secrets
LICENSE
README.md
pyproject.toml
requirements-dev.txt
requirements.txt
sample-edq-lms.json
.github/workflows/main.yml
docs/development.md
edq_lms_toolkit.egg-info/PKG-INFO
edq_lms_toolkit.egg-info/SOURCES.txt
edq_lms_toolkit.egg-info/dependency_links.txt
edq_lms_toolkit.egg-info/requires.txt
edq_lms_toolkit.egg-info/top_level.txt
lms/__init__.py
lms/py.typed
lms/backend/__init__.py
lms/backend/instance.py
lms/backend/testing.py
lms/backend/blackboard/__init__.py
lms/backend/blackboard/backend.py
lms/backend/blackboard/backend_test.py
lms/backend/blackboard/model.py
lms/backend/canvas/__init__.py
lms/backend/canvas/backend.py
lms/backend/canvas/backend_test.py
lms/backend/canvas/common.py
lms/backend/canvas/model.py
lms/backend/canvas/courses/__init__.py
lms/backend/canvas/courses/list.py
lms/backend/canvas/courses/assignments/__init__.py
lms/backend/canvas/courses/assignments/list.py
lms/backend/canvas/courses/assignments/scores/__init__.py
lms/backend/canvas/courses/assignments/scores/list.py
lms/backend/canvas/courses/assignments/scores/upload.py
lms/backend/canvas/courses/gradebook/__init__.py
lms/backend/canvas/courses/gradebook/fetch.py
lms/backend/canvas/courses/groups/__init__.py
lms/backend/canvas/courses/groups/create.py
lms/backend/canvas/courses/groups/delete.py
lms/backend/canvas/courses/groups/list.py
lms/backend/canvas/courses/groups/memberships/__init__.py
lms/backend/canvas/courses/groups/memberships/add.py
lms/backend/canvas/courses/groups/memberships/list.py
lms/backend/canvas/courses/groups/memberships/subtract.py
lms/backend/canvas/courses/groupsets/__init__.py
lms/backend/canvas/courses/groupsets/create.py
lms/backend/canvas/courses/groupsets/delete.py
lms/backend/canvas/courses/groupsets/list.py
lms/backend/canvas/courses/groupsets/memberships/__init__.py
lms/backend/canvas/courses/groupsets/memberships/list.py
lms/backend/canvas/courses/syllabus/__init__.py
lms/backend/canvas/courses/syllabus/fetch.py
lms/backend/canvas/courses/users/__init__.py
lms/backend/canvas/courses/users/list.py
lms/backend/canvas/courses/users/scores/__init__.py
lms/backend/canvas/courses/users/scores/list.py
lms/backend/moodle/__init__.py
lms/backend/moodle/backend.py
lms/backend/moodle/backend_test.py
lms/backend/testdata/backendtests/__init__.py
lms/backend/testdata/backendtests/courses/__init__.py
lms/backend/testdata/backendtests/courses/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/get_backendtest.py
lms/backend/testdata/backendtests/courses/list_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/__init__.py
lms/backend/testdata/backendtests/courses/assignments/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/get_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/list_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/scores/__init__.py
lms/backend/testdata/backendtests/courses/assignments/scores/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/scores/get_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/scores/list_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/scores/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/scores/resolve_and_upload_backendtest.py
lms/backend/testdata/backendtests/courses/assignments/scores/upload_backendtest.py
lms/backend/testdata/backendtests/courses/gradebook/__init__.py
lms/backend/testdata/backendtests/courses/gradebook/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/gradebook/get_backendtest.py
lms/backend/testdata/backendtests/courses/gradebook/list_backendtest.py
lms/backend/testdata/backendtests/courses/gradebook/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/gradebook/upload_backendtest.py
lms/backend/testdata/backendtests/courses/groups/__init__.py
lms/backend/testdata/backendtests/courses/groups/create_backendtest.py
lms/backend/testdata/backendtests/courses/groups/delete_backendtest.py
lms/backend/testdata/backendtests/courses/groups/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/groups/get_backendtest.py
lms/backend/testdata/backendtests/courses/groups/list_backendtest.py
lms/backend/testdata/backendtests/courses/groups/resolve_and_create_backendtest.py
lms/backend/testdata/backendtests/courses/groups/resolve_and_delete_backendtest.py
lms/backend/testdata/backendtests/courses/groups/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/__init__.py
lms/backend/testdata/backendtests/courses/groups/memberships/add_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/list_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/resolve_and_add_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/resolve_and_set_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/resolve_and_subtract_backendtest.py
lms/backend/testdata/backendtests/courses/groups/memberships/subtract_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/__init__.py
lms/backend/testdata/backendtests/courses/groupsets/create_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/delete_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/get_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/list_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/resolve_and_create_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/resolve_and_delete_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/memberships/__init__.py
lms/backend/testdata/backendtests/courses/groupsets/memberships/list_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/memberships/resolve_and_add_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/memberships/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/memberships/resolve_and_set_backendtest.py
lms/backend/testdata/backendtests/courses/groupsets/memberships/resolve_and_subtract_backendtest.py
lms/backend/testdata/backendtests/courses/syllabus/__init__.py
lms/backend/testdata/backendtests/courses/syllabus/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/syllabus/get_backendtest.py
lms/backend/testdata/backendtests/courses/users/__init__.py
lms/backend/testdata/backendtests/courses/users/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/users/get_backendtest.py
lms/backend/testdata/backendtests/courses/users/list_backendtest.py
lms/backend/testdata/backendtests/courses/users/resolve_and_list_backendtest.py
lms/backend/testdata/backendtests/courses/users/scores/__init__.py
lms/backend/testdata/backendtests/courses/users/scores/fetch_backendtest.py
lms/backend/testdata/backendtests/courses/users/scores/get_backendtest.py
lms/backend/testdata/backendtests/courses/users/scores/list_backendtest.py
lms/backend/testdata/backendtests/courses/users/scores/resolve_and_list_backendtest.py
lms/backend/testdata/cli/data/gradebooks/extracourse_badscore.txt
lms/backend/testdata/cli/data/gradebooks/extracourse_base.txt
lms/backend/testdata/cli/data/gradebooks/extracourse_longuser.txt
lms/backend/testdata/cli/data/gradebooks/extracourse_missing.txt
lms/backend/testdata/cli/data/gradebooks/extracourse_shortheader.txt
lms/backend/testdata/cli/data/gradebooks/extracourse_shortuser.txt
lms/backend/testdata/cli/data/groups/groupsets_add_base.txt
lms/backend/testdata/cli/data/groups/groupsets_add_noheader.txt
lms/backend/testdata/cli/data/groups/groupsets_set_base.txt
lms/backend/testdata/cli/data/groups/groupsets_set_create_delete.txt
lms/backend/testdata/cli/data/groups/groupsets_set_empty.txt
lms/backend/testdata/cli/data/groups/groupsets_set_move.txt
lms/backend/testdata/cli/data/groups/groupsets_subtract_base.txt
lms/backend/testdata/cli/data/groups/groupsets_subtract_noheader.txt
lms/backend/testdata/cli/data/scores/course101_hw0_base.txt
lms/backend/testdata/cli/data/scores/course101_hw0_comment.txt
lms/backend/testdata/cli/data/scores/course101_hw0_emptylines.txt
lms/backend/testdata/cli/data/scores/course101_hw0_emptyvalue.txt
lms/backend/testdata/cli/data/scores/course101_hw0_longline.txt
lms/backend/testdata/cli/data/scores/course101_hw0_nan.txt
lms/backend/testdata/cli/data/scores/course101_hw0_noheader.txt
lms/backend/testdata/cli/data/scores/course101_hw0_shortline.txt
lms/backend/testdata/cli/data/scores/extracourse_assignment1_base.txt
lms/backend/testdata/cli/tests/list_formatting_empty_json.txt
lms/backend/testdata/cli/tests/list_formatting_empty_table.txt
lms/backend/testdata/cli/tests/list_formatting_empty_text.txt
lms/backend/testdata/cli/tests/list_formatting_json.txt
lms/backend/testdata/cli/tests/list_formatting_table_headers.txt
lms/backend/testdata/cli/tests/list_formatting_table_noheaders.txt
lms/backend/testdata/cli/tests/list_formatting_table_prettyheaders.txt
lms/backend/testdata/cli/tests/list_formatting_text_headers.txt
lms/backend/testdata/cli/tests/list_formatting_text_noheaders.txt
lms/backend/testdata/cli/tests/list_formatting_text_prettyheaders.txt
lms/backend/testdata/cli/tests/version_base.txt
lms/backend/testdata/cli/tests/courses/get_base.txt
lms/backend/testdata/cli/tests/courses/get_empty.txt
lms/backend/testdata/cli/tests/courses/list_base.txt
lms/backend/testdata/cli/tests/courses/assignments/get_base.txt
lms/backend/testdata/cli/tests/courses/assignments/get_empty.txt
lms/backend/testdata/cli/tests/courses/assignments/get_nocourse.txt
lms/backend/testdata/cli/tests/courses/assignments/list_base.txt
lms/backend/testdata/cli/tests/courses/assignments/list_nocourse.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/get_base.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/get_empty.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/get_noassignment.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/list_base.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/list_noassignment.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload-score_base.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload-score_missassignment.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload-score_misscourse.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload-score_missuser.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_base.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_comment.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_emptylines.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_emptyvalue.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_longline.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_nan.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_noheader.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_course101_hw0_shortline.txt
lms/backend/testdata/cli/tests/courses/assignments/scores/upload_extracourse_assignment1_base.txt
lms/backend/testdata/cli/tests/courses/gradebook/get_base.txt
lms/backend/testdata/cli/tests/courses/gradebook/get_empty.txt
lms/backend/testdata/cli/tests/courses/gradebook/get_miss.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_1_base.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_1_formatting_json.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_1_formatting_table.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_1_formatting_text.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_1_nocourse.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_2_base.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_2_formatting_table.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_3_base.txt
lms/backend/testdata/cli/tests/courses/gradebook/list_3_formatting_table.txt
lms/backend/testdata/cli/tests/courses/gradebook/upload_extracourse_badscore.txt
lms/backend/testdata/cli/tests/courses/gradebook/upload_extracourse_base.txt
lms/backend/testdata/cli/tests/courses/gradebook/upload_extracourse_longuser.txt
lms/backend/testdata/cli/tests/courses/gradebook/upload_extracourse_missing.txt
lms/backend/testdata/cli/tests/courses/gradebook/upload_extracourse_shortheader.txt
lms/backend/testdata/cli/tests/courses/gradebook/upload_extracourse_shortuser.txt
lms/backend/testdata/cli/tests/courses/groups/create_base.txt
lms/backend/testdata/cli/tests/courses/groups/delete_base.txt
lms/backend/testdata/cli/tests/courses/groups/delete_missing.txt
lms/backend/testdata/cli/tests/courses/groups/get_base.txt
lms/backend/testdata/cli/tests/courses/groups/get_empty.txt
lms/backend/testdata/cli/tests/courses/groups/get_nocourse.txt
lms/backend/testdata/cli/tests/courses/groups/list_base.txt
lms/backend/testdata/cli/tests/courses/groups/list_nocourse.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/add_base.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/add_multiple.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/list_base.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/set_base.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/set_empty.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/set_multiple.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/subtract_base.txt
lms/backend/testdata/cli/tests/courses/groups/memeberships/subtract_multiple.txt
lms/backend/testdata/cli/tests/courses/groupsets/create_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/delete_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/delete_missing.txt
lms/backend/testdata/cli/tests/courses/groupsets/get_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/get_empty.txt
lms/backend/testdata/cli/tests/courses/groupsets/get_nocourse.txt
lms/backend/testdata/cli/tests/courses/groupsets/list_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/list_nocourse.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/add_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/add_noheader.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/list_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/set_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/set_create_delete.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/set_empty.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/set_move.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/subtract_base.txt
lms/backend/testdata/cli/tests/courses/groupsets/memeberships/subtract_noheader.txt
lms/backend/testdata/cli/tests/courses/syllabus/get_base.txt
lms/backend/testdata/cli/tests/courses/syllabus/get_empty.txt
lms/backend/testdata/cli/tests/courses/syllabus/get_miss.txt
lms/backend/testdata/cli/tests/courses/users/get_base.txt
lms/backend/testdata/cli/tests/courses/users/get_empty.txt
lms/backend/testdata/cli/tests/courses/users/get_nocourse.txt
lms/backend/testdata/cli/tests/courses/users/list_base.txt
lms/backend/testdata/cli/tests/courses/users/list_nocourse.txt
lms/backend/testdata/cli/tests/courses/users/scores/get_base.txt
lms/backend/testdata/cli/tests/courses/users/scores/get_empty.txt
lms/backend/testdata/cli/tests/courses/users/scores/get_nouser.txt
lms/backend/testdata/cli/tests/courses/users/scores/list_base.txt
lms/backend/testdata/cli/tests/courses/users/scores/list_nouser.txt
lms/cli/__init__.py
lms/cli/__main__.py
lms/cli/common.py
lms/cli/parser.py
lms/cli/config/__init__.py
lms/cli/config/__main__.py
lms/cli/config/list.py
lms/cli/courses/__init__.py
lms/cli/courses/__main__.py
lms/cli/courses/get.py
lms/cli/courses/list.py
lms/cli/courses/assignments/__init__.py
lms/cli/courses/assignments/__main__.py
lms/cli/courses/assignments/get.py
lms/cli/courses/assignments/list.py
lms/cli/courses/assignments/scores/__init__.py
lms/cli/courses/assignments/scores/__main__.py
lms/cli/courses/assignments/scores/get.py
lms/cli/courses/assignments/scores/list.py
lms/cli/courses/assignments/scores/upload-score.py
lms/cli/courses/assignments/scores/upload.py
lms/cli/courses/gradebook/__init__.py
lms/cli/courses/gradebook/__main__.py
lms/cli/courses/gradebook/get.py
lms/cli/courses/gradebook/list.py
lms/cli/courses/gradebook/upload.py
lms/cli/courses/groups/__init__.py
lms/cli/courses/groups/__main__.py
lms/cli/courses/groups/create.py
lms/cli/courses/groups/delete.py
lms/cli/courses/groups/get.py
lms/cli/courses/groups/list.py
lms/cli/courses/groups/memberships/__init__.py
lms/cli/courses/groups/memberships/__main__.py
lms/cli/courses/groups/memberships/add.py
lms/cli/courses/groups/memberships/list.py
lms/cli/courses/groups/memberships/set.py
lms/cli/courses/groups/memberships/subtract.py
lms/cli/courses/groupsets/__init__.py
lms/cli/courses/groupsets/__main__.py
lms/cli/courses/groupsets/create.py
lms/cli/courses/groupsets/delete.py
lms/cli/courses/groupsets/get.py
lms/cli/courses/groupsets/list.py
lms/cli/courses/groupsets/memberships/__init__.py
lms/cli/courses/groupsets/memberships/__main__.py
lms/cli/courses/groupsets/memberships/add.py
lms/cli/courses/groupsets/memberships/common.py
lms/cli/courses/groupsets/memberships/list.py
lms/cli/courses/groupsets/memberships/set.py
lms/cli/courses/groupsets/memberships/subtract.py
lms/cli/courses/syllabus/__init__.py
lms/cli/courses/syllabus/__main__.py
lms/cli/courses/syllabus/get.py
lms/cli/courses/users/__init__.py
lms/cli/courses/users/__main__.py
lms/cli/courses/users/get.py
lms/cli/courses/users/list.py
lms/cli/courses/users/scores/__init__.py
lms/cli/courses/users/scores/__main__.py
lms/cli/courses/users/scores/get.py
lms/cli/courses/users/scores/list.py
lms/cli/lib/__init__.py
lms/cli/lib/__main__.py
lms/cli/lib/generate-test-data.py
lms/cli/lib/verify-test-data.py
lms/cli/lib/version.py
lms/cli/server/__init__.py
lms/cli/server/__main__.py
lms/cli/server/identify.py
lms/model/__init__.py
lms/model/assignments.py
lms/model/backend.py
lms/model/base.py
lms/model/base_test.py
lms/model/constants.py
lms/model/courses.py
lms/model/groups.py
lms/model/groupsets.py
lms/model/query.py
lms/model/query_test.py
lms/model/scores.py
lms/model/users.py
lms/model/testdata/__init__.py
lms/model/testdata/assignments.py
lms/model/testdata/courses.py
lms/model/testdata/groups.py
lms/model/testdata/groupsets.py
lms/model/testdata/scores.py
lms/model/testdata/users.py
lms/testing/__init__.py
lms/testing/serverrunner.py
lms/testing/testdata.py
lms/util/__init__.py
lms/util/net.py
lms/util/parse.py
lms/util/string.py
lms/util/testing.py
scripts/build_site.sh
scripts/check_all.sh
scripts/check_lint.sh
scripts/check_python_version.sh
scripts/check_strict_types.sh
scripts/check_types.sh
scripts/gen_docs.sh
scripts/run_tests.sh
scripts/template/html/index.html
scripts/template/html/css/style.css
scripts/template/html/images/favicon.png
testdata/__init__.py