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

1import os 

2 

3from e2xcore import BaseApp 

4from nbgrader.apps.baseapp import NbGrader 

5from nbgrader.server_extensions.formgrader.apihandlers import default_handlers 

6 

7 

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 

16 

17 @property 

18 def url_prefix(self): 

19 relpath = os.path.relpath(self.coursedir.root, self.root_dir) 

20 return relpath 

21 

22 def load_app(self): 

23 self.log.info("Loading the nbgrader api app") 

24 self.initialize([]) 

25 

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 

40 

41 # Save which kind of application is running : Jupyterlab like or classic Notebook 

42 self.webapp.settings["is_jlab"] = self.name != "jupyter-notebook" 

43 

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 ) 

53 

54 self.update_tornado_settings(tornado_settings) 

55 self.add_handlers(default_handlers)