def unpack_gvalue(self, name): getter_map = { "gboolean": lambda v: v.get_boolean(), "gchar": lambda v: chr(v.get_schar()), "gdouble": lambda v: v.get_double(), "gfloat": lambda v: v.get_float(), "GType": lambda v: v.get_gtype(), "gint64": lambda v: v.get_int64(), "gint": lambda v: v.get_int(), "glong": lambda v: v.get_long(), "GObject": lambda v: v.get_object(), "gpointer": lambda v: v.get_pointer(), "gchararray": lambda v: v.get_string(), "guint64": lambda v: v.get_uint64(), "guint": lambda v: v.get_uint(), "gulong": lambda v: v.get_ulong(), } if _compat.PY3: getter_map["guchar"] = lambda v: bytes([v.get_uchar()]) else: getter_map["guchar"] = lambda v: chr(v.get_uchar()) items = getter_map.items() getter_map = dict((PGType.from_name(k), v) for (k, v) in items) return self.parse(""" try: $out = $lookup[$value.g_type]($value) except KeyError: $out = $value """, value=name, lookup=getter_map)["out"]
def test_signal_property_object(self): from pgi.repository import Gtk sigs = Gtk.Window.signals sig = sigs.set_focus self.assertEqual(sig.name, "set-focus") self.assertEqual(sig.param_types, [Gtk.Widget.__gtype__]) self.assertEqual(sig.instance_type, Gtk.Window.__gtype__) self.assertEqual(sig.flags, 2) self.assertEqual(sig.return_type, PGType.from_name("void"))
def test_signal_property_interface(self): from pgi.repository import Gtk sigs = Gtk.TreeModel.signals sig = sigs.row_changed self.assertEqual(sig.name, "row-changed") # TreePath gtypes fail here.. no idea self.assertEqual(len(sig.param_types), 2) self.assertEqual(sig.instance_type, Gtk.TreeModel.__gtype__) self.assertEqual(sig.flags, 2) self.assertEqual(sig.return_type, PGType.from_name("void"))
def _check(self, name): gtype_map = { str: "gchararray", int: "gint", float: "gdouble", bool: "gboolean", } items = gtype_map.items() gtype_map = dict((k, PGType.from_name(v)) for (k, v) in items) var = self.parse(""" if not $_.isinstance($obj, $PGType): if hasattr($obj, "__gtype__"): $obj = $obj.__gtype__ elif $obj in $gtype_map: $obj = $gtype_map[$obj] if not $_.isinstance($obj, $PGType): raise TypeError("%r not a GType" % $obj) """, gtype_map=gtype_map, obj=name, PGType=PGType) return var["obj"]