Пример #1
0
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);
        }
    }
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
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);
}