def delete_list_item(self, section, key, item):
     variant = self.get_variant(section, key)
     if variant == None:
         printerrr('%s:%s does not exist' % (section, key))
         return
     if section == 'romaji-typing-rule' or \
        section == 'kana-typing-rule' or \
        section == 'thumb-typing-rule':
         (method, keymap_key) = item
         variant_dict = GLib.VariantDict(variant)
         keymap = variant_dict.lookup_value(method, None)
         keymap_dict = GLib.VariantDict(keymap)
         keymap_dict.remove(keymap_key)
         keymap = keymap_dict.end()
         variant_dict.insert_value(method, keymap)
         self.set_variant(section, key, variant_dict.end())
         return
     if section == 'dict' and key == 'files':
         variant_dict = GLib.VariantDict(variant)
         variant_dict.remove(item)
         self.set_variant(section, key, variant_dict.end())
         return
     if section == 'dict' and key == 'list':
         array = []
         for v in variant:
             dict_item = DictItem(*v)
             if dict_item.id == item:
                 continue
             else:
                 array.append(
                     GLib.Variant.new_variant(
                         DictItem.serialize(dict_item)))
         varray = GLib.Variant.new_array(GLib.VariantType('v'), array)
         self.set_variant(section, key, varray)
         return
Example #2
0
def get_dbus_struct(obj):
    """
    Recursively go through all the items and replace them with their casted dbus
    equivalents
    """
    if obj is None:
        return None
    if isinstance(obj, str):
        return GLib.Variant('s', obj)
    if isinstance(obj, int):
        return GLib.Variant('i', obj)
    if isinstance(obj, float):
        return GLib.Variant('d', obj)
    if isinstance(obj, bool):
        return GLib.Variant('b', obj)
    if isinstance(obj, (list, tuple)):
        lst = [get_dbus_struct(i) for i in obj if i is not None]
        result = GLib.Variant('av', lst)
        return result
    if isinstance(obj, dict):
        result = GLib.VariantDict()
        for key, value in obj.items():
            result.insert_value(key, get_dbus_struct(value))
        return result.end()
    # unknown type
    return GLib.Variant('s', str(obj))
Example #3
0
    def variant_dict(d):
        """ Converts a dictionary to a dictionary of GLib.Variant
        """
        if not isinstance(d, dict):
            raise TypeError("Only dictionaries are supported for mappings")

        vdict = GLib.VariantDict()

        for k, v in d.items():
            if v is None:
                v = ""
            vdict.insert_value(k, ModulemdUtil.python_to_variant(v))

        return vdict.end()
 def set_list_item(self, section, key, item, values):
     variant = self.get_variant(section, key)
     if variant == None:
         printerrr('%s:%s does not exist' % (section, key))
         return
     if section == 'shortcut':
         variant_dict = GLib.VariantDict(variant)
         array = []
         for value in values:
             array.append(GLib.Variant.new_string(value))
         varray = GLib.Variant.new_array(GLib.VariantType('s'), array)
         variant_dict.insert_value(item, varray)
         # GVariantDict uses GHashTable internally and
         # GVariantDict.end() does not support the order.
         self.set_variant(section, key, variant_dict.end())
         return
     if section == 'romaji-typing-rule' or \
        section == 'kana-typing-rule' or \
        section == 'thumb-typing-rule':
         (method, keymap_key) = item
         variant_dict = GLib.VariantDict(variant)
         keymap = variant_dict.lookup_value(method, None)
         keymap_dict = GLib.VariantDict(keymap)
         if section == 'thumb-typing-rule':
             array = []
             for value in values:
                 array.append(GLib.Variant.new_string(value))
             vvalue = GLib.Variant.new_array(GLib.VariantType('s'), array)
         else:
             vvalue = GLib.Variant.new_string(values)
         keymap_dict.insert_value(keymap_key, vvalue)
         keymap = keymap_dict.end()
         variant_dict.insert_value(method, keymap)
         self.set_variant(section, key, variant_dict.end())
         return
     if section == 'dict' and key == 'files':
         variant_dict = GLib.VariantDict(variant)
         array = []
         for value in values:
             array.append(GLib.Variant.new_string(value))
         varray = GLib.Variant.new_array(GLib.VariantType('s'), array)
         variant_dict.insert_value(item, varray)
         self.set_variant(section, key, variant_dict.end())
         return
     if section == 'dict' and key == 'list':
         array = []
         has_item = False
         for v in variant:
             dict_item = DictItem(*v)
             if dict_item.id == values.id:
                 array.append(
                     GLib.Variant.new_variant(DictItem.serialize(values)))
                 has_item = True
             else:
                 array.append(
                     GLib.Variant.new_variant(
                         DictItem.serialize(dict_item)))
         if not has_item:
             array.append(
                 GLib.Variant.new_variant(DictItem.serialize(values)))
         varray = GLib.Variant.new_array(GLib.VariantType('v'), array)
         self.set_variant(section, key, varray)
         return