diff --git a/secop/modules.py b/secop/modules.py index 4f48517..2bb00f3 100644 --- a/secop/modules.py +++ b/secop/modules.py @@ -68,11 +68,15 @@ class HasAccessibles(HasProperties): override_values.pop(key, None) elif key in accessibles: override_values[key] = value - for aname, aobj in accessibles.items(): + for aname, aobj in list(accessibles.items()): if aname in override_values: aobj = aobj.copy() + value = override_values[aname] + if value is None: + accessibles.pop(aname) + continue aobj.merge(merged_properties[aname]) - aobj.override(override_values[aname]) + aobj.override(value) # replace the bare value by the created accessible setattr(cls, aname, aobj) else: diff --git a/test/test_modules.py b/test/test_modules.py index 22bbeeb..66b1b3f 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -346,3 +346,16 @@ def test_command_config(): 'argument': {'type': 'bool'}, 'result': {'type': 'bool'}, } + + +def test_command_none(): + srv = ServerStub({}) + + class Mod(Drivable): + pass + + class Mod2(Drivable): + stop = None + + assert 'stop' in Mod('o', logger, {'description': ''}, srv).accessibles + assert 'stop' not in Mod2('o', logger, {'description': ''}, srv).accessibles