otter-service-stdalone 1.1.24__tar.gz → 1.1.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/PKG-INFO +1 -1
  2. otter_service_stdalone-1.1.26/src/otter_service_stdalone/__init__.py +1 -0
  3. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/app.py +6 -4
  4. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone.egg-info/PKG-INFO +1 -1
  5. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone.egg-info/SOURCES.txt +2 -1
  6. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/tests/test_upload_handle.py +4 -0
  7. otter_service_stdalone-1.1.26/tests/test_util.py +10 -0
  8. otter_service_stdalone-1.1.24/src/otter_service_stdalone/__init__.py +0 -1
  9. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/README.md +0 -0
  10. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/pyproject.toml +0 -0
  11. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/setup.cfg +0 -0
  12. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/access_sops_keys.py +0 -0
  13. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/fs_logging.py +0 -0
  14. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/grade_notebooks.py +0 -0
  15. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/index.html +0 -0
  16. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/scripts/web_socket.js +0 -0
  17. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/secrets/gh_key.dev.yaml +0 -0
  18. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/secrets/gh_key.local.yaml +0 -0
  19. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/secrets/gh_key.prod.yaml +0 -0
  20. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/secrets/gh_key.staging.yaml +0 -0
  21. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/static_files/README_DO_NOT_DISTRIBUTE.txt +0 -0
  22. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/static_templates/403.html +0 -0
  23. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/static_templates/500.html +0 -0
  24. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/upload_handle.py +0 -0
  25. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/user_auth.py +0 -0
  26. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone/util.py +0 -0
  27. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone.egg-info/dependency_links.txt +0 -0
  28. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone.egg-info/entry_points.txt +0 -0
  29. {otter_service_stdalone-1.1.24 → otter_service_stdalone-1.1.26}/src/otter_service_stdalone.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: otter_service_stdalone
3
- Version: 1.1.24
3
+ Version: 1.1.26
4
4
  Summary: Grading Service for Instructors using Otter Grader
5
5
  Home-page: https://github.com/sean-morris/otter-service-stdalone
6
6
  Author: Sean Morris
@@ -0,0 +1 @@
1
+ __version__ = "1.1.26"
@@ -3,6 +3,7 @@ import tornado.ioloop
3
3
  import tornado.web
4
4
  import tornado.auth
5
5
  import os
6
+ import re
6
7
  import uuid
7
8
  import tornado.websocket
8
9
  from otter_service_stdalone import fs_logging as log
@@ -37,7 +38,7 @@ class WebSocketHandler(tornado.websocket.WebSocketHandler):
37
38
  if user_id not in session_callbacks:
38
39
  session_callbacks[user_id] = tornado.ioloop.PeriodicCallback(lambda: self.send_results(user_id), 1000)
39
40
  session_callbacks[user_id].start()
40
-
41
+
41
42
  def on_message(self, message):
42
43
  pass # No action needed on incoming message
43
44
 
@@ -209,8 +210,8 @@ class Download(BaseHandler):
209
210
  zipF.write(f"{file_path}", f_path, compress_type=ZIP_DEFLATED)
210
211
  read_me = os.path.join(os.path.dirname(__file__), "static_files", "README_DO_NOT_DISTRIBUTE.txt")
211
212
  zipF.write(read_me, "README_DO_NOT_DISTRIBUTE.txt", compress_type=ZIP_DEFLATED)
212
-
213
- download_label = f"{download_code.split('-')[0]}-results.zip"
213
+
214
+ download_label = f"{'-'.join(download_code.split('-')[:-5])}-results.zip"
214
215
  self.set_header('Content-Type', 'application/octet-stream')
215
216
  self.set_header("Content-Description", "File Transfer")
216
217
  m = f"attachment; filename={download_label}"
@@ -255,7 +256,8 @@ class Upload(BaseHandler):
255
256
  if autograder is not None and notebooks is not None:
256
257
  log.write_logs(results_path, "Step 1: Upload accepted", "", "debug", log_debug)
257
258
  notebooks_fname = notebooks['filename']
258
- results_path = f"{os.path.splitext(notebooks_fname)[0]}-{results_path}"
259
+ sanitized_filename = re.sub(r"[ ,./\\\[\]{}()]]", "", os.path.splitext(notebooks_fname)[0])
260
+ results_path = f"{sanitized_filename}-{results_path}"
259
261
  notebooks_extn = os.path.splitext(notebooks_fname)[1]
260
262
  if notebooks_extn == ".zip":
261
263
  notebooks_name = results_path + notebooks_extn
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: otter_service_stdalone
3
- Version: 1.1.24
3
+ Version: 1.1.26
4
4
  Summary: Grading Service for Instructors using Otter Grader
5
5
  Home-page: https://github.com/sean-morris/otter-service-stdalone
6
6
  Author: Sean Morris
@@ -23,4 +23,5 @@ src/otter_service_stdalone/secrets/gh_key.staging.yaml
23
23
  src/otter_service_stdalone/static_files/README_DO_NOT_DISTRIBUTE.txt
24
24
  src/otter_service_stdalone/static_templates/403.html
25
25
  src/otter_service_stdalone/static_templates/500.html
26
- tests/test_upload_handle.py
26
+ tests/test_upload_handle.py
27
+ tests/test_util.py
@@ -51,6 +51,10 @@ def test_handle_one_notebook(resources):
51
51
  assert "tests/files" in uh.handle_one_notebook("tests/files/hw3.ipynb")
52
52
 
53
53
 
54
+ def test_period_in_notebook_name(resources):
55
+ assert "tests/files" in uh.handle_upload("tests/files/hw3.3.ipynb", "test-up-123")
56
+
57
+
54
58
  def test_handle_upload(resources):
55
59
  zip = "tests/files/hw3-submissions-only-notebooks.zip"
56
60
  mixed_zip = "tests/files/hw3-submissions-notebooks-zips-mixed.zip"
@@ -0,0 +1,10 @@
1
+ import otter_service_stdalone.util as util
2
+
3
+
4
+ def test_autograder_zip_version():
5
+ a1 = "tests/files/hw01-autograder_6_0_4.zip"
6
+ a2 = "tests/files/hw02-autograder_6_1_0.zip"
7
+ a3 = "tests/files/hw02-autograder_5_5_0.zip"
8
+ assert util.otter_version_correct(a1) is True
9
+ assert util.otter_version_correct(a2) is True
10
+ assert util.otter_version_correct(a3) is False
@@ -1 +0,0 @@
1
- __version__ = "1.1.24"