PyObject *pModules, *pModule, *pReload, *pDict; _init_python_support (); pModules = PySys_GetObject ("modules"); g_assert (pModules != NULL); pModule = PyDict_GetItemString (pModules, self->filename); if (!pModule) { pModule = PyImport_ImportModule (self->filename); if (!pModule) { PyErr_Print (); PyErr_Clear (); CNL_WARNING ("opening python module %s failed", self->filename); return FALSE; } else CNL_DEBUG ("opening python module %s succeeded", self->filename); } else { pReload = PyImport_ReloadModule (pModule); if (!pReload) { PyErr_Print (); PyErr_Clear (); CNL_WARNING ("could not reload python module %s", self->filename); return FALSE; } else { Py_DECREF (pReload); } } if (pModule) { PyObject *pKey, *pObject; gint i = 0; if (!_PyGObject_Type) { PyObject *gobject_module; if ((gobject_module = PyImport_ImportModule ("gobject")) != NULL) { _PyGObject_Type = (PyTypeObject *) PyObject_GetAttrString (gobject_module, "GObjectMeta"); if (!_PyGObject_Type) { return FALSE; } } else { return FALSE; } } pDict = PyModule_GetDict (pModule); while (PyDict_Next (pDict, &i, &pKey, &pObject)) { if (!PyType_Check (pObject)) continue; if (pObject && PyObject_TypeCheck (pObject, &PyGObject_Type)) { GType g_type = pyg_type_from_object ((PyObject *) pObject); if (g_type_is_a (g_type, CNL_TYPE_OBJECT)) { cnl_plugin_register (self, g_type, 0); } } } Py_DECREF (pDict); }