5
5
notebook will cause jupyterlab to open it in an editor, i.e. as a text file
6
6
"""
7
7
8
- import copy
9
8
import json
10
9
import logging
11
-
12
- # import pprint
13
10
from pathlib import Path
14
11
15
12
DEFAULT_SETTINGS_FILE = (
@@ -28,38 +25,36 @@ class LabConfig:
28
25
"r" ,
29
26
]
30
27
31
- def __init__ (self , logger = None , settings_file = DEFAULT_SETTINGS_FILE ):
28
+ def __init__ (self , * , settings_file , logger = None ):
29
+ self .settings_file = Path (settings_file )
32
30
self .logger = logger or logging .getLogger (__name__ )
33
31
self .config = {}
34
- # the state before any changes
35
- self ._prior_config = {}
36
- self .settings_file = Path (settings_file )
37
32
38
33
def read (self ):
39
34
"""
40
35
read the labconfig settings file
41
36
"""
42
- try :
43
- if self .settings_file .exists ():
44
- with self .settings_file .open () as fid :
45
- self .config = json .load (fid )
46
- except OSError as exc :
47
- self .logger .error (f"Could not read { self .settings_file } " , exc )
48
- return False
49
- # store for further comparison
50
- self ._prior_config = copy .deepcopy (self .config )
37
+ if self .settings_file .exists ():
38
+ with self .settings_file .open () as fid :
39
+ self .config = json .load (fid )
40
+ else :
41
+ self .logger .info (f"Could not read from { self .settings_file } (not found)" )
42
+
51
43
return self
52
44
45
+ def get_viewers (self ):
46
+ return self .config .setdefault (
47
+ "@jupyterlab/docmanager-extension:plugin" , {}
48
+ ).setdefault ("defaultViewers" , {})
49
+
53
50
def list_default_viewer (self ):
54
51
"""
55
52
list the current labconfig settings
56
53
"""
57
54
self .logger .debug (
58
55
f"Current @jupyterlab/docmanager-extension:plugin in { self .settings_file } "
59
56
)
60
- docmanager = self .config .get ("@jupyterlab/docmanager-extension:plugin" , {})
61
- viewers = docmanager .get ("defaultViewers" , {})
62
- for key , value in viewers .items ():
57
+ for key , value in self .get_viewers ().items ():
63
58
print (f"{ key } : { value } " )
64
59
65
60
def set_default_viewers (self , doctypes = None ):
@@ -70,18 +65,7 @@ def set_default_viewers(self, doctypes=None):
70
65
return self
71
66
72
67
def set_default_viewer (self , doctype ):
73
- if "@jupyterlab/docmanager-extension:plugin" not in self .config :
74
- self .config ["@jupyterlab/docmanager-extension:plugin" ] = {}
75
- if (
76
- "defaultViewers"
77
- not in self .config ["@jupyterlab/docmanager-extension:plugin" ]
78
- ):
79
- self .config ["@jupyterlab/docmanager-extension:plugin" ][
80
- "defaultViewers"
81
- ] = {}
82
- viewers = self .config ["@jupyterlab/docmanager-extension:plugin" ][
83
- "defaultViewers"
84
- ]
68
+ viewers = self .get_viewers ()
85
69
if doctype not in viewers :
86
70
viewers [doctype ] = "Jupytext Notebook"
87
71
@@ -93,30 +77,14 @@ def unset_default_viewers(self, doctypes=None):
93
77
return self
94
78
95
79
def unset_default_viewer (self , doctype ):
96
- viewers = self .config .get ("@jupyterlab/docmanager-extension:plugin" , {}).get (
97
- "defaultViewers" , {}
98
- )
99
- if doctype not in viewers :
100
- return
101
- del viewers [doctype ]
80
+ viewers = self .get_viewers ()
81
+ if doctype in viewers :
82
+ del viewers [doctype ]
102
83
103
- def write (self ) -> bool :
84
+ def write (self ):
104
85
"""
105
86
write the labconfig settings file
106
87
"""
107
- # compare - avoid changing the file if nothing changed
108
- if self .config == self ._prior_config :
109
- self .logger .info (f"Nothing to do for { self .settings_file } " )
110
- return True
111
-
112
- # save
113
- try :
114
- self .settings_file .parent .mkdir (parents = True , exist_ok = True )
115
- with self .settings_file .open ("w" ) as fid :
116
- json .dump (self .config , fid , indent = 2 )
117
- # useful in case of successive write's
118
- self ._prior_config = copy .deepcopy (self .config )
119
- return True
120
- except OSError as exc :
121
- self .logger .error (f"Could not write { self .settings_file } " , exc )
122
- return False
88
+ self .settings_file .parent .mkdir (parents = True , exist_ok = True )
89
+ with self .settings_file .open ("w" ) as fid :
90
+ json .dump (self .config , fid , indent = 2 )
0 commit comments