1 #include "rpmsystem-py.h"
9 PyObject *md_dict; /*!< to look like PyModuleObject */
15 rpmps_append(rpmpsObject * s, PyObject * value)
17 char *pkgNEVR, *altNEVR, *str1;
23 if (!PyArg_ParseTuple(value, "ssOiisN:rpmps value tuple",
24 &pkgNEVR, &altNEVR, &key,
25 &type, &ignoreProblem, &str1,
30 rpmpsAppend(s->ps, type, pkgNEVR, key, str1, NULL, altNEVR, ulong1);
35 rpmps_iternext(rpmpsObject * s)
37 PyObject * result = NULL;
39 /* Reset loop indices on 1st entry. */
41 s->psi = rpmpsInitIterator(s->ps);
44 /* If more to do, return a problem set string. */
45 if (rpmpsNextIterator(s->psi) >= 0) {
46 char * ps = rpmProblemString(rpmpsGetProblem(s->psi));
47 result = Py_BuildValue("s", ps);
50 s->psi = rpmpsFreeIterator(s->psi);
56 static struct PyMethodDef rpmps_methods[] = {
57 {"append", (PyCFunction)rpmps_append, METH_VARARGS, NULL},
58 {NULL, NULL} /* sentinel */
62 rpmps_dealloc(rpmpsObject * s)
64 s->ps = rpmpsFree(s->ps);
65 s->ob_type->tp_free((PyObject *)s);
69 rpmps_length(rpmpsObject * s)
72 rc = rpmpsNumProblems(s->ps);
77 rpmps_subscript(rpmpsObject * s, PyObject * key)
79 PyObject * result = NULL;
83 if (!PyInt_Check(key)) {
84 PyErr_SetString(PyExc_TypeError, "integer expected");
88 ix = (int) PyInt_AsLong(key);
91 psi = rpmpsInitIterator(s->ps);
92 while ((i = rpmpsNextIterator(psi)) >= 0) {
94 char * ps = rpmProblemString(rpmpsGetProblem(psi));
95 result = Py_BuildValue("s", ps);
100 psi = rpmpsFreeIterator(psi);
105 static PyMappingMethods rpmps_as_mapping = {
106 (lenfunc) rpmps_length, /* mp_length */
107 (binaryfunc) rpmps_subscript, /* mp_subscript */
110 static void rpmps_free(rpmpsObject * s)
112 s->ps = rpmpsFree(s->ps);
114 PyObject_Del((PyObject *)s);
117 static PyObject * rpmps_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
119 rpmps ps = rpmpsCreate();
120 return rpmps_Wrap(subtype, ps);
123 static char rpmps_doc[] =
126 PyTypeObject rpmps_Type = {
127 PyObject_HEAD_INIT(&PyType_Type)
129 "rpm.ps", /* tp_name */
130 sizeof(rpmpsObject), /* tp_basicsize */
133 (destructor) rpmps_dealloc, /* tp_dealloc */
135 (getattrfunc)0, /* tp_getattr */
136 (setattrfunc)0, /* tp_setattr */
137 (cmpfunc)0, /* tp_compare */
138 (reprfunc)0, /* tp_repr */
139 0, /* tp_as_number */
140 0, /* tp_as_sequence */
141 &rpmps_as_mapping, /* tp_as_mapping */
142 (hashfunc)0, /* tp_hash */
143 (ternaryfunc)0, /* tp_call */
144 (reprfunc)0, /* tp_str */
145 PyObject_GenericGetAttr, /* tp_getattro */
146 PyObject_GenericSetAttr, /* tp_setattro */
147 0, /* tp_as_buffer */
148 Py_TPFLAGS_DEFAULT, /* tp_flags */
149 rpmps_doc, /* tp_doc */
152 (richcmpfunc)0, /* tp_richcompare */
153 0, /* tp_weaklistoffset */
154 PyObject_SelfIter, /* tp_iter */
155 (iternextfunc) rpmps_iternext, /* tp_iternext */
156 rpmps_methods, /* tp_methods */
161 0, /* tp_descr_get */
162 0, /* tp_descr_set */
163 0, /* tp_dictoffset */
166 (newfunc) rpmps_new, /* tp_new */
167 (freefunc) rpmps_free, /* tp_free */
171 rpmps psFromPs(rpmpsObject * s)
176 PyObject * rpmps_Wrap(PyTypeObject *subtype, rpmps ps)
178 rpmpsObject * s = (rpmpsObject *)subtype->tp_alloc(subtype, 0);
179 if (s == NULL) return PyErr_NoMemory();
181 s->ps = ps; /* XXX refcounts? */
183 return (PyObject *) s;