10
10
import os
11
11
from concurrent .futures import ProcessPoolExecutor
12
12
from concurrent .futures import ThreadPoolExecutor
13
+ from functools import cached_property
13
14
from html import escape
14
15
from urllib .parse import urlparse
15
16
16
17
import markdown
17
18
from jinja2 import Environment
18
19
from jinja2 import FileSystemLoader
19
- from nbconvert .exporters .export import exporter_map
20
+ from jupyter_server .base .handlers import FileFindHandler as StaticFileHandler # type: ignore
21
+ from nbconvert import get_exporter # type: ignore
22
+ from nbconvert .exporters .templateexporter import ExtensionTolerantLoader # type: ignore
20
23
from tornado import httpserver
21
24
from tornado import ioloop
22
25
from tornado import web
50
53
from .utils import jupyter_info
51
54
from .utils import url_path_join
52
55
53
- try : # Python 3.8
54
- from functools import cached_property
55
- except ImportError :
56
- from .utils import cached_property
57
-
58
- from jupyter_server .base .handlers import FileFindHandler as StaticFileHandler
59
-
60
56
# -----------------------------------------------------------------------------
61
57
# Code
62
58
# -----------------------------------------------------------------------------
67
63
68
64
def nrhead ():
69
65
try :
70
- import newrelic .agent
71
- except ImportError :
66
+ import newrelic .agent # type: ignore
67
+ except ModuleNotFoundError :
72
68
return ""
73
69
return newrelic .agent .get_browser_timing_header ()
74
70
75
71
76
72
def nrfoot ():
77
73
try :
78
74
import newrelic .agent
79
- except ImportError :
75
+ except ModuleNotFoundError :
80
76
return ""
81
77
return newrelic .agent .get_browser_timing_footer ()
82
78
@@ -89,7 +85,7 @@ class NBViewer(Application):
89
85
90
86
name = Unicode ("NBViewer" )
91
87
92
- aliases = Dict (
88
+ aliases = Dict ( # type: ignore
93
89
{
94
90
"base-url" : "NBViewer.base_url" ,
95
91
"binder-base-url" : "NBViewer.binder_base_url" ,
@@ -128,7 +124,7 @@ class NBViewer(Application):
128
124
}
129
125
)
130
126
131
- flags = Dict (
127
+ flags = Dict ( # type: ignore
132
128
{
133
129
"debug" : (
134
130
{"Application" : {"log_level" : logging .DEBUG }},
@@ -468,7 +464,11 @@ def default_endpoint(self):
468
464
469
465
@cached_property
470
466
def env (self ):
471
- env = Environment (loader = FileSystemLoader (self .template_paths ), autoescape = True )
467
+ loader = ExtensionTolerantLoader (FileSystemLoader (self .template_paths ), ".j2" )
468
+ env = Environment (
469
+ loader = loader ,
470
+ autoescape = True ,
471
+ )
472
472
env .filters ["markdown" ] = markdown .markdown
473
473
try :
474
474
git_data = git_info (here )
@@ -528,7 +528,7 @@ def frontpage_setup(self):
528
528
529
529
# Attribute inherited from traitlets.config.Application, automatically used to style logs
530
530
# https://github.com/ipython/traitlets/blob/master/traitlets/config/application.py#L191
531
- _log_formatter_cls = LogFormatter
531
+ _log_formatter_cls = LogFormatter # type: ignore
532
532
# Need Tornado LogFormatter for color logs, keys 'color' and 'end_color' in log_format
533
533
534
534
# Observed traitlet inherited again from traitlets.config.Application
@@ -594,15 +594,15 @@ def configure_formats(self, formats=None):
594
594
formats = default_formats ()
595
595
596
596
# This would be better defined in a class
597
- self .config .HTMLExporter .template_file = "basic "
598
- self .config .SlidesExporter .template_file = "slides_reveal"
597
+ # self.config.HTMLExporter.template_file = "base "
598
+ # self.config.SlidesExporter.template_file = "slides_reveal"
599
599
600
- self .config .TemplateExporter .template_path = [
600
+ self .config .TemplateExporter .extra_template_basedirs = [
601
601
os .path .join (os .path .dirname (__file__ ), "templates" , "nbconvert" )
602
602
]
603
603
604
604
for key , format in formats .items ():
605
- exporter_cls = format .get ("exporter" , exporter_map [ key ] )
605
+ exporter_cls = format .get ("exporter" , get_exporter ( key ) )
606
606
if self .processes :
607
607
# can't pickle exporter instances,
608
608
formats [key ]["exporter" ] = exporter_cls
@@ -793,7 +793,7 @@ def main(argv=None):
793
793
794
794
http_server = httpserver .HTTPServer (app , xheaders = True , ssl_options = ssl_options )
795
795
nbviewer .log .info (
796
- "Listening on %s:%i, path %s" ,
796
+ "Listening on http:// %s:%i, path %s" ,
797
797
nbviewer .host ,
798
798
nbviewer .port ,
799
799
app .settings ["base_url" ],
0 commit comments