rpm/python/rpmps-py.c

152 lines
3.8 KiB
C

#include "rpmsystem-py.h"
#include "rpmps-py.h"
struct rpmProblemObject_s {
PyObject_HEAD
PyObject *md_dict;
rpmProblem prob;
};
static char rpmprob_doc[] =
"";
static PyObject *rpmprob_get_type(rpmProblemObject *s, void *closure)
{
return Py_BuildValue("i", rpmProblemGetType(s->prob));
}
static PyObject *rpmprob_get_pkgnevr(rpmProblemObject *s, void *closure)
{
return Py_BuildValue("s", rpmProblemGetPkgNEVR(s->prob));
}
static PyObject *rpmprob_get_altnevr(rpmProblemObject *s, void *closure)
{
return Py_BuildValue("s", rpmProblemGetAltNEVR(s->prob));
}
static PyObject *rpmprob_get_key(rpmProblemObject *s, void *closure)
{
fnpyKey key = rpmProblemGetKey(s->prob);
if (key) {
return Py_BuildValue("O", rpmProblemGetKey(s->prob));
} else {
Py_RETURN_NONE;
}
}
static PyObject *rpmprob_get_str(rpmProblemObject *s, void *closure)
{
return Py_BuildValue("s", rpmProblemGetStr(s->prob));
}
static PyObject *rpmprob_get_num(rpmProblemObject *s, void *closure)
{
return Py_BuildValue("L", rpmProblemGetDiskNeed(s->prob));
}
static PyGetSetDef rpmprob_getseters[] = {
{ "type", (getter)rpmprob_get_type, NULL, NULL },
{ "pkgNEVR", (getter)rpmprob_get_pkgnevr, NULL, NULL },
{ "altNEVR", (getter)rpmprob_get_altnevr, NULL, NULL },
{ "key", (getter)rpmprob_get_key, NULL, NULL },
{ "_str", (getter)rpmprob_get_str, NULL, NULL },
{ "_num", (getter)rpmprob_get_num, NULL, NULL },
{ NULL }
};
static PyObject *rpmprob_str(rpmProblemObject *s)
{
char *str = rpmProblemString(s->prob);
PyObject *res = Py_BuildValue("s", str);
free(str);
return res;
}
static void rpmprob_dealloc(rpmProblemObject *s)
{
s->prob = rpmProblemFree(s->prob);
Py_TYPE(s)->tp_free((PyObject *)s);
}
PyTypeObject rpmProblem_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"rpm.prob", /* tp_name */
sizeof(rpmProblemObject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
(destructor)rpmprob_dealloc, /* tp_dealloc */
0, /* tp_print */
(getattrfunc)0, /* tp_getattr */
(setattrfunc)0, /* tp_setattr */
0, /* tp_compare */
(reprfunc)0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
(hashfunc)0, /* tp_hash */
(ternaryfunc)0, /* tp_call */
(reprfunc)rpmprob_str, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
rpmprob_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
(richcmpfunc)0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
0, /* tp_members */
rpmprob_getseters, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
(newfunc)0, /* tp_new */
0, /* tp_free */
0, /* tp_is_gc */
};
PyObject *rpmprob_Wrap(PyTypeObject *subtype, rpmProblem prob)
{
rpmProblemObject * s = (rpmProblemObject *)subtype->tp_alloc(subtype, 0);
if (s == NULL) return NULL;
s->prob = rpmProblemLink(prob);
return (PyObject *) s;
}
PyObject *rpmps_AsList(rpmps ps)
{
PyObject *problems;
rpmpsi psi;
rpmProblem prob;
problems = PyList_New(0);
if (!problems) {
return NULL;
}
psi = rpmpsInitIterator(ps);
while ((prob = rpmpsiNext(psi))) {
PyObject *pyprob = rpmprob_Wrap(&rpmProblem_Type, prob);
if (!pyprob) {
Py_DECREF(problems);
rpmpsFreeIterator(psi);
return NULL;
}
PyList_Append(problems, pyprob);
Py_DECREF(pyprob);
}
rpmpsFreeIterator(psi);
return problems;
}