diff --git a/IPython/config/application.py b/IPython/config/application.py index 0917d16..ec9431c 100644 --- a/IPython/config/application.py +++ b/IPython/config/application.py @@ -355,8 +355,6 @@ def boolean_flag(name, configurable, set_help='', unset_help=''): cls,trait = configurable.split('.') - setter = Config() - setter[cls][trait] = True - unsetter = Config() - unsetter[cls][trait] = False + setter = {cls : {trait : True}} + unsetter = {cls : {trait : False}} return {name : (setter, set_help), 'no-'+name : (unsetter, unset_help)} diff --git a/IPython/config/loader.py b/IPython/config/loader.py index edf40ef..2a0238f 100644 --- a/IPython/config/loader.py +++ b/IPython/config/loader.py @@ -408,8 +408,10 @@ class KeyValueConfigLoader(CommandLineConfigLoader): if cfg is None: raise ArgumentError("Unrecognized flag: %r"%item) elif isinstance(cfg, (dict, Config)): - # update self.config with Config: - self.config.update(cfg) + # don't clobber whole config sections, update + # each section from config: + for sec,c in cfg.iteritems(): + self.config[sec].update(c) else: raise ValueError("Invalid flag: %r"%flag) else: diff --git a/IPython/config/tests/test_application.py b/IPython/config/tests/test_application.py index c132bd9..31221eb 100644 --- a/IPython/config/tests/test_application.py +++ b/IPython/config/tests/test_application.py @@ -42,6 +42,7 @@ class Foo(Configurable): class Bar(Configurable): + b = Int(0, config=True, help="The integer b.") enabled = Bool(True, config=True, help="Enable bar.") @@ -94,7 +95,7 @@ class TestApplication(TestCase): self.assertEquals(app.foo.j, 10) self.assertEquals(app.bar.enabled, False) - def test_alias(self): + def test_flags(self): app = MyApp() app.parse_command_line(["--disable"]) app.init_bar() @@ -103,3 +104,26 @@ class TestApplication(TestCase): app.init_bar() self.assertEquals(app.bar.enabled, True) + def test_aliases(self): + app = MyApp() + app.parse_command_line(["i=5", "j=10"]) + app.init_foo() + self.assertEquals(app.foo.i, 5) + app.init_foo() + self.assertEquals(app.foo.j, 10) + + def test_flag_clobber(self): + """test that setting flags doesn't clobber existing settings""" + app = MyApp() + app.parse_command_line(["Bar.b=5", "--disable"]) + print app.config + app.init_bar() + self.assertEquals(app.bar.enabled, False) + self.assertEquals(app.bar.b, 5) + app.parse_command_line(["--enable", "Bar.b=10"]) + print app.config + app.init_bar() + self.assertEquals(app.bar.enabled, True) + self.assertEquals(app.bar.b, 10) + + diff --git a/IPython/core/newapplication.py b/IPython/core/newapplication.py index 8a897de..de61f70 100644 --- a/IPython/core/newapplication.py +++ b/IPython/core/newapplication.py @@ -233,13 +233,13 @@ base_aliases = dict( ) base_flags = dict( - debug = ({'Application' : Config({'log_level' : logging.DEBUG})}, + debug = ({'Application' : {'log_level' : logging.DEBUG}}, "set log level to logging.DEBUG (maximize logging output)"), - quiet = ({'Application' : Config({'log_level' : logging.CRITICAL})}, + quiet = ({'Application' : {'log_level' : logging.CRITICAL}}, "set log level to logging.CRITICAL (minimize logging output)"), - init = ({'BaseIPythonApplication' : Config({ + init = ({'BaseIPythonApplication' : { 'copy_config_files' : True, - 'auto_create' : True}) + 'auto_create' : True} }, "Initialize profile with default config files") )