Example #1
0
    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 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 get_class_func(pointer):
     instance = ctypes.cast(pointer, GTypeInstancePtr)
     gtype = PGType(G_TYPE_FROM_INSTANCE(instance.contents))
     pytype = gtype.pytype
     if not pytype:
         raise RuntimeError("Couldn't find python type for %r" % gtype)
     return pytype
Example #4
0
 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"))
Example #5
0
 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"))
Example #6
0
    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"]
Example #7
0
 def test_gtype(self):
     self.assertEqual(PGType(0), PGType(GType(0)))