1 #include "rpmsystem-py.h"
3 #include "header-py.h" /* XXX tagNumFromPyObject */
6 #include "rpmfiles-py.h"
13 * \brief An python rpm.te object represents an element of a transaction set.
15 * Elements of a transaction set are accessible after being added. Each
16 * element carries descriptive information about the added element as well
17 * as a file info set and dependency sets for each of the 4 types of dependency.
19 * The rpmte class contains the following methods:
21 * - te.Type() Return transaction element type (TR_ADDED|TR_REMOVED).
22 * - te.N() Return package name.
23 * - te.E() Return package epoch.
24 * - te.V() Return package version.
25 * - te.R() Return package release.
26 * - te.A() Return package architecture.
27 * - te.O() Return package operating system.
28 * - te.NEVR() Return package name-version-release.
29 * - te.Color() Return package color bits.
30 * - te.PkgFileSize() Return no. of bytes in package file (approx).
31 * - te.Parent() Return the parent element index.
32 * - te.Problems() Return problems associated with this element.
33 * - te.AddedKey() Return the added package index (TR_ADDED).
34 * - te.DependsOnKey() Return the package index for the added package (TR_REMOVED).
35 * - te.DBOffset() Return the Packages database instance number (TR_REMOVED)
36 * - te.Key() Return the associated opaque key, i.e. 2nd arg ts.addInstall().
37 * - te.DS(tag) Return package dependency set.
38 * @param tag 'Providename', 'Requirename', 'Obsoletename', 'Conflictname'
39 * - te.FI(tag) Return package file info set iterator (deprecated).
40 * @param tag 'Basenames'
41 * - te.Files() Return package file info set.
44 struct rpmteObject_s {
46 PyObject *md_dict; /*!< to look like PyModuleObject */
51 rpmte_TEType(rpmteObject * s, PyObject * unused)
53 return Py_BuildValue("i", rpmteType(s->te));
57 rpmte_N(rpmteObject * s, PyObject * unused)
59 return Py_BuildValue("s", rpmteN(s->te));
63 rpmte_E(rpmteObject * s, PyObject * unused)
65 return Py_BuildValue("s", rpmteE(s->te));
69 rpmte_V(rpmteObject * s, PyObject * unused)
71 return Py_BuildValue("s", rpmteV(s->te));
75 rpmte_R(rpmteObject * s, PyObject * unused)
77 return Py_BuildValue("s", rpmteR(s->te));
81 rpmte_A(rpmteObject * s, PyObject * unused)
83 return Py_BuildValue("s", rpmteA(s->te));
87 rpmte_O(rpmteObject * s, PyObject * unused)
89 return Py_BuildValue("s", rpmteO(s->te));
93 rpmte_NEVR(rpmteObject * s, PyObject * unused)
95 return Py_BuildValue("s", rpmteNEVR(s->te));
99 rpmte_NEVRA(rpmteObject * s, PyObject * unused)
101 return Py_BuildValue("s", rpmteNEVRA(s->te));
105 rpmte_Color(rpmteObject * s, PyObject * unused)
107 return Py_BuildValue("i", rpmteColor(s->te));
111 rpmte_PkgFileSize(rpmteObject * s, PyObject * unused)
113 return Py_BuildValue("L", rpmtePkgFileSize(s->te));
117 rpmte_Parent(rpmteObject * s, PyObject * unused)
119 rpmte parent = rpmteParent(s->te);
121 return rpmte_Wrap(&rpmte_Type, parent);
126 static PyObject * rpmte_Failed(rpmteObject * s, PyObject * unused)
128 return Py_BuildValue("i", rpmteFailed(s->te));
131 static PyObject * rpmte_Problems(rpmteObject * s, PyObject * unused)
133 rpmps ps = rpmteProblems(s->te);
134 PyObject *problems = rpmps_AsList(ps);
141 rpmte_DependsOnKey(rpmteObject * s, PyObject * unused)
143 return Py_BuildValue("i", rpmteDependsOnKey(s->te));
148 rpmte_DBOffset(rpmteObject * s, PyObject * unused)
150 return Py_BuildValue("i", rpmteDBOffset(s->te));
154 rpmte_Key(rpmteObject * s, PyObject * unused)
156 /* XXX how to insure this is a PyObject??? */
157 PyObject * Key = (PyObject *) rpmteKey(s->te);
165 rpmte_DS(rpmteObject * s, PyObject * args, PyObject * kwds)
169 char * kwlist[] = {"tag", NULL};
171 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&:DS", kwlist,
172 tagNumFromPyObject, &tag))
175 ds = rpmteDS(s->te, tag);
179 return rpmds_Wrap(&rpmds_Type, rpmdsLink(ds));
183 rpmte_FI(rpmteObject * s, PyObject * args, PyObject * kwds)
187 DEPRECATED_METHOD("use .Files() instead");
193 return rpmfi_Wrap(&rpmfi_Type, rpmfiLink(fi));
197 rpmte_Files(rpmteObject * s, PyObject * args, PyObject * kwds)
199 rpmfiles files = rpmteFiles(s->te);
203 return rpmfiles_Wrap(&rpmfiles_Type, files);
205 static struct PyMethodDef rpmte_methods[] = {
206 {"Type", (PyCFunction)rpmte_TEType, METH_NOARGS,
207 "te.Type() -- Return element type (rpm.TR_ADDED | rpm.TR_REMOVED).\n" },
208 {"N", (PyCFunction)rpmte_N, METH_NOARGS,
209 "te.N() -- Return element name.\n" },
210 {"E", (PyCFunction)rpmte_E, METH_NOARGS,
211 "te.E() -- Return element epoch.\n" },
212 {"V", (PyCFunction)rpmte_V, METH_NOARGS,
213 "te.V() -- Return element version.\n" },
214 {"R", (PyCFunction)rpmte_R, METH_NOARGS,
215 "te.R() -- Return element release.\n" },
216 {"A", (PyCFunction)rpmte_A, METH_NOARGS,
217 "te.A() -- Return element arch.\n" },
218 {"O", (PyCFunction)rpmte_O, METH_NOARGS,
219 "te.O() -- Return element os.\n" },
220 {"NEVR", (PyCFunction)rpmte_NEVR, METH_NOARGS,
221 "te.NEVR() -- Return element name-[epoch:]version-release.\n" },
222 {"NEVRA", (PyCFunction)rpmte_NEVRA, METH_NOARGS,
223 "te.NEVRA() -- Return element name-[epoch:]version-release.arch\n" },
224 {"Color",(PyCFunction)rpmte_Color, METH_NOARGS,
225 "te.Color() -- Return package color bits."},
226 {"PkgFileSize",(PyCFunction)rpmte_PkgFileSize, METH_NOARGS,
227 "te.PkgFileSize() -- Return no. of bytes in package file (approx)."},
228 {"Parent", (PyCFunction)rpmte_Parent, METH_NOARGS,
229 "te.Parent() -- Return the parent element index."},
230 {"Problems",(PyCFunction)rpmte_Problems, METH_NOARGS,
231 "te.Problems() -- Return problems associated with this element."},
232 /* {"DependsOnKey",(PyCFunction)rpmte_DependsOnKey, METH_NOARGS,
234 {"DBOffset",(PyCFunction)rpmte_DBOffset, METH_NOARGS,
235 "te.DBOffset() -- Return the Package's database instance number.\n\nTR_REMOVED only"},
236 {"Failed", (PyCFunction)rpmte_Failed, METH_NOARGS,
237 "te.Failed() -- Return if there are any related errors."},
238 {"Key", (PyCFunction)rpmte_Key, METH_NOARGS,
239 "te.Key() -- Return the associated opaque key aka user data\n\
240 as passed e.g. as data arg ts.addInstall()"},
241 {"DS", (PyCFunction)rpmte_DS, METH_VARARGS|METH_KEYWORDS,
242 "te.DS(TagN) -- Return the TagN dependency set (or None).\n\
243 TagN is one of 'Providename', 'Requirename', 'Obsoletename',\n\
244 'Conflictname', 'Triggername', 'Recommendname', 'Suggestname',\n\
245 'Supplementname', 'Enhancename'" },
246 {"FI", (PyCFunction)rpmte_FI, METH_VARARGS|METH_KEYWORDS,
247 "te.FI(TagN) -- Return file info iterator of element.\n\n DEPRECATED! Use .Files() instead.\n" },
248 {"Files", (PyCFunction)rpmte_Files, METH_NOARGS,
249 "te.Files() -- Return file info set of element.\n" },
250 {NULL, NULL} /* sentinel */
255 static char rpmte_doc[] =
258 PyTypeObject rpmte_Type = {
259 PyVarObject_HEAD_INIT(&PyType_Type, 0)
260 "rpm.te", /* tp_name */
261 sizeof(rpmteObject), /* tp_size */
263 (destructor)0, /* tp_dealloc */
265 (getattrfunc)0, /* tp_getattr */
266 (setattrfunc)0, /* tp_setattr */
269 0, /* tp_as_number */
270 0, /* tp_as_sequence */
271 0, /* tp_as_mapping */
275 PyObject_GenericGetAttr, /* tp_getattro */
276 PyObject_GenericSetAttr, /* tp_setattro */
277 0, /* tp_as_buffer */
278 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
279 rpmte_doc, /* tp_doc */
282 0, /* tp_richcompare */
283 0, /* tp_weaklistoffset */
286 rpmte_methods, /* tp_methods */
291 0, /* tp_descr_get */
292 0, /* tp_descr_set */
293 0, /* tp_dictoffset */
301 PyObject * rpmte_Wrap(PyTypeObject *subtype, rpmte te)
303 rpmteObject *s = (rpmteObject *)subtype->tp_alloc(subtype, 0);
304 if (s == NULL) return NULL;
307 return (PyObject *) s;