On Fri, Feb 22, 2013 at 03:04:01PM +0100, Radek Vykydal wrote:
---
pyanaconda/nm.py | 108 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 71 insertions(+), 37 deletions(-)
+def _gvariant_settings(settings, key1, key2, value,
value_type_str=None):
+
+ # build copy of GVariant settings as mutable python object
+ new_settings = {}
+ dict1 = settings.get_child_value(0)
+ for key1_idx in range(dict1.n_children()):
+ key_dict2 = dict1.get_child_value(key1_idx)
+ key1_ = key_dict2.get_child_value(0).unpack()
+ new_settings[key1_] = {}
+ dict2 = key_dict2.get_child_value(1)
+ for key2_idx in range(dict2.n_children()):
+ key_val = dict2.get_child_value(key2_idx)
+ key2_ = key_val.get_child_value(0).unpack()
+ val = key_val.get_child_value(1)
+ # get type string of updated value
+ if key1_ == key1 and key2_ == key2:
+ value_type_str = val.get_child_value(0).get_type_string()
+ val = val.get_child_value(0)
+ new_settings[key1_][key2_] = val
These loops are a bit hard to read, maybe add some whitespace? I'd also
recommend changing the loop key values to key1 instead of key1_ and call
the arguments new_key1 and new_key2 to make it more obvious what's
happening.
+
+ if value_type_str is None:
+ # infer the new value type for string and boolean
+ if type(value) is type(True):
+ value_type_str = 'b'
+ if type(value) is type(''):
+ value_type_str = 's'
+
+ if value_type_str is not None:
+ if key1 not in new_settings:
+ new_settings[key1] = {}
+ new_settings[key1][key2] = GLib.Variant(value_type_str, value)
You may want to make a note in the docstring(s) that any value_type_str
passed in will be overridden by existing type if found. And maybe rename
it to default_type_str.
--
Brian C. Lane | Anaconda Team | IRC: bcl #anaconda | Port Orchard, WA (PST8PDT)