e2xauthoring 0.2.1__tar.gz → 0.3.0__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 (141) hide show
  1. e2xauthoring-0.3.0/.github/workflows/black.yml +10 -0
  2. e2xauthoring-0.3.0/.github/workflows/ruff.yml +8 -0
  3. e2xauthoring-0.3.0/.readthedocs.yaml +35 -0
  4. e2xauthoring-0.3.0/PKG-INFO +69 -0
  5. e2xauthoring-0.3.0/README.md +40 -0
  6. e2xauthoring-0.3.0/docs/requirements.txt +1 -0
  7. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/conf.py +25 -1
  8. e2xauthoring-0.2.1/docs/source/user_docs/highlights.rst → e2xauthoring-0.3.0/docs/source/index.rst +57 -6
  9. e2xauthoring-0.3.0/docs/source/setup/index.rst +8 -0
  10. e2xauthoring-0.3.0/docs/source/user_docs/img/add_tasks.png +0 -0
  11. e2xauthoring-0.3.0/docs/source/user_docs/img/assignments.png +0 -0
  12. e2xauthoring-0.3.0/docs/source/user_docs/img/choose_tasks_1.png +0 -0
  13. e2xauthoring-0.3.0/docs/source/user_docs/img/new_task.png +0 -0
  14. e2xauthoring-0.3.0/docs/source/user_docs/img/tasks.png +0 -0
  15. e2xauthoring-0.3.0/docs/source/user_docs/img/templates.png +0 -0
  16. e2xauthoring-0.3.0/docs/source/user_docs/img/worksheet_options.png +0 -0
  17. e2xauthoring-0.3.0/docs/source/user_docs/index.rst +12 -0
  18. e2xauthoring-0.3.0/e2xauthoring/__version__.py +1 -0
  19. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/app/handlers/apihandlers.py +1 -1
  20. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/app/handlers/base.py +42 -20
  21. e2xauthoring-0.3.0/e2xauthoring/app/templates/authoring/asset-manifest.json +10 -0
  22. e2xauthoring-0.3.0/e2xauthoring/app/templates/authoring/index.html +1 -0
  23. e2xauthoring-0.3.0/e2xauthoring/app/templates/authoring/static/favicon.ico +0 -0
  24. e2xauthoring-0.3.0/e2xauthoring/app/templates/authoring/static/js/main.b8047c0f.js +3 -0
  25. e2xauthoring-0.2.1/e2xauthoring/app/templates/authoring/static/js/main.b3c19960.js.LICENSE.txt → e2xauthoring-0.3.0/e2xauthoring/app/templates/authoring/static/js/main.b8047c0f.js.LICENSE.txt +6 -0
  26. e2xauthoring-0.3.0/e2xauthoring/app/templates/authoring/static/js/main.b8047c0f.js.map +1 -0
  27. e2xauthoring-0.3.0/e2xauthoring/dataclasses/__init__.py +18 -0
  28. e2xauthoring-0.3.0/e2xauthoring/dataclasses/gitstatus.py +12 -0
  29. e2xauthoring-0.3.0/e2xauthoring/dataclasses/jsondataclass.py +7 -0
  30. e2xauthoring-0.3.0/e2xauthoring/dataclasses/messages.py +17 -0
  31. e2xauthoring-0.3.0/e2xauthoring/dataclasses/pool.py +19 -0
  32. e2xauthoring-0.3.0/e2xauthoring/dataclasses/task.py +13 -0
  33. e2xauthoring-0.3.0/e2xauthoring/dataclasses/template.py +15 -0
  34. e2xauthoring-0.3.0/e2xauthoring/git/__init__.py +6 -0
  35. e2xauthoring-0.3.0/e2xauthoring/git/base.py +243 -0
  36. e2xauthoring-0.3.0/e2xauthoring/git/factory.py +34 -0
  37. e2xauthoring-0.3.0/e2xauthoring/git/gitrepo.py +67 -0
  38. e2xauthoring-0.3.0/e2xauthoring/git/utils.py +36 -0
  39. e2xauthoring-0.3.0/e2xauthoring/managers/taskmanager.py +55 -0
  40. e2xauthoring-0.3.0/e2xauthoring/managers/taskpoolmanager.py +38 -0
  41. e2xauthoring-0.3.0/e2xauthoring/managers/templatemanager.py +29 -0
  42. e2xauthoring-0.3.0/e2xauthoring/models/__init__.py +13 -0
  43. e2xauthoring-0.3.0/e2xauthoring/models/pool.py +177 -0
  44. e2xauthoring-0.3.0/e2xauthoring/models/poolcollection.py +134 -0
  45. e2xauthoring-0.3.0/e2xauthoring/models/task.py +206 -0
  46. e2xauthoring-0.3.0/e2xauthoring/models/template.py +82 -0
  47. e2xauthoring-0.3.0/e2xauthoring/models/templatecollection.py +93 -0
  48. e2xauthoring-0.3.0/e2xauthoring/patterns/__init__.py +3 -0
  49. e2xauthoring-0.3.0/e2xauthoring/patterns/observer.py +23 -0
  50. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/utils/notebookvariableextractor.py +2 -1
  51. e2xauthoring-0.3.0/e2xauthoring/utils/pathutils.py +37 -0
  52. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/package-lock.json +59 -6
  53. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/package.json +1 -1
  54. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/pyproject.toml +15 -2
  55. e2xauthoring-0.2.1/PKG-INFO +0 -29
  56. e2xauthoring-0.2.1/README.md +0 -5
  57. e2xauthoring-0.2.1/docs/source/index.rst +0 -37
  58. e2xauthoring-0.2.1/docs/source/user_docs/img/add_tasks.png +0 -0
  59. e2xauthoring-0.2.1/docs/source/user_docs/img/choose_tasks_1.png +0 -0
  60. e2xauthoring-0.2.1/docs/source/user_docs/img/new_task.png +0 -0
  61. e2xauthoring-0.2.1/docs/source/user_docs/img/worksheet_options.png +0 -0
  62. e2xauthoring-0.2.1/e2xauthoring/__version__.py +0 -1
  63. e2xauthoring-0.2.1/e2xauthoring/app/templates/authoring/asset-manifest.json +0 -10
  64. e2xauthoring-0.2.1/e2xauthoring/app/templates/authoring/index.html +0 -1
  65. e2xauthoring-0.2.1/e2xauthoring/app/templates/authoring/static/js/main.b3c19960.js +0 -3
  66. e2xauthoring-0.2.1/e2xauthoring/app/templates/authoring/static/js/main.b3c19960.js.map +0 -1
  67. e2xauthoring-0.2.1/e2xauthoring/managers/dataclasses/__init__.py +0 -49
  68. e2xauthoring-0.2.1/e2xauthoring/managers/taskmanager.py +0 -167
  69. e2xauthoring-0.2.1/e2xauthoring/managers/taskpoolmanager.py +0 -66
  70. e2xauthoring-0.2.1/e2xauthoring/managers/templatemanager.py +0 -69
  71. e2xauthoring-0.2.1/e2xauthoring/utils/gitutils.py +0 -188
  72. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/.github/workflows/sonarcloud.yml +0 -0
  73. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/.gitignore +0 -0
  74. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/.pre-commit-config.yaml +0 -0
  75. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/LICENSE +0 -0
  76. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/MANIFEST.in +0 -0
  77. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/Makefile +0 -0
  78. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/make.bat +0 -0
  79. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/setup/installation.rst +0 -0
  80. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/add_files.png +0 -0
  81. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/add_question.png +0 -0
  82. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/assignment_worksheets.drawio +0 -0
  83. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/assignment_worksheets.png +0 -0
  84. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/attachment_editor.png +0 -0
  85. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/autograded_code_question.png +0 -0
  86. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/diagram_question.png +0 -0
  87. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/diagram_question_rendered.png +0 -0
  88. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/freetext_question.png +0 -0
  89. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/make_worksheet.drawio +0 -0
  90. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/make_worksheet.png +0 -0
  91. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/manual_code_question.png +0 -0
  92. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/multiple_choice_question.png +0 -0
  93. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/multiple_choice_question_rendered.png +0 -0
  94. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/sample_template.png +0 -0
  95. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/sample_template_variables.png +0 -0
  96. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/single_choice_question.png +0 -0
  97. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/single_choice_question_rendered.png +0 -0
  98. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/upload_question_rendered.png +0 -0
  99. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/worksheet.png +0 -0
  100. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/worksheets.drawio +0 -0
  101. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/img/worksheets.png +0 -0
  102. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/pool.rst +0 -0
  103. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/questions.rst +0 -0
  104. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/task.rst +0 -0
  105. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/template.rst +0 -0
  106. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/docs/source/user_docs/worksheet.rst +0 -0
  107. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/__init__.py +0 -0
  108. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/app/__init__.py +0 -0
  109. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/app/authoring.py +0 -0
  110. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/app/handlers/handlers.py +0 -0
  111. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/assets/.gitignore +0 -0
  112. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/converters/__init__.py +0 -0
  113. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/converters/converter.py +0 -0
  114. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/converters/generateexercise.py +0 -0
  115. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/__init__.py +0 -0
  116. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/assignmentmanager.py +0 -0
  117. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/base.py +0 -0
  118. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presetmanager.py +0 -0
  119. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Code (Autograded).ipynb +0 -0
  120. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Code (Manual).ipynb +0 -0
  121. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Diagram.ipynb +0 -0
  122. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Freetext.ipynb +0 -0
  123. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Multiple Choice.ipynb +0 -0
  124. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Single Choice.ipynb +0 -0
  125. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/questions/Upload Files.ipynb +0 -0
  126. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/template/Footer.ipynb +0 -0
  127. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/template/Group Info.ipynb +0 -0
  128. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/template/Header.ipynb +0 -0
  129. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/presets/template/Student Info.ipynb +0 -0
  130. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/managers/worksheetmanager.py +0 -0
  131. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/__init__.py +0 -0
  132. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/addtaskheader.py +0 -0
  133. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/copyfiles.py +0 -0
  134. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/copynotebooks.py +0 -0
  135. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/filltemplate.py +0 -0
  136. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/generatetaskids.py +0 -0
  137. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/makeexercise.py +0 -0
  138. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/preprocessor.py +0 -0
  139. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/preprocessors/removeexercise.py +0 -0
  140. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/e2xauthoring/utils/__init__.py +0 -0
  141. {e2xauthoring-0.2.1 → e2xauthoring-0.3.0}/lerna.json +0 -0
@@ -0,0 +1,10 @@
1
+ name: Format with black
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ lint:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v3
10
+ - uses: psf/black@stable
@@ -0,0 +1,8 @@
1
+ name: Lint with Ruff
2
+ on: [ push, pull_request ]
3
+ jobs:
4
+ ruff:
5
+ runs-on: ubuntu-latest
6
+ steps:
7
+ - uses: actions/checkout@v3
8
+ - uses: chartboost/ruff-action@v1
@@ -0,0 +1,35 @@
1
+ # Read the Docs configuration file for Sphinx projects
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ # Required
5
+ version: 2
6
+
7
+ # Set the OS, Python version and other tools you might need
8
+ build:
9
+ os: ubuntu-22.04
10
+ tools:
11
+ python: "3.11"
12
+ # You can also specify other tool versions:
13
+ # nodejs: "20"
14
+ # rust: "1.70"
15
+ # golang: "1.20"
16
+
17
+ # Build documentation in the "docs/" directory with Sphinx
18
+ sphinx:
19
+ configuration: docs/source/conf.py
20
+ # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
21
+ # builder: "dirhtml"
22
+ # Fail on all warnings to avoid broken references
23
+ # fail_on_warning: true
24
+
25
+ # Optionally build your docs in additional formats such as PDF and ePub
26
+ # formats:
27
+ # - pdf
28
+ # - epub
29
+
30
+ # Optional but recommended, declare the Python requirements required
31
+ # to build your documentation
32
+ # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
33
+ python:
34
+ install:
35
+ - requirements: docs/requirements.txt
@@ -0,0 +1,69 @@
1
+ Metadata-Version: 2.3
2
+ Name: e2xauthoring
3
+ Version: 0.3.0
4
+ Summary: Authoring app for e2xgrader
5
+ Project-URL: Source, https://github.com/Digiklausur/e2xauthoring
6
+ Project-URL: Documentation, https://e2xauthoring.readthedocs.io/en/latest/
7
+ Project-URL: Issues, https://github.com/Digiklausur/e2xauthoring/issues
8
+ Project-URL: Pypi, https://pypi.org/project/e2xauthoring/
9
+ Author-email: Tim Metzler <tim.metzler@h-brs.de>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.7
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Requires-Python: >=3.7
18
+ Requires-Dist: e2xcore>=0.0.5
19
+ Requires-Dist: gitpython
20
+ Provides-Extra: dev
21
+ Requires-Dist: build; extra == 'dev'
22
+ Requires-Dist: hatchling; extra == 'dev'
23
+ Requires-Dist: pre-commit; extra == 'dev'
24
+ Requires-Dist: pydata-sphinx-theme; extra == 'dev'
25
+ Requires-Dist: sphinx; extra == 'dev'
26
+ Requires-Dist: tbump; extra == 'dev'
27
+ Requires-Dist: twine; extra == 'dev'
28
+ Description-Content-Type: text/markdown
29
+
30
+ # e2xauthoring
31
+ [![PyPi](https://img.shields.io/pypi/v/e2xauthoring)](https://pypi.org/project/e2xauthoring) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Docs](https://img.shields.io/readthedocs/e2xauthoring)](https://e2xauthoring.readthedocs.io)
32
+ ---
33
+
34
+ e2xauthoring is an add-on for e2xgrader that adds functionality for authoring assignments.
35
+ e2xauthoring streamlines assignment creation for nbgrader by utilizing reusable components known as *tasks* and *templates*.
36
+ Please refer to the [documenation](https://e2xauthoring.readthedocs.io) for further information.
37
+ ## Screenshots
38
+
39
+ Create a task from question presets:
40
+ ![new_task](docs/source/user_docs/img/new_task.png)
41
+
42
+ <br/>
43
+
44
+ Creating a worksheet from tasks and a template:
45
+ ![new_worksheet](docs/source/user_docs/img/worksheet_options.png)
46
+
47
+
48
+ ## Requirements
49
+
50
+ - e2xcore
51
+
52
+ ## Install
53
+
54
+ The add-on is automatically installed alongside e2xgrader.
55
+ To install it yourself, execute:
56
+
57
+ ```bash
58
+ pip install e2xauthoring
59
+ ```
60
+
61
+ ## Uninstall
62
+
63
+ To uninstall, execute:
64
+
65
+ ```bash
66
+ pip uninstall e2xauthoring
67
+ ```
68
+
69
+
@@ -0,0 +1,40 @@
1
+ # e2xauthoring
2
+ [![PyPi](https://img.shields.io/pypi/v/e2xauthoring)](https://pypi.org/project/e2xauthoring) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Docs](https://img.shields.io/readthedocs/e2xauthoring)](https://e2xauthoring.readthedocs.io)
3
+ ---
4
+
5
+ e2xauthoring is an add-on for e2xgrader that adds functionality for authoring assignments.
6
+ e2xauthoring streamlines assignment creation for nbgrader by utilizing reusable components known as *tasks* and *templates*.
7
+ Please refer to the [documenation](https://e2xauthoring.readthedocs.io) for further information.
8
+ ## Screenshots
9
+
10
+ Create a task from question presets:
11
+ ![new_task](docs/source/user_docs/img/new_task.png)
12
+
13
+ <br/>
14
+
15
+ Creating a worksheet from tasks and a template:
16
+ ![new_worksheet](docs/source/user_docs/img/worksheet_options.png)
17
+
18
+
19
+ ## Requirements
20
+
21
+ - e2xcore
22
+
23
+ ## Install
24
+
25
+ The add-on is automatically installed alongside e2xgrader.
26
+ To install it yourself, execute:
27
+
28
+ ```bash
29
+ pip install e2xauthoring
30
+ ```
31
+
32
+ ## Uninstall
33
+
34
+ To uninstall, execute:
35
+
36
+ ```bash
37
+ pip uninstall e2xauthoring
38
+ ```
39
+
40
+
@@ -0,0 +1 @@
1
+ pydata-sphinx-theme
@@ -9,7 +9,8 @@
9
9
  project = "e2xauthoring"
10
10
  copyright = "2023, Tim Metzler"
11
11
  author = "Tim Metzler"
12
- release = "0.2.1"
12
+ release = "0.3.0"
13
+ github_project_url = "https://github.com/Digiklausur/e2xauthoring"
13
14
 
14
15
  # -- General configuration ---------------------------------------------------
15
16
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -25,3 +26,26 @@ exclude_patterns = []
25
26
 
26
27
  html_theme = "pydata_sphinx_theme"
27
28
  html_static_path = ["_static"]
29
+
30
+ html_theme = "pydata_sphinx_theme"
31
+ html_theme_options = {
32
+ "icon_links": [
33
+ {
34
+ "name": "GitHub",
35
+ "url": "https://github.com/Digiklausur/e2xgrader",
36
+ "icon": "fa-brands fa-github",
37
+ }
38
+ ],
39
+ "use_edit_page_button": True,
40
+ "navbar_align": "left",
41
+ }
42
+
43
+ html_static_path = ["_static"]
44
+
45
+
46
+ html_context = {
47
+ "github_user": "DigiKlausur",
48
+ "github_repo": "e2xauthoring",
49
+ "github_version": "main",
50
+ "doc_path": "docs/source/",
51
+ }
@@ -1,7 +1,12 @@
1
- Highlights
2
- ==========
1
+ .. e2xauthoring documentation master file, created by
2
+ sphinx-quickstart on Tue Aug 22 15:54:37 2023.
3
+ You can adapt this file completely to your liking, but it should at least
4
+ contain the root `toctree` directive.
3
5
 
4
- e2xauthoring streamlines assignment creation for nbgrader by utilizing reusable components known as *tasks* and *templates*.
6
+ e2xauthoring Documentation
7
+ ==========================
8
+
9
+ Welcome to the **e2xauthoring** documentation site. e2xauthoring streamlines assignment creation for nbgrader by utilizing reusable components known as *tasks* and *templates*.
5
10
 
6
11
  * **Seamless Integration with e2xgrader:** e2xauthoring integrates with e2xgrader, enhancing the process of creating nbgrader assignments.
7
12
  * **Efficient Worksheet Creation:** Generate assignments by crafting Jupyter notebook-based worksheets, which serve as individual assignment units.
@@ -12,8 +17,54 @@ e2xauthoring streamlines assignment creation for nbgrader by utilizing reusable
12
17
  * **Version Control Ready:** Convert task pools into Git repositories, facilitating version control for collaboration and iteration.
13
18
  * **Worksheet Customization:** Assemble worksheets by selecting templates, filling variables, and picking tasks to include, tailoring assignments to specific needs.
14
19
 
15
- .. figure:: img/assignment_worksheets.png
16
- :alt: Structure of an assignment
20
+ Screenshots
21
+ -----------
22
+
23
+ To get a better idea of how e2xauthoring looks like, here are some screenshots.
24
+
25
+ .. figure:: user_docs/img/assignments.png
26
+ :alt: Assignments Page
27
+ :scale: 50%
28
+
29
+ Assignments
30
+
31
+ .. figure:: user_docs/img/tasks.png
32
+ :alt: Tasks Page
33
+ :scale: 50%
34
+
35
+ Tasks
36
+
37
+ .. figure:: user_docs/img/templates.png
38
+ :alt: Templates Page
39
+ :scale: 50%
40
+
41
+ Templates
42
+
43
+ .. figure:: user_docs/img/add_question.png
44
+ :alt: Creating a Task
45
+ :scale: 50%
46
+
47
+ Creating a Task
48
+
49
+ .. toctree::
50
+ :maxdepth: 2
51
+ :caption: User Documentation:
52
+
53
+ user_docs/index
54
+
55
+ .. toctree::
56
+ :maxdepth: 2
57
+ :caption: Setup:
58
+
59
+ setup/index
60
+
61
+
62
+
63
+
17
64
 
18
- Structure of an assignment created with e2xauthoring
65
+ Indices and tables
66
+ ==================
19
67
 
68
+ * :ref:`genindex`
69
+ * :ref:`modindex`
70
+ * :ref:`search`
@@ -0,0 +1,8 @@
1
+ ===============
2
+ Getting Started
3
+ ===============
4
+
5
+ .. toctree::
6
+ :maxdepth: 2
7
+
8
+ installation
@@ -0,0 +1,12 @@
1
+ ==================
2
+ User Documentation
3
+ ==================
4
+
5
+ .. toctree::
6
+ :maxdepth: 2
7
+
8
+ task
9
+ pool
10
+ questions
11
+ template
12
+ worksheet
@@ -0,0 +1 @@
1
+ __version__ = "0.3.0"
@@ -6,6 +6,7 @@ from jupyter_client.kernelspec import KernelSpecManager
6
6
  from nbgrader.server_extensions.formgrader.base import check_xsrf
7
7
  from tornado import web
8
8
 
9
+ from ...git import get_author, set_author
9
10
  from ...managers import (
10
11
  AssignmentManager,
11
12
  PresetManager,
@@ -14,7 +15,6 @@ from ...managers import (
14
15
  TemplateManager,
15
16
  WorksheetManager,
16
17
  )
17
- from ...utils.gitutils import get_author, set_author
18
18
  from .base import ApiManageHandler
19
19
 
20
20
 
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import inspect
2
3
  from typing import List
3
4
 
@@ -5,7 +6,7 @@ from e2xcore.handlers import E2xApiHandler
5
6
  from nbgrader.server_extensions.formgrader.base import check_xsrf
6
7
  from tornado import web
7
8
 
8
- from e2xauthoring.managers.dataclasses import ErrorMessage, SuccessMessage
9
+ from ...dataclasses import ErrorMessage, SuccessMessage
9
10
 
10
11
 
11
12
  def status_msg(method):
@@ -17,14 +18,26 @@ def status_msg(method):
17
18
  method: The method to decorate
18
19
  """
19
20
 
20
- def wrapper(*args, **kwargs):
21
- try:
22
- res = method(*args, **kwargs)
23
- return SuccessMessage(data=res)
24
- except Exception as e:
25
- return ErrorMessage(error=getattr(e, "message", str(e)))
21
+ if asyncio.iscoroutinefunction(method):
26
22
 
27
- return wrapper
23
+ async def async_wrapper(*args, **kwargs):
24
+ try:
25
+ res = await method(*args, **kwargs)
26
+ return SuccessMessage(data=res)
27
+ except Exception as e:
28
+ return ErrorMessage(error=getattr(e, "message", str(e)))
29
+
30
+ return async_wrapper
31
+ else:
32
+
33
+ def wrapper(*args, **kwargs):
34
+ try:
35
+ res = method(*args, **kwargs)
36
+ return SuccessMessage(data=res)
37
+ except Exception as e:
38
+ return ErrorMessage(error=getattr(e, "message", str(e)))
39
+
40
+ return wrapper
28
41
 
29
42
 
30
43
  class ApiManageHandler(E2xApiHandler):
@@ -59,16 +72,21 @@ class ApiManageHandler(E2xApiHandler):
59
72
  params[arg] = argument
60
73
  return params
61
74
 
62
- def perform_action(self, action: str, allowed_actions: List[str]):
75
+ async def perform_action(self, action: str, allowed_actions: List[str]):
63
76
  assert (
64
77
  action is not None and action in allowed_actions
65
78
  ), f"Action {action} is not a valid action."
66
79
  method = getattr(self.__manager, action)
67
80
  arguments = self.extract_arguments(method)
68
- return method(**arguments)
81
+
82
+ # If the method is async, await it, otherwise call it synchronously
83
+ if inspect.iscoroutinefunction(method):
84
+ return await method(**arguments)
85
+ else:
86
+ return method(**arguments)
69
87
 
70
88
  @status_msg
71
- def handle_request(self, request_type: str):
89
+ async def handle_request(self, request_type: str):
72
90
  action = self.get_argument(
73
91
  "action", default=None # self.__allowed_actions[request_type]["default"]
74
92
  )
@@ -77,26 +95,30 @@ class ApiManageHandler(E2xApiHandler):
77
95
  "action", self.__allowed_actions[request_type]["default"]
78
96
  )
79
97
 
80
- return self.perform_action(
98
+ return await self.perform_action(
81
99
  action, self.__allowed_actions[request_type]["actions"]
82
100
  )
83
101
 
84
102
  @web.authenticated
85
103
  @check_xsrf
86
- def get(self):
87
- self.finish(self.handle_request("get").json())
104
+ async def get(self):
105
+ result = await self.handle_request("get")
106
+ self.finish(result.to_json())
88
107
 
89
108
  @web.authenticated
90
109
  @check_xsrf
91
- def delete(self):
92
- self.finish(self.handle_request("delete").json())
110
+ async def delete(self):
111
+ result = await self.handle_request("delete")
112
+ self.finish(result.to_json())
93
113
 
94
114
  @web.authenticated
95
115
  @check_xsrf
96
- def put(self):
97
- self.finish(self.handle_request("put").json())
116
+ async def put(self):
117
+ result = await self.handle_request("put")
118
+ self.finish(result.to_json())
98
119
 
99
120
  @web.authenticated
100
121
  @check_xsrf
101
- def post(self):
102
- self.finish(self.handle_request("post").json())
122
+ async def post(self):
123
+ result = await self.handle_request("post")
124
+ self.finish(result.to_json())
@@ -0,0 +1,10 @@
1
+ {
2
+ "files": {
3
+ "main.js": "/e2x/authoring/static/js/main.b8047c0f.js",
4
+ "index.html": "/e2x/authoring/index.html",
5
+ "main.b8047c0f.js.map": "/e2x/authoring/static/js/main.b8047c0f.js.map"
6
+ },
7
+ "entrypoints": [
8
+ "static/js/main.b8047c0f.js"
9
+ ]
10
+ }
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="{{base_url}}/e2x/authoring/static/favicon.ico"><title>e²xauthoring</title><script type="text/javascript">window.base_url="{{ base_url }}",window.url_prefix="{{ url_prefix }}",window.webpackstuff="/e2x/authoring/static/js/main.b8047c0f.js"</script><script defer="defer" src="{{base_url}}/e2x/authoring/static/js/main.b8047c0f.js"></script>{%- block head -%} {%- endblock -%}</head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>