Refactor some code

This patch makes some code better in several
meanings of this word.

Closes-bug: #1586087
Change-Id: I6fd096ae66ab700b57a46ffd24436fc1abe6eb19
This commit is contained in:
Roman Prykhodchenko 2016-05-31 15:03:54 +02:00
parent 48fd2aa0a8
commit c088e42a25
2 changed files with 78 additions and 66 deletions

View File

@ -216,26 +216,26 @@ class FuelSetup(object):
for child in reversed(self.children):
self.setChildScreen(name=child.name)
signal.signal(signal.SIGUSR1, self.handle_sigusr1)
signal.signal(signal.SIGUSR1, self.sigusr1_handler)
msg = "It is recommended to change default administrator password."
dialog.display_dialog(
self.child,
widget.TextLabel("It is highly recommended to change default "
"admin password."),
"WARNING!")
if not self.save_only:
self.mainloop.run()
else:
self._save_only()
dialog.display_dialog(self.child, widget.TextLabel(msg), "WARNING!")
def exit_program(self, button):
# Fix /etc/hosts before quitting
dnsobj = self.children[int(self.choices.index("DNS & Hostname"))]
dnsobj.fixEtcHosts()
run_delegate = self._save_only if self.save_only else self.mainloop.run
run_delegate()
def exit(self, button):
try:
dns_choice_num = int(self.choices.index("DNS & Hostname"))
except ValueError:
log.info("Something bad happened.")
obj_dns = self.children[dns_choice_num]
obj_dns.fixEtcHosts()
raise urwid.ExitMainLoop()
def handle_sigusr1(self, signum, stack):
def sigusr1_handler(self, signum, stack):
log.info("Received signal: %s" % signum)
try:
savetimeout = 60
@ -252,7 +252,7 @@ class FuelSetup(object):
log.exception("Save was interrupted by the user.")
except Exception:
log.exception("Save failed for unknown reason:")
self.exit_program(None)
self.exit(None)
def global_save(self):
# Runs save function for every module

View File

@ -28,63 +28,62 @@ import yaml
log = logging.getLogger('fuelmenu.settings')
def construct_ordered_mapping(self, node, deep=False):
def make_ordered_mapping(self, node, deep=False):
if not isinstance(node, yaml.MappingNode):
raise yaml.ConstructorError(None, None,
"expected a mapping node, but found %s" %
node.id, node.start_mark)
mapping = OrderedDict()
for key_node, value_node in node.value:
key = self.construct_object(key_node, deep=deep)
if not isinstance(key, collections.Hashable):
raise yaml.ConstructorError(
"while constructing a mapping", node.start_mark,
"found unhashable key", key_node.start_mark)
value = self.construct_object(value_node, deep=deep)
mapping[key] = value
return mapping
yaml.constructor.BaseConstructor.construct_mapping = construct_ordered_mapping
msg = 'node has to be an instance of yaml.MappingNode but it is {0}'
raise yaml.ConstructorError(None,
None,
msg.format(type(node)),
node.start_mark)
kv = [(self.construct_object(key, deep=deep),
self.construct_object(value, deep=deep))
for key, value in node.value]
first_unhashable = next((key for key, _ in kv
if not isinstance(key, collections.Hashable)),
None)
if first_unhashable is not None:
raise yaml.ConstructorError('During the construction of the mapping',
node.start_mark,
'found at least one unhashable key',
first_unhashable.start_mark)
return OrderedDict(kv)
def construct_yaml_map_with_ordered_dict(self, node):
data = OrderedDict()
yield data
value = self.construct_mapping(node)
data.update(value)
yaml.constructor.Constructor.add_constructor(
'tag:yaml.org,2002:map',
construct_yaml_map_with_ordered_dict)
def make_ordered_yaml_map(self, node):
yield OrderedDict(self.construct_mapping(node))
def represent_ordered_mapping(self, tag, mapping, flow_style=None):
value = []
node = yaml.MappingNode(tag, value, flow_style=flow_style)
def tell_best_node_style(key, value):
return isinstance(key, yaml.ScalarNode) and not key.style and\
isinstance(value, yaml.ScalarNode) and not value.style
def ordered_mapping_to_node(self, tag, mapping, flow_style=None):
mapping_val = []
mapping_node = yaml.MappingNode(tag, mapping_val, flow_style=flow_style)
if self.alias_key is not None:
self.represented_objects[self.alias_key] = node
best_style = True
if hasattr(mapping, 'items'):
mapping = list(mapping.items())
for item_key, item_value in mapping:
node_key = self.represent_data(item_key)
node_value = self.represent_data(item_value)
if not (isinstance(node_key, yaml.ScalarNode) and not node_key.style):
best_style = False
if not (isinstance(node_value, yaml.ScalarNode)
and not node_value.style):
best_style = False
value.append((node_key, node_value))
if flow_style is None:
if self.default_flow_style is not None:
node.flow_style = self.default_flow_style
else:
node.flow_style = best_style
return node
self.represented_objects[self.alias_key] = mapping_node
# Settings object is the instance of OrderedDict, so multi_representer
# of OrderedDict can handle both types (OrderedDict and Settings)
yaml.representer.Representer.add_multi_representer(
OrderedDict, yaml.representer.SafeRepresenter.represent_dict)
yaml.representer.BaseRepresenter.represent_mapping = represent_ordered_mapping
map_items = list(mapping.items()) if hasattr(mapping, 'items') else mapping
for key, value in map_items:
n_key = self.represent_data(key)
n_value = self.represent_data(value)
mapping_val.append((n_key, n_value))
default_or_best = lambda: self.default_flow_style\
if self.default_flow_style is not None else\
tell_best_node_style(n_key, n_value)
mapping_node.flow_style = flow_style if flow_style is not None\
else default_or_best()
return mapping_node
def dict_merge(a, b):
@ -152,3 +151,16 @@ class Settings(OrderedDict):
def merge(self, other):
"""Merge this settings object with other."""
self.update(dict_merge(self, other))
yaml.constructor.BaseConstructor.construct_mapping = make_ordered_mapping
yaml.constructor.Constructor.add_constructor('tag:yaml.org,2002:map',
make_ordered_yaml_map)
# Settings object is the instance of OrderedDict, so multi_representer
# of OrderedDict can handle both types (OrderedDict and Settings)
yaml.representer.Representer.add_multi_representer(
OrderedDict,
yaml.representer.SafeRepresenter.represent_dict
)
yaml.representer.BaseRepresenter.represent_mapping = ordered_mapping_to_node