@@ -266,26 +266,50 @@ def _path(root_dir, schema_name, make_dirs=False, extension='.json'):
266
266
267
267
return path
268
268
269
-
270
269
def _get_overrides (app_settings_dir ):
271
- """Get overrides settings from `app_settings_dir`."""
270
+ """Get overrides settings from `app_settings_dir`.
271
+
272
+ The ordering of paths is:
273
+ - {app_settings_dir}/overrides.d/*.{json,json5} (many, namespaced by package)
274
+ - {app_settings_dir}/overrides.{json,json5} (singleton, owned by the user)
275
+ """
272
276
overrides , error = {}, ""
273
- overrides_path = os .path .join (app_settings_dir , 'overrides.json' )
274
277
275
- if not os .path .exists (overrides_path ):
276
- overrides_path = os .path .join (app_settings_dir , 'overrides.json5' )
278
+ overrides_d = os .path .join (app_settings_dir , 'overrides.d' )
279
+
280
+ # find (and sort) the conf.d overrides files
281
+ all_override_paths = sorted ([
282
+ * (glob (os .path .join (overrides_d , '*.json' ))),
283
+ * (glob (os .path .join (overrides_d , '*.json5' ))),
284
+ ])
285
+
286
+ all_override_paths += [
287
+ os .path .join (app_settings_dir , 'overrides.json' ),
288
+ os .path .join (app_settings_dir , 'overrides.json5' )
289
+ ]
290
+
291
+ for overrides_path in all_override_paths :
292
+ if not os .path .exists (overrides_path ):
293
+ continue
277
294
278
- if os .path .exists (overrides_path ):
279
295
with open (overrides_path , encoding = 'utf-8' ) as fid :
280
296
try :
281
- overrides = json5 .load (fid )
297
+ if overrides_path .endswith ('.json5' ):
298
+ path_overrides = json5 .load (fid )
299
+ else :
300
+ path_overrides = json .load (fid )
301
+ for plugin_id , config in path_overrides .items ():
302
+ recursive_update (overrides .setdefault (plugin_id , {}), config )
303
+ print (overrides_path , overrides )
282
304
except Exception as e :
283
305
error = e
284
306
285
307
# Allow `default_settings_overrides.json` files in <jupyter_config>/labconfig dirs
286
308
# to allow layering of defaults
287
309
cm = ConfigManager (config_dir_name = "labconfig" )
288
- recursive_update (overrides , cm .get ('default_setting_overrides' ))
310
+
311
+ for plugin_id , config in cm .get ('default_setting_overrides' ).items ():
312
+ recursive_update (overrides .setdefault (plugin_id , {}), config )
289
313
290
314
return overrides , error
291
315
0 commit comments