From 2dc2d58c36d012200add5268076bd4e8093ac624 Mon Sep 17 00:00:00 2001 From: Tim Daniel Metzler Date: Tue, 29 Aug 2023 14:00:55 +0200 Subject: [PATCH] Improve app example --- docs/source/extensions/apps.rst | 118 ++++++++++++++++-- docs/source/extensions/img/convert_grades.png | Bin 0 -> 37523 bytes 2 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 docs/source/extensions/img/convert_grades.png diff --git a/docs/source/extensions/apps.rst b/docs/source/extensions/apps.rst index d66985a7..1d2e3954 100644 --- a/docs/source/extensions/apps.rst +++ b/docs/source/extensions/apps.rst @@ -23,7 +23,8 @@ The layout of the app is: └── grade_converter ├── app.py ├── handlers.py - └── templates + └── templates + ├── base.tpl └── convert_grades.tpl The Basic App @@ -79,7 +80,7 @@ Let's start by looking at the file `app.py`. The grading scheme can be configured via the `grading_scheme` trait. **e2xgrader** will call the `load_app` method when loading the app. Here we first start by putting the grading scheme in the tornado settings, making it accessible anywhere. -Then we add the handlers defined in `handlers.py`. Finally we add a template from `templates/convert_grades.tpl`. +Then we add the handlers defined in `handlers.py`. Finally we add the templates. The Handlers ~~~~~~~~~~~~ @@ -142,6 +143,28 @@ Let's define the handlers next. The file `handlers.py` looks like this: Template ~~~~~~~~ +If we want to create a link in the nbgrader formgrader sidebar, we have to change the base template ``base.tpl``. +This template is located at ``e2xgrader/e2xgrader/server_extensions/apps/formgrader/templates/base.tpl``. + +We copy the template and change the lines concerning the sidebar: + +.. code-block:: jinja + :caption: base.tpl + + ... + + {%- block sidebar -%} + + + + + + + {%- endblock -%} + + ... + + Next we define a very simple template in which we can move a slider to select the percentage and convert it with a click of a button. .. code-block:: jinja @@ -153,17 +176,57 @@ Next we define a very simple template in which we can move a slider to select th Convert Grades {%- endblock -%} + {%- block sidebar -%} + {{ super() }} + + {%- endblock -%} + {%- block table_body -%} -
-
+ +
- -
+
+
- -
+
+ +
+
+

+
+ + {%- endblock -%} Make the App Installable @@ -219,6 +282,41 @@ Now we need to activate the app in the `nbgrader_config.py`. We decide the app s configure_base(c) # Add the app in teacher mode - c.TeacherExtension.apps.append(GradeConverter) + # We need to add it as the first app since we want to overwrite base.tpl + # If you give multiple directories with templates with the same name to jinja, + # the first one will take precedence. + c.TeacherExtension.apps.insert(0, GradeConverter) + +You can try it out by starting the Jupyter notebook server and opening the formgrader tab. Then click on the "Convert Grades" link in the sidebar. + +.. figure:: img/convert_grades.png + :alt: The convert grades app + + The GradeConverter app in action + +Configuring the App +~~~~~~~~~~~~~~~~~~~ + +We can now easily change the grading scheme via the ``nbgrader_config.py``. + +.. code-block:: python + :caption: nbgrader_config.py + + # nbgrader_config.py + + from e2xgrader.config import configure_base + from grade_converter.app import GradeConverter + + c = get_config() + configure_base(c) + + # Configure the grading scheme + c.GradeConverter.grading_scheme = { + "great": 0.9, + "good": 0.8, + "okay": 0.7, + "average": 0.6, + "fail": 0.0 + } -You can try it out by starting the Jupyter notebook server and navigating to `/e2x/convert/app/`. \ No newline at end of file + # ... diff --git a/docs/source/extensions/img/convert_grades.png b/docs/source/extensions/img/convert_grades.png new file mode 100644 index 0000000000000000000000000000000000000000..e2177c259960d44bb56db940e9ad03abeaed62f5 GIT binary patch literal 37523 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 literal 0 HcmV?d00001