#include <python.h> #include "../repmgr/repmgr.h" |
py_
tacked on the front.
static PyObject *py_repos_open(PyObject *self, PyObject *args); static PyObject *py_repos_open_file(PyObject *self, PyObject *args); static PyObject *py_repos_close(PyObject *self, PyObject *args); static PyObject *py_repos_publish_all(PyObject *self, PyObject *args); static PyObject *py_repos_publish_list(PyObject *self, PyObject *args); static PyObject *py_repos_publish_obj(PyObject *self, PyObject *args); static PyObject *py_repos_publish_pages(PyObject *self, PyObject *args); static PyObject *py_repos_publish_page(PyObject *self, PyObject *args); static PyObject *py_repos_create(PyObject *self, PyObject *args); static PyObject *py_repos_drop(PyObject *self, PyObject *args); static PyObject *py_repos_defn(PyObject *self, PyObject *args); static PyObject *py_repos_list_choices(PyObject *self, PyObject *args); static PyObject *py_repos_form(PyObject *self, PyObject *args); static PyObject *py_repos_define(PyObject *self, PyObject *args); static PyObject *py_repos_add(PyObject *self, PyObject *args); static PyObject *py_repos_del(PyObject *self, PyObject *args); static PyObject *py_repos_mod(PyObject *self, PyObject *args); static PyObject *py_repos_merge(PyObject *self, PyObject *args); static PyObject *py_repos_list(PyObject *self, PyObject *args); static PyObject *py_repos_tasks_direct(PyObject *self, PyObject *args); static PyObject *py_repos_task_get(PyObject *self, PyObject *args); static PyObject *py_repos_changes(PyObject *self, PyObject *args); static PyObject *py_repos_snapshot(PyObject *self, PyObject *args); static PyObject *py_repos_getkey(PyObject *self, PyObject *args); static PyObject *py_repos_get(PyObject *self, PyObject *args); static PyObject *py_repos_edit(PyObject *self, PyObject *args); static PyObject *py_repos_display(PyObject *self, PyObject *args); static PyObject *py_repos_getvalue(PyObject *self, PyObject *args); static PyObject *py_repos_setvalue(PyObject *self, PyObject *args); static PyObject *py_repos_get_layout(PyObject *self, PyObject *args); static PyObject *py_repos_user_auth(PyObject *self, PyObject *args); static PyObject *py_repos_push(PyObject *self, PyObject *args); static PyObject *py_repos_push_all(PyObject *self, PyObject *args); static PyObject *py_repos_pull(PyObject *self, PyObject *args); static PyObject *py_repos_pull_all(PyObject *self, PyObject *args); static PyObject *py_repos_synch(PyObject *self, PyObject *args); static PyObject *py_repos_attach(PyObject *self, PyObject *args); static PyObject *py_repos_retrieve(PyObject *self, PyObject *args); |
static PyMethodDef XMLAPIMethods[] = { {"open", py_repos_open, METH_VARARGS}, {"open_file", py_repos_open_file, METH_VARARGS}, {"close", py_repos_close, METH_VARARGS}, {"publish_all", py_repos_publish_all, METH_VARARGS}, {"publish_list", py_repos_publish_list, METH_VARARGS}, {"publish_obj", py_repos_publish_obj, METH_VARARGS}, {"publish_pages", py_repos_publish_pages, METH_VARARGS}, {"publish_page", py_repos_publish_page, METH_VARARGS}, {"create", py_repos_create, METH_VARARGS}, {"drop", py_repos_drop, METH_VARARGS}, {"defn", py_repos_defn, METH_VARARGS}, {"list_choices", py_repos_list_choices, METH_VARARGS}, {"form", py_repos_form, METH_VARARGS}, {"format", py_repos_form, METH_VARARGS}, {"define", py_repos_define, METH_VARARGS}, {"add", py_repos_add, METH_VARARGS}, {"delete", py_repos_del, METH_VARARGS}, {"mod", py_repos_mod, METH_VARARGS}, {"merge", py_repos_merge, METH_VARARGS}, /* 2003-10-14: doofus of year award to me for calling repos_mod instead of repos_merge... This cost me two days. */ {"list", py_repos_list, METH_VARARGS}, {"tasks_direct", py_repos_tasks_direct, METH_VARARGS}, {"task_get", py_repos_task_get, METH_VARARGS}, {"changes", py_repos_changes, METH_VARARGS}, {"snapshot", py_repos_snapshot, METH_VARARGS}, {"getkey", py_repos_getkey, METH_VARARGS}, {"get", py_repos_get, METH_VARARGS}, {"edit", py_repos_edit, METH_VARARGS}, {"display", py_repos_display, METH_VARARGS}, {"getvalue", py_repos_getvalue, METH_VARARGS}, {"setvalue", py_repos_setvalue, METH_VARARGS}, {"get_layout", py_repos_get_layout, METH_VARARGS}, {"user_auth", py_repos_user_auth, METH_VARARGS}, {"push", py_repos_push, METH_VARARGS}, {"push_all", py_repos_push_all, METH_VARARGS}, {"pull", py_repos_pull, METH_VARARGS}, {"pull_all", py_repos_pull_all, METH_VARARGS}, {"synch", py_repos_synch, METH_VARARGS}, {"attach", py_repos_attach, METH_VARARGS}, {"retrieve", py_repos_retrieve, METH_VARARGS}, {NULL, NULL} }; |
void initrepmgr() { (void) Py_InitModule("repmgr", XMLAPIMethods); } |
static void py_repos_xml_cleanup (void * xml, void *parent) { if (parent) Py_DECREF ((PyObject *) parent); else xml_free (xml); } |
static PyObject *py_repos_open(PyObject *self, PyObject *args) { PyObject * repos; char * calling_app = NULL; if (!PyArg_ParseTuple(args, "O|s", &repos, &calling_app)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_open ((XML *) (PyCObject_AsVoidPtr (repos)), NULL, calling_app ? calling_app : "python script"); return Py_BuildValue(""); } static PyObject *py_repos_open_file(PyObject *self, PyObject *args) { char * file; XML * repos; char * calling_app = NULL; if (!PyArg_ParseTuple(args, "s|s", &file, &calling_app)) return NULL; repos = repos_open_file (file, NULL, calling_app ? calling_app : "Python script"); if (!repos) return (Py_BuildValue("")); return PyCObject_FromVoidPtrAndDesc (repos, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_close(PyObject *self, PyObject *args) { PyObject * repos; if (!PyArg_ParseTuple(args, "O", &repos)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_close ((XML *) (PyCObject_AsVoidPtr (repos))); return Py_BuildValue(""); } static PyObject *py_repos_publish_all(PyObject *self, PyObject *args) { PyObject * repos; if (!PyArg_ParseTuple(args, "O", &repos)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_publish_all ((XML *) (PyCObject_AsVoidPtr (repos))); return Py_BuildValue(""); } static PyObject *py_repos_publish_list(PyObject *self, PyObject *args) { PyObject * repos; char * list; if (!PyArg_ParseTuple(args, "Os", &repos, &list)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_publish_list ((XML *) (PyCObject_AsVoidPtr (repos)), list); return Py_BuildValue(""); } static PyObject *py_repos_publish_obj(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; if (!PyArg_ParseTuple(args, "Oss", &repos, &list, &key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_publish_obj ((XML *) (PyCObject_AsVoidPtr (repos)), list, key); return Py_BuildValue(""); } static PyObject *py_repos_publish_pages(PyObject *self, PyObject *args) { PyObject * repos; if (!PyArg_ParseTuple(args, "O", &repos)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_publish_pages ((XML *) (PyCObject_AsVoidPtr (repos))); return Py_BuildValue(""); } static PyObject *py_repos_publish_page(PyObject *self, PyObject *args) { PyObject * repos; char * page; if (!PyArg_ParseTuple(args, "Os", &repos, &page)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_publish_page ((XML *) (PyCObject_AsVoidPtr (repos)), page); return Py_BuildValue(""); } static PyObject *py_repos_create(PyObject *self, PyObject *args) { PyObject * repos; char * list; int ret; if (!PyArg_ParseTuple(args, "Os", &repos, &list)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_create ((XML *) (PyCObject_AsVoidPtr (repos)), list); return Py_BuildValue("i", ret); } static PyObject *py_repos_drop(PyObject *self, PyObject *args) { PyObject * repos; char * list; int ret; if (!PyArg_ParseTuple(args, "Os", &repos, &list)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_drop ((XML *) (PyCObject_AsVoidPtr (repos)), list); return Py_BuildValue("i", ret); } static PyObject *py_repos_defn(PyObject *self, PyObject *args) { PyObject * repos; char * list; XML * ret; if (!PyArg_ParseTuple(args, "Os", &repos, &list)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_defn ((XML *) (PyCObject_AsVoidPtr (repos)), list); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_list_choices(PyObject *self, PyObject *args) { PyObject * repos; char * list; PyObject * obj; char * field; XML * ret; if (!PyArg_ParseTuple(args, "OsOs", &repos, &list, &obj, &field)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (obj) && obj != Py_None) { PyErr_SetString (PyExc_TypeError, "object not XML object"); return NULL; } ret = repos_list_choices ((XML *) (PyCObject_AsVoidPtr (repos)), list, obj == Py_None ? NULL : (XML *) (PyCObject_AsVoidPtr (obj)), field); if (ret) { return (PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup)); } else { return (Py_BuildValue ("")); } } static PyObject *py_repos_form(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key = NULL; char * mode = NULL; XML * ret; if (!PyArg_ParseTuple(args, "Os|zz", &repos, &list, &key, &mode)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_form ((XML *) (PyCObject_AsVoidPtr (repos)), list, key, mode); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_define(PyObject *self, PyObject *args) { PyObject * repos; char * list; PyObject * defn; int ret; if (!PyArg_ParseTuple(args, "OsO", &repos, &list, &defn)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (defn)) { PyErr_SetString (PyExc_TypeError, "definition not XML object"); return NULL; } ret = repos_define ((XML *) (PyCObject_AsVoidPtr (repos)), list, (XML * )PyCObject_AsVoidPtr (defn)); return Py_BuildValue("i", ret); } static PyObject *py_repos_add(PyObject *self, PyObject *args) { PyObject * repos; char * list; PyObject * obj; int ret; if (!PyArg_ParseTuple(args, "OsO", &repos, &list, &obj)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (obj)) { PyErr_SetString (PyExc_TypeError, "object not XML object"); return NULL; } ret = repos_add ((XML *) (PyCObject_AsVoidPtr (repos)), list, (XML *) (PyCObject_AsVoidPtr (obj))); return Py_BuildValue("i", ret); } static PyObject *py_repos_del(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; int ret; if (!PyArg_ParseTuple(args, "Oss", &repos, &list, &key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_del ((XML *) (PyCObject_AsVoidPtr (repos)), list, key); return Py_BuildValue("i", ret); } static PyObject *py_repos_mod(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key = NULL; PyObject * obj; int ret; if (!PyArg_ParseTuple(args, "OsO|z", &repos, &list, &obj, &key)) return NULL; /* Neat: the key is optional. */ if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (obj) && obj != Py_None) { PyErr_SetString (PyExc_TypeError, "object not XML object"); return NULL; } ret = repos_mod ((XML *) (PyCObject_AsVoidPtr (repos)), list, obj == Py_None ? NULL : PyCObject_AsVoidPtr (obj), key); return Py_BuildValue("i", ret); } static PyObject *py_repos_merge(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key = NULL; PyObject * obj; int ret; if (!PyArg_ParseTuple(args, "OsOz", &repos, &list, &obj, &key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (obj)) { PyErr_SetString (PyExc_TypeError, "object not XML object"); return NULL; } ret = repos_merge ((XML *) (PyCObject_AsVoidPtr (repos)), list, PyCObject_AsVoidPtr (obj), key); return Py_BuildValue("i", ret); } static PyObject *py_repos_list(PyObject *self, PyObject *args) { PyObject * repos; PyObject * list = NULL; PyObject * retlist; XML * mylist = NULL; XML * elem; if (!PyArg_ParseTuple(args, "O|O", &repos, &list)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (list && !PyCObject_Check (list) && !PyString_Check (list)) { PyErr_SetString (PyExc_TypeError, "list not XML object or string ID"); return NULL; } if (!list) { mylist = xml_create ("list"); xml_set (mylist, "id", "_lists"); } else if (PyString_Check(list)) { mylist = xml_create ("list"); xml_set (mylist, "id", PyString_AsString (list)); list = NULL; } repos_list ((XML *) (PyCObject_AsVoidPtr (repos)), list ? (XML *) (PyCObject_AsVoidPtr (list)) : mylist); retlist = PyList_New (0); if (!*xml_attrval (list ? (XML *) (PyCObject_AsVoidPtr (list)) : mylist, "error-state")) { elem = xml_firstelem (list ? (XML *) (PyCObject_AsVoidPtr (list)) : mylist); while (elem) { PyList_Append (retlist, PyString_FromString (xml_attrval (elem, "id"))); elem = xml_nextelem (elem); } } if (mylist) xml_free (mylist); return retlist; } |
static PyObject *py_repos_tasks_direct(PyObject *self, PyObject *args) { PyObject * repos; PyObject * object; PyObject * list = NULL; PyObject * retlist; XML * mylist = NULL; XML * elem; if (!PyArg_ParseTuple(args, "OO|O", &repos, &object, &list)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (object)) { PyErr_SetString (PyExc_TypeError, "object not XML object"); return NULL; } if (list && !PyCObject_Check (list)) { PyErr_SetString (PyExc_TypeError, "list not XML object"); return NULL; } if (!list) { mylist = xml_create ("list"); xml_set (mylist, "id", "_tasks"); } repos_tasks_direct ((XML *) (PyCObject_AsVoidPtr (repos)), list ? (XML *) (PyCObject_AsVoidPtr (list)) : mylist, (XML *) (PyCObject_AsVoidPtr (object)), NULL); /* TODO: add user parameter */ retlist = PyList_New (0); elem = xml_firstelem (list ? (XML *) (PyCObject_AsVoidPtr (list)) : mylist); while (elem) { PyList_Append (retlist, PyString_FromString (xml_attrval (elem, "id"))); elem = xml_nextelem (elem); } if (mylist) xml_free (mylist); return retlist; } static PyObject *py_repos_changes(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * date; XML * changes; XML * elem; PyObject * retlist; if (!PyArg_ParseTuple(args, "Oss", &repos, &date, &list_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } changes = xml_create ("list"); repos_changes ((XML *) (PyCObject_AsVoidPtr (repos)), changes, date, list_id); retlist = PyList_New (0); elem = xml_firstelem (changes); while (elem) { PyList_Append (retlist, Py_BuildValue ("(ss)", xml_attrval (elem, "action"), xml_attrval (elem, "id"))); elem = xml_nextelem (elem); } xml_free (changes); return retlist; } static PyObject *py_repos_snapshot(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; if (!PyArg_ParseTuple(args, "Os", &repos, &list_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_snapshot ((XML *) (PyCObject_AsVoidPtr (repos)), list_id); return Py_BuildValue(""); } static PyObject *py_repos_getkey(PyObject *self, PyObject *args) { PyObject * repos; char * list; PyObject * obj; const char * key; PyObject * ret; if (!PyArg_ParseTuple(args, "OsO", &repos, &list, &obj)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (!PyCObject_Check (obj)) { PyErr_SetString (PyExc_TypeError, "list not XML object"); return NULL; } key = repos_getkey ((XML *) (PyCObject_AsVoidPtr (repos)), list, (XML *) (PyCObject_AsVoidPtr (obj))); ret = Py_BuildValue ("s", key); /*free ((void *) key); -- 2003-06-21 - this took me about two days to find. Sheesh. */ return ret; } static PyObject *py_repos_get(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; XML * ret; if (!PyArg_ParseTuple(args, "Oss", &repos, &list, &key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_get ((XML *) (PyCObject_AsVoidPtr (repos)), list, key); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_task_get(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; char * local_key; XML * ret; if (!PyArg_ParseTuple(args, "Osss", &repos, &list, &key, &local_key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_task_get ((XML *) (PyCObject_AsVoidPtr (repos)), list, key, local_key); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_edit(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; XML * ret; if (!PyArg_ParseTuple(args, "Oss", &repos, &list, &key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_form ((XML *) (PyCObject_AsVoidPtr (repos)), list, key, "edit"); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_display(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; XML * ret; if (!PyArg_ParseTuple(args, "Oss", &repos, &list, &key)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_form ((XML *) (PyCObject_AsVoidPtr (repos)), list, key, "display"); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_getvalue(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; char * field; char * retstr; PyObject * ret; if (!PyArg_ParseTuple(args, "Osss", &repos, &list, &key, &field)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } retstr = repos_getvalue ((XML *) (PyCObject_AsVoidPtr (repos)), list, key, field); ret = Py_BuildValue ("s", retstr); free ((void *) retstr); return ret; } static PyObject *py_repos_setvalue(PyObject *self, PyObject *args) { PyObject * repos; char * list; char * key; char * field; char * value; if (!PyArg_ParseTuple(args, "Ossss", &repos, &list, &key, &field, &value)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } repos_setvalue ((XML *) (PyCObject_AsVoidPtr (repos)), list, key, field, value); return Py_BuildValue (""); } static PyObject *py_repos_get_layout(PyObject *self, PyObject *args) { PyObject * repos; char * layout_id; XML * ret; if (!PyArg_ParseTuple(args, "Os", &repos, &layout_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_get_layout ((XML *) (PyCObject_AsVoidPtr (repos)), layout_id); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_user_auth(PyObject *self, PyObject *args) { PyObject * repos; char * user; char * password; XML * ret; if (!PyArg_ParseTuple(args, "Oss", &repos, &user, &password)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_user_auth ((XML *) (PyCObject_AsVoidPtr (repos)), user, password); return PyCObject_FromVoidPtrAndDesc (ret, (void *) Py_BuildValue(""), py_repos_xml_cleanup); } static PyObject *py_repos_push(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * remote_id = NULL; int ret; if (!PyArg_ParseTuple(args, "Os|z", &repos, &list_id, &remote_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_push ((XML *) (PyCObject_AsVoidPtr (repos)), list_id, remote_id); return Py_BuildValue("i", ret); } static PyObject *py_repos_push_all(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * remote_id = NULL; int ret; if (!PyArg_ParseTuple(args, "Os|z", &repos, &list_id, &remote_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_push_all ((XML *) (PyCObject_AsVoidPtr (repos)), list_id, remote_id); return Py_BuildValue("i", ret); } static PyObject *py_repos_pull(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * remote_id = NULL; XML * changes; XML * elem; PyObject * retlist; int ret; if (!PyArg_ParseTuple(args, "Os|z", &repos, &list_id, &remote_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } changes = xml_create ("list"); ret = repos_pull ((XML *) (PyCObject_AsVoidPtr (repos)), list_id, remote_id, changes); retlist = PyList_New (0); elem = xml_firstelem (changes); while (elem) { PyList_Append (retlist, Py_BuildValue ("(ss)", xml_attrval (elem, "action"), xml_attrval (elem, "id"))); elem = xml_nextelem (elem); } xml_free (changes); return retlist; } static PyObject *py_repos_pull_all(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * remote_id = NULL; int ret; if (!PyArg_ParseTuple(args, "Os|z", &repos, &list_id, &remote_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } ret = repos_pull_all ((XML *) (PyCObject_AsVoidPtr (repos)), list_id, remote_id, NULL); return Py_BuildValue("i", ret); } static PyObject *py_repos_synch(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * remote_id = NULL; int ret; XML * changes; XML * elem; PyObject * retlist; if (!PyArg_ParseTuple(args, "Os|z", &repos, &list_id, &remote_id)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } changes = xml_create ("list"); ret = repos_synch ((XML *) (PyCObject_AsVoidPtr (repos)), list_id, remote_id, changes); retlist = PyList_New (0); elem = xml_firstelem (changes); while (elem) { PyList_Append (retlist, Py_BuildValue ("(ss)", xml_attrval (elem, "action"), xml_attrval (elem, "id"))); elem = xml_nextelem (elem); } xml_free (changes); return retlist; } |
static PyObject *py_repos_retrieve(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * key; char * field; char * ver = NULL; PyObject * file = NULL; FILE * f; XML * handle; char chunk[1024]; int bytes; PyObject * ret = NULL; if (!PyArg_ParseTuple(args, "Osss|O", &repos, &list_id, &key, &field, &file)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (file) { if (PyFile_Check(file)) { repos_retrieve (PyCObject_AsVoidPtr (repos), list_id, key, field, ver, PyFile_AsFile (file)); return Py_BuildValue (""); } else if (PyString_Check(file)) { f = fopen (PyString_AsString (file), "w"); if (!f) { PyErr_SetString (PyExc_IOError, "can't open file for output"); return NULL; } repos_retrieve (PyCObject_AsVoidPtr (repos), list_id, key, field, ver, f); fclose (f); return Py_BuildValue (""); } } handle = repos_retrieve_open (PyCObject_AsVoidPtr (repos), list_id, key, field, ver); while (bytes = repos_retrieve_read (chunk, 1, 1024, handle)) { if (ret) { PyString_ConcatAndDel (&ret, PyString_FromStringAndSize (chunk, bytes)); } else { ret = PyString_FromStringAndSize (chunk, bytes); } if (bytes < 1024) break; } repos_retrieve_close (handle); return ret; } static PyObject *py_repos_attach(PyObject *self, PyObject *args) { PyObject * repos; char * list_id; char * key; char * field; PyObject * file = NULL; XML * handle; char * data; int size; if (!PyArg_ParseTuple(args, "OsssO", &repos, &list_id, &key, &field, &file)) return NULL; if (!PyCObject_Check (repos)) { PyErr_SetString (PyExc_TypeError, "repository not XML object"); return NULL; } if (PyFile_Check(file)) { repos_attach (PyCObject_AsVoidPtr (repos), list_id, key, field, NULL, PyFile_AsFile (file)); return Py_BuildValue (""); } else if (PyString_Check(file)) { handle = repos_attach_open (PyCObject_AsVoidPtr (repos), list_id, key, field, NULL); PyString_AsStringAndSize (file, &data, &size); repos_attach_write (data, 1, size, handle); repos_attach_close (PyCObject_AsVoidPtr (repos), handle); return Py_BuildValue (""); } else { PyErr_SetString (PyExc_TypeError, "attachment neither file object nor content string"); return NULL; } } |
This code and documentation are released under the terms of the GNU license. They are copyright (c) 2001-2005, Vivtek. All rights reserved except those explicitly granted under the terms of the GNU license. This presentation was prepared with LPML. Try literate programming. You'll like it. |