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)
65 s->ps = rpmpsFree(s->ps);
71 rpmps_length(rpmpsObject * s)
74 rc = rpmpsNumProblems(s->ps);
79 rpmps_subscript(rpmpsObject * s, PyObject * key)
81 PyObject * result = NULL;
85 if (!PyInt_Check(key)) {
86 PyErr_SetString(PyExc_TypeError, "integer expected");
90 ix = (int) PyInt_AsLong(key);
93 psi = rpmpsInitIterator(s->ps);
94 while ((i = rpmpsNextIterator(psi)) >= 0) {
96 char * ps = rpmProblemString(rpmpsGetProblem(psi));
97 result = Py_BuildValue("s", ps);
102 psi = rpmpsFreeIterator(psi);
107 static PyMappingMethods rpmps_as_mapping = {
108 (lenfunc) rpmps_length, /* mp_length */
109 (binaryfunc) rpmps_subscript, /* mp_subscript */
112 static void rpmps_free(rpmpsObject * s)
114 s->ps = rpmpsFree(s->ps);
116 PyObject_Del((PyObject *)s);
119 static PyObject * rpmps_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
121 rpmps ps = rpmpsCreate();
122 return rpmps_Wrap(subtype, ps);
125 static char rpmps_doc[] =
128 PyTypeObject rpmps_Type = {
129 PyObject_HEAD_INIT(&PyType_Type)
131 "rpm.ps", /* tp_name */
132 sizeof(rpmpsObject), /* tp_basicsize */
135 (destructor) rpmps_dealloc, /* tp_dealloc */
137 (getattrfunc)0, /* tp_getattr */
138 (setattrfunc)0, /* tp_setattr */
139 (cmpfunc)0, /* tp_compare */
140 (reprfunc)0, /* tp_repr */
141 0, /* tp_as_number */
142 0, /* tp_as_sequence */
143 &rpmps_as_mapping, /* tp_as_mapping */
144 (hashfunc)0, /* tp_hash */
145 (ternaryfunc)0, /* tp_call */
146 (reprfunc)0, /* tp_str */
147 PyObject_GenericGetAttr, /* tp_getattro */
148 PyObject_GenericSetAttr, /* tp_setattro */
149 0, /* tp_as_buffer */
150 Py_TPFLAGS_DEFAULT, /* tp_flags */
151 rpmps_doc, /* tp_doc */
154 (richcmpfunc)0, /* tp_richcompare */
155 0, /* tp_weaklistoffset */
156 PyObject_SelfIter, /* tp_iter */
157 (iternextfunc) rpmps_iternext, /* tp_iternext */
158 rpmps_methods, /* tp_methods */
163 0, /* tp_descr_get */
164 0, /* tp_descr_set */
165 0, /* tp_dictoffset */
168 (newfunc) rpmps_new, /* tp_new */
169 (freefunc) rpmps_free, /* tp_free */
173 rpmps psFromPs(rpmpsObject * s)
178 PyObject * rpmps_Wrap(PyTypeObject *subtype, rpmps ps)
180 rpmpsObject * s = (rpmpsObject *)subtype->tp_alloc(subtype, 0);
181 if (s == NULL) return PyErr_NoMemory();
183 s->ps = ps; /* XXX refcounts? */
185 return (PyObject *) s;