152 lines
3.8 KiB
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;
|
|
}
|