Coverage for e2xgrader/server_extensions/apps/nbgraderapi/nbgraderapi.py: 31%
29 statements
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
1import os
3from e2xcore import BaseApp
4from nbgrader.apps.baseapp import NbGrader
5from nbgrader.server_extensions.formgrader.apihandlers import default_handlers
8class NbGraderApi(NbGrader, BaseApp):
9 def __init__(self, **kwargs):
10 NbGrader.__init__(self, **kwargs)
11 BaseApp.__init__(self, **kwargs)
12 if self.parent.name == "jupyter-notebook":
13 self.root_dir = self.parent.notebook_dir
14 else:
15 self.root_dir = self.parent.root_dir
17 @property
18 def url_prefix(self):
19 relpath = os.path.relpath(self.coursedir.root, self.root_dir)
20 return relpath
22 def load_app(self):
23 self.log.info("Loading the nbgrader api app")
24 self.initialize([])
26 course_dir = self.coursedir.root
27 notebook_dir = self.parent.notebook_dir
28 relpath = os.path.relpath(course_dir, notebook_dir)
29 if relpath.startswith("../"):
30 nbgrader_bad_setup = True
31 self.log.error(
32 "The course directory root is not a subdirectory of the notebook "
33 "server root. This means that nbgrader will not work correctly. "
34 "If you want to use nbgrader, please ensure the course directory "
35 "root is in a subdirectory of the notebook root: %s",
36 notebook_dir,
37 )
38 else:
39 nbgrader_bad_setup = False
41 # Save which kind of application is running : Jupyterlab like or classic Notebook
42 self.webapp.settings["is_jlab"] = self.name != "jupyter-notebook"
44 tornado_settings = dict(
45 nbgrader_url_prefix=self.url_prefix,
46 nbgrader_formgrader=self,
47 nbgrader_coursedir=self.coursedir,
48 nbgrader_authenticator=self.authenticator,
49 nbgrader_gradebook=None,
50 nbgrader_db_url=self.coursedir.db_url,
51 nbgrader_bad_setup=nbgrader_bad_setup,
52 )
54 self.update_tornado_settings(tornado_settings)
55 self.add_handlers(default_handlers)