@@ -24,7 +24,7 @@ def get_extension_app_pkg(app_cls):
24
24
raise NotAnExtensionApp ("The " )
25
25
26
26
27
- def get_loader (obj ):
27
+ def get_loader (obj , logger = None ):
28
28
"""Looks for _load_jupyter_server_extension as an attribute
29
29
of the object or module.
30
30
@@ -35,25 +35,58 @@ def get_loader(obj):
35
35
func = getattr (obj , '_load_jupyter_server_extension' )
36
36
except AttributeError :
37
37
func = getattr (obj , 'load_jupyter_server_extension' )
38
+
38
39
except Exception :
39
40
raise ExtensionLoadingError ("_load_jupyter_server_extension function was not found." )
40
41
return func
41
42
42
43
43
- def get_metadata (package_name ):
44
+ def get_metadata (package_name , logger = None ):
44
45
"""Find the extension metadata from an extension package.
45
46
47
+ This looks for a `_jupyter_server_extension_points` function
48
+ that returns metadata about all extension points within a Jupyter
49
+ Server Extension pacakge.
50
+
46
51
If it doesn't exist, return a basic metadata packet given
47
52
the module name.
48
53
"""
49
54
module = importlib .import_module (package_name )
55
+
56
+ try :
57
+ return module ._jupyter_server_extension_points
58
+ except AttributeError :
59
+ pass
60
+
61
+ # For backwards compatibility, we temporarily allow
62
+ # _jupyter_server_extension_paths. We will remove in
63
+ # a later release of Jupyter Server.
50
64
try :
51
- return module ._jupyter_server_extension_paths ()
65
+ return module ._jupyter_server_extension_paths
52
66
except AttributeError :
53
- return [{
54
- "module" : package_name ,
55
- "name" : package_name
56
- }]
67
+ if logger :
68
+ logger .debug (
69
+ "A `_jupyter_server_extension_points` function was not "
70
+ "found in {name}. Instead, a `_jupyter_server_extension_paths` "
71
+ "function was found and will be used for now. This function "
72
+ "name will be deprecated in future releases "
73
+ "of Jupyter Server." .format (name = package_name )
74
+ )
75
+ pass
76
+
77
+ # Dynamically create metadata if the package doesn't
78
+ # provide it.
79
+ if logger :
80
+ logger .debug (
81
+ "A `_jupyter_server_extension_points` function was "
82
+ "not found in {name}, so Jupyter Server will look "
83
+ "for extension points in the extension pacakge's "
84
+ "root." .format (name = package_name )
85
+ )
86
+ return [{
87
+ "module" : package_name ,
88
+ "name" : package_name
89
+ }]
57
90
58
91
59
92
def validate_extension (name ):
0 commit comments