static PyObject *hdrHasKey(hdrObject *s, PyObject *pytag)
{
- rpmTag tag = tagNumFromPyObject(pytag);
- if (tag == RPMTAG_NOT_FOUND) {
- return NULL;
- }
+ rpmTag tag;
+ if (!tagNumFromPyObject(pytag, &tag)) return NULL;
+
return PyBool_FromLong(headerIsEntry(s->h, tag));
}
PyObject_Del(s);
}
-rpmTag tagNumFromPyObject (PyObject *item)
+int tagNumFromPyObject (PyObject *item, rpmTag *tagp)
{
rpmTag tag = RPMTAG_NOT_FOUND;
tag = PyInt_AsLong(item);
} else if (PyString_Check(item)) {
tag = rpmTagGetValue(PyString_AsString(item));
+ } else {
+ PyErr_SetString(PyExc_TypeError, "expected a string or integer");
+ return 0;
}
if (tag == RPMTAG_NOT_FOUND) {
PyErr_SetString(PyExc_ValueError, "unknown header tag");
+ return 0;
}
-
- return tag;
+
+ *tagp = tag;
+ return 1;
}
static PyObject * hdr_subscript(hdrObject * s, PyObject * item)
int forceArray = 0;
struct rpmtd_s td;
- tag = tagNumFromPyObject (item);
- if (tag == RPMTAG_NOT_FOUND) return NULL;
+ if (!tagNumFromPyObject(item, &tag)) return NULL;
tagtype = rpmTagGetType(tag);
forceArray = (tagtype & RPM_MASK_RETURN_TYPE) == RPM_ARRAY_RETURN_TYPE;
Header hdrGetHeader(hdrObject * h);
-rpmTag tagNumFromPyObject (PyObject *item);
+int tagNumFromPyObject (PyObject *item, rpmTag *tagp);
PyObject * labelCompare (PyObject * self, PyObject * args);
PyObject * versionCompare (PyObject * self, PyObject * args, PyObject * kwds);
static PyObject * rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
{
hdrObject * ho = NULL;
- PyObject * to = NULL;
rpmTag tagN = RPMTAG_REQUIRENAME;
rpmsenseFlags flags = 0;
rpmds ds = NULL;
char * kwlist[] = {"header", "tag", "flags", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|Oi:rpmds_new", kwlist,
- &hdr_Type, &ho, &to, &flags))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|O&i:rpmds_new", kwlist,
+ &hdr_Type, &ho, tagNumFromPyObject, &tagN, &flags))
return NULL;
- if (to != NULL) {
- tagN = tagNumFromPyObject(to);
- if (tagN == RPMTAG_NOT_FOUND) return NULL;
- }
ds = rpmdsNew(hdrGetHeader(ho), tagN, 0);
return rpmds_Wrap(ds);
PyObject * rpmds_Single(PyObject * s, PyObject * args, PyObject * kwds)
{
- PyObject * to = NULL;
rpmTag tagN = RPMTAG_PROVIDENAME;
const char * N;
const char * EVR = NULL;
rpmsenseFlags Flags = 0;
char * kwlist[] = {"to", "name", "evr", "flags", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "Os|si:Single", kwlist,
- &to, &N, &EVR, &Flags))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&s|si:Single", kwlist,
+ tagNumFromPyObject, &tagN, &N, &EVR, &Flags))
return NULL;
- if (to != NULL) {
- tagN = tagNumFromPyObject(to);
- if (tagN == RPMTAG_NOT_FOUND) return NULL;
- }
return rpmds_Wrap( rpmdsSingle(tagN, N, EVR, Flags) );
}
&hdr_Type, &ho, &to, &flags))
return NULL;
- if (to != NULL) {
- tagN = tagNumFromPyObject(to);
- if (tagN == RPMTAG_NOT_FOUND) return NULL;
- }
fi = rpmfiNew(NULL, hdrGetHeader(ho), tagN, flags);
return rpmfi_Wrap(fi);
static PyObject *
rpmmi_Pattern(rpmmiObject * s, PyObject * args, PyObject * kwds)
{
- PyObject *TagN = NULL;
int type;
char * pattern;
rpmTag tag;
char * kwlist[] = {"tag", "type", "patern", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "Ois:Pattern", kwlist,
- &TagN, &type, &pattern))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&is:Pattern", kwlist,
+ tagNumFromPyObject, &tag, &type, &pattern))
return NULL;
- tag = tagNumFromPyObject (TagN);
- if (tag == RPMTAG_NOT_FOUND) return NULL;
-
rpmdbSetIteratorRE(s->mi, tag, type, pattern);
Py_RETURN_NONE;
static PyObject *
rpmte_DS(rpmteObject * s, PyObject * args, PyObject * kwds)
{
- PyObject * TagN = NULL;
rpmds ds;
rpmTag tag;
char * kwlist[] = {"tag", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:DS", kwlist, &TagN))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&:DS", kwlist,
+ tagNumFromPyObject, &tag))
return NULL;
- tag = tagNumFromPyObject(TagN);
- if (tag == RPMTAG_NOT_FOUND) return NULL;
-
ds = rpmteDS(s->te, tag);
if (ds == NULL) {
#ifdef DYING
static PyObject *
rpmts_Match(rpmtsObject * s, PyObject * args, PyObject * kwds)
{
- PyObject *TagN = NULL;
PyObject *Key = NULL;
char *key = NULL;
/* XXX lkey *must* be a 32 bit integer, int "works" on all known platforms. */
rpmTag tag = RPMDBI_PACKAGES;
char * kwlist[] = {"tagNumber", "key", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:Match", kwlist,
- &TagN, &Key))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O&O:Match", kwlist,
+ tagNumFromPyObject, &tag, &Key))
return NULL;
- if (TagN && (tag = tagNumFromPyObject (TagN)) == RPMTAG_NOT_FOUND) {
- return NULL;
- }
-
if (Key) {
if (PyString_Check(Key)) {
key = PyString_AsString(Key);