static PyObject *to_python_object(JSContext *context, jsval value) { if (JSVAL_IS_PRIMITIVE(value)) { if (JSVAL_IS_STRING(value)) { return PyUnicode_FromString(JS_EncodeString(context, JSVAL_TO_STRING(value))); } else if (JSVAL_IS_BOOLEAN(value)) { return PyBool_FromLong(JSVAL_TO_BOOLEAN(value)); } else if (JSVAL_IS_INT(value)) { return PyLong_FromLong(JSVAL_TO_INT(value)); } else if (JSVAL_IS_DOUBLE(value)) { return PyFloat_FromDouble(JSVAL_TO_DOUBLE(value)); } else { Py_INCREF(Py_None); return Py_None; } } else { JSObject *obj = JSVAL_TO_OBJECT(value); if (JS_ObjectIsDate(context, obj)) { return to_python_datetime(context, obj); } else if (JS_IsArrayObject(context, obj)) { return to_python_list(context, obj); } else { return to_python_dict(context, obj); } } }
static PyObject *get_selected_objects( PyObject *self, PyObject *args, PyObject *kwds) { PyObject *rev_arg = NULL, *sel_arg = NULL; static char *kwlist[] = { "rev", "sel", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O!:get_selected_objects", kwlist, &RevisionType, &rev_arg, &SelectionType, &sel_arg)) return NULL; xorn_object_t *objects; size_t count; if (xorn_get_selected_objects(((Revision *)rev_arg)->rev, ((Selection *)sel_arg)->sel, &objects, &count) == -1) return PyErr_NoMemory(); return to_python_list(objects, count); }
static PyObject *get_modified_objects( PyObject *self, PyObject *args, PyObject *kwds) { PyObject *from_arg = NULL, *to_arg = NULL; static char *kwlist[] = { "from", "to", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O!:get_modified_objects", kwlist, &RevisionType, &from_arg, &RevisionType, &to_arg)) return NULL; xorn_object_t *objects; size_t count; if (xorn_get_modified_objects(((Revision *)from_arg)->rev, ((Revision *)to_arg)->rev, &objects, &count) == -1) return PyErr_NoMemory(); return to_python_list(objects, count); }
static PyObject *get_objects_attached_to( PyObject *self, PyObject *args, PyObject *kwds) { PyObject *rev_arg = NULL, *ob_arg = NULL; static char *kwlist[] = { "rev", "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O:get_objects_attached_to", kwlist, &RevisionType, &rev_arg, &ob_arg)) return NULL; if (ob_arg != Py_None && !PyObject_TypeCheck(ob_arg, &ObjectType)) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "get_objects_attached_to() argument 2 " "must be %.50s or None, not %.50s", ObjectType.tp_name, ob_arg->ob_type->tp_name); PyErr_SetString(PyExc_TypeError, buf); return NULL; } if (ob_arg != Py_None && !xorn_object_exists_in_revision(((Revision *)rev_arg)->rev, ((Object *)ob_arg)->ob)) { PyErr_SetString(PyExc_KeyError, "Object does not exist"); return NULL; } xorn_object_t *objects; size_t count; if (xorn_get_objects_attached_to(((Revision *)rev_arg)->rev, ob_arg == Py_None ? NULL : ((Object *)ob_arg)->ob, &objects, &count) == -1) return PyErr_NoMemory(); return to_python_list(objects, count); }