Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

rpmmodule.c

Go to the documentation of this file.
00001 
00005 #include "system.h"
00006 
00007 #include <rpmio_internal.h>
00008 #include <rpmcli.h>     /* XXX for rpmCheckSig */
00009 #include <rpmdb.h>
00010 
00011 #include "legacy.h"
00012 #include "misc.h"
00013 #include "header_internal.h"
00014 
00015 #include "header-py.h"
00016 #include "rpmal-py.h"
00017 #include "rpmds-py.h"
00018 #include "rpmfd-py.h"
00019 #include "rpmfts-py.h"
00020 #include "rpmfi-py.h"
00021 #include "rpmmi-py.h"
00022 #include "rpmrc-py.h"
00023 #include "rpmte-py.h"
00024 #include "rpmts-py.h"
00025 
00026 #include "debug.h"
00027 
00028 #ifdef __LCLINT__
00029 #undef  PyObject_HEAD
00030 #define PyObject_HEAD   int _PyObjectHead
00031 #endif
00032 
00037 
00040 static PyObject * archScore(PyObject * self, PyObject * args)
00041 {
00042     char * arch;
00043     int score;
00044 
00045     if (!PyArg_ParseTuple(args, "s", &arch))
00046         return NULL;
00047 
00048     score = rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch);
00049 
00050     return Py_BuildValue("i", score);
00051 }
00052 
00055 static PyObject * setLogFile (PyObject * self, PyObject * args)
00056 {
00057     PyObject * fop = NULL;
00058     FILE * fp = NULL;
00059 
00060     if (!PyArg_ParseTuple(args, "|O:logSetFile", &fop))
00061         return NULL;
00062 
00063     if (fop) {
00064         if (!PyFile_Check(fop)) {
00065             PyErr_SetString(pyrpmError, "requires file object");
00066             return NULL;
00067         }
00068         fp = PyFile_AsFile(fop);
00069     }
00070 
00071     (void) rpmlogSetFile(fp);
00072 
00073     Py_INCREF(Py_None);
00074     return (PyObject *) Py_None;
00075 }
00076 
00079 static PyObject * setVerbosity (PyObject * self, PyObject * args)
00080 {
00081     int level;
00082 
00083     if (!PyArg_ParseTuple(args, "i", &level))
00084         return NULL;
00085 
00086     rpmSetVerbosity(level);
00087 
00088     Py_INCREF(Py_None);
00089     return (PyObject *) Py_None;
00090 }
00091 
00094 static PyObject * setEpochPromote (PyObject * self, PyObject * args)
00095 {
00096     if (!PyArg_ParseTuple(args, "i", &_rpmds_nopromote))
00097         return NULL;
00098     Py_INCREF(Py_None);
00099     return (PyObject *) Py_None;
00100 }
00101 
00104 static PyObject * setStats (PyObject * self, PyObject * args)
00105 {
00106     if (!PyArg_ParseTuple(args, "i", &_rpmts_stats))
00107         return NULL;
00108     Py_INCREF(Py_None);
00109     return (PyObject *) Py_None;
00110 }
00111 
00114 static PyMethodDef rpmModuleMethods[] = {
00115     { "TransactionSet", (PyCFunction) rpmts_Create, METH_VARARGS,
00116 "rpm.TransactionSet([rootDir, [db]]) -> ts\n\
00117 - Create a transaction set.\n" },
00118 
00119 #if Py_TPFLAGS_HAVE_ITER        /* XXX backport to python-1.5.2 */
00120     { "newrc", (PyCFunction) rpmrc_Create, METH_VARARGS|METH_KEYWORDS,
00121         NULL },
00122 #endif
00123     { "addMacro", (PyCFunction) rpmrc_AddMacro, METH_VARARGS,
00124         NULL },
00125     { "delMacro", (PyCFunction) rpmrc_DelMacro, METH_VARARGS,
00126         NULL },
00127 
00128     { "archscore", (PyCFunction) archScore, METH_VARARGS,
00129         NULL },
00130 
00131     { "headerLoad", (PyCFunction) hdrLoad, METH_VARARGS,
00132         NULL },
00133     { "rhnLoad", (PyCFunction) rhnLoad, METH_VARARGS,
00134         NULL },
00135     { "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS,
00136         NULL },
00137     { "readHeaderListFromFD", (PyCFunction) rpmHeaderFromFD, METH_VARARGS,
00138         NULL },
00139     { "readHeaderListFromFile", (PyCFunction) rpmHeaderFromFile, METH_VARARGS,
00140         NULL },
00141     { "readHeaderFromFD", (PyCFunction) rpmSingleHeaderFromFD, METH_VARARGS,
00142         NULL },
00143 
00144     { "setLogFile", (PyCFunction) setLogFile, METH_VARARGS,
00145         NULL },
00146 
00147     { "versionCompare", (PyCFunction) versionCompare, METH_VARARGS,
00148         NULL },
00149     { "labelCompare", (PyCFunction) labelCompare, METH_VARARGS,
00150         NULL },
00151     { "setVerbosity", (PyCFunction) setVerbosity, METH_VARARGS,
00152         NULL },
00153     { "setEpochPromote", (PyCFunction) setEpochPromote, METH_VARARGS,
00154         NULL },
00155     { "setStats", (PyCFunction) setStats, METH_VARARGS,
00156         NULL },
00157 
00158     { "dsSingle", (PyCFunction) rpmds_Single, METH_VARARGS,
00159 "rpm.dsSingle(TagN, N, [EVR, [Flags]] -> ds\n\
00160 - Create a single element dependency set.\n" },
00161     { NULL }
00162 } ;
00163 
00166 static char rpm__doc__[] =
00167 "";
00168 
00169 void initrpm(void);     /* XXX eliminate gcc warning */
00172 void initrpm(void)
00173 {
00174     PyObject * d, *o, * tag = NULL, * dict;
00175     int i;
00176     const struct headerSprintfExtension_s * extensions = rpmHeaderFormats;
00177     struct headerSprintfExtension_s * ext;
00178     PyObject * m;
00179 
00180 #if Py_TPFLAGS_HAVE_ITER        /* XXX backport to python-1.5.2 */
00181     if (PyType_Ready(&hdr_Type) < 0) return;
00182     if (PyType_Ready(&rpmal_Type) < 0) return;
00183     if (PyType_Ready(&rpmds_Type) < 0) return;
00184     if (PyType_Ready(&rpmfd_Type) < 0) return;
00185     if (PyType_Ready(&rpmfts_Type) < 0) return;
00186     if (PyType_Ready(&rpmfi_Type) < 0) return;
00187     if (PyType_Ready(&rpmmi_Type) < 0) return;
00188 
00189     rpmrc_Type.tp_base = &PyDict_Type;
00190     if (PyType_Ready(&rpmrc_Type) < 0) return;
00191 
00192     if (PyType_Ready(&rpmte_Type) < 0) return;
00193     if (PyType_Ready(&rpmts_Type) < 0) return;
00194 #endif
00195 
00196     m = Py_InitModule3("rpm", rpmModuleMethods, rpm__doc__);
00197     if (m == NULL)
00198         return;
00199 
00200     rpmReadConfigFiles(NULL, NULL);
00201 
00202     d = PyModule_GetDict(m);
00203 
00204 #ifdef  HACK
00205     pyrpmError = PyString_FromString("rpm.error");
00206     PyDict_SetItemString(d, "error", pyrpmError);
00207     Py_DECREF(pyrpmError);
00208 #else
00209     pyrpmError = PyErr_NewException("rpm.error", NULL, NULL);
00210     if (pyrpmError != NULL)
00211         PyDict_SetItemString(d, "error", pyrpmError);
00212 #endif
00213 
00214 #if Py_TPFLAGS_HAVE_ITER        /* XXX backport to python-1.5.2 */
00215     Py_INCREF(&hdr_Type);
00216     PyModule_AddObject(m, "hdr", (PyObject *) &hdr_Type);
00217 
00218     Py_INCREF(&rpmal_Type);
00219     PyModule_AddObject(m, "al", (PyObject *) &rpmal_Type);
00220 
00221     Py_INCREF(&rpmds_Type);
00222     PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type);
00223 
00224     Py_INCREF(&rpmfd_Type);
00225     PyModule_AddObject(m, "fd", (PyObject *) &rpmfd_Type);
00226 
00227     Py_INCREF(&rpmfts_Type);
00228     PyModule_AddObject(m, "fts", (PyObject *) &rpmfts_Type);
00229 
00230     Py_INCREF(&rpmfi_Type);
00231     PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type);
00232 
00233     Py_INCREF(&rpmmi_Type);
00234     PyModule_AddObject(m, "mi", (PyObject *) &rpmmi_Type);
00235 
00236     Py_INCREF(&rpmrc_Type);
00237     PyModule_AddObject(m, "rc", (PyObject *) &rpmrc_Type);
00238 
00239     Py_INCREF(&rpmte_Type);
00240     PyModule_AddObject(m, "te", (PyObject *) &rpmte_Type);
00241 
00242     Py_INCREF(&rpmts_Type);
00243     PyModule_AddObject(m, "ts", (PyObject *) &rpmts_Type);
00244 #else
00245     hdr_Type.ob_type = &PyType_Type;
00246     rpmal_Type.ob_type = &PyType_Type;
00247     rpmds_Type.ob_type = &PyType_Type;
00248     rpmfd_Type.ob_type = &PyType_Type;
00249     rpmfts_Type.ob_type = &PyType_Type;
00250     rpmfi_Type.ob_type = &PyType_Type;
00251     rpmmi_Type.ob_type = &PyType_Type;
00252     rpmte_Type.ob_type = &PyType_Type;
00253     rpmts_Type.ob_type = &PyType_Type;
00254 #endif
00255 
00256     dict = PyDict_New();
00257 
00258     for (i = 0; i < rpmTagTableSize; i++) {
00259         tag = PyInt_FromLong(rpmTagTable[i].val);
00260         PyDict_SetItemString(d, (char *) rpmTagTable[i].name, tag);
00261         Py_DECREF(tag);
00262         PyDict_SetItem(dict, tag, o=PyString_FromString(rpmTagTable[i].name + 7));
00263         Py_DECREF(o);
00264     }
00265 
00266     while (extensions->name) {
00267         if (extensions->type == HEADER_EXT_TAG) {
00268             (const struct headerSprintfExtension *) ext = extensions;
00269             PyDict_SetItemString(d, (char *) extensions->name, o=PyCObject_FromVoidPtr(ext, NULL));
00270             Py_DECREF(o);
00271             PyDict_SetItem(dict, tag, o=PyString_FromString(ext->name + 7));
00272             Py_DECREF(o);
00273         }
00274         extensions++;
00275     }
00276 
00277     PyDict_SetItemString(d, "tagnames", dict);
00278     Py_DECREF(dict);
00279 
00280 
00281 #define REGISTER_ENUM(val) \
00282     PyDict_SetItemString(d, #val, o=PyInt_FromLong( val )); \
00283     Py_DECREF(o);
00284 
00285     REGISTER_ENUM(RPMFILE_STATE_NORMAL);
00286     REGISTER_ENUM(RPMFILE_STATE_REPLACED);
00287     REGISTER_ENUM(RPMFILE_STATE_NOTINSTALLED);
00288     REGISTER_ENUM(RPMFILE_STATE_NETSHARED);
00289     REGISTER_ENUM(RPMFILE_STATE_WRONGCOLOR);
00290 
00291     REGISTER_ENUM(RPMFILE_CONFIG);
00292     REGISTER_ENUM(RPMFILE_DOC);
00293     REGISTER_ENUM(RPMFILE_ICON);
00294     REGISTER_ENUM(RPMFILE_MISSINGOK);
00295     REGISTER_ENUM(RPMFILE_NOREPLACE);
00296     REGISTER_ENUM(RPMFILE_GHOST);
00297     REGISTER_ENUM(RPMFILE_LICENSE);
00298     REGISTER_ENUM(RPMFILE_README);
00299     REGISTER_ENUM(RPMFILE_EXCLUDE);
00300     REGISTER_ENUM(RPMFILE_UNPATCHED);
00301     REGISTER_ENUM(RPMFILE_PUBKEY);
00302 
00303     REGISTER_ENUM(RPMDEP_SENSE_REQUIRES);
00304     REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS);
00305 
00306     REGISTER_ENUM(RPMSENSE_SERIAL);
00307     REGISTER_ENUM(RPMSENSE_LESS);
00308     REGISTER_ENUM(RPMSENSE_GREATER);
00309     REGISTER_ENUM(RPMSENSE_EQUAL);
00310     REGISTER_ENUM(RPMSENSE_PREREQ);
00311     REGISTER_ENUM(RPMSENSE_INTERP);
00312     REGISTER_ENUM(RPMSENSE_SCRIPT_PRE);
00313     REGISTER_ENUM(RPMSENSE_SCRIPT_POST);
00314     REGISTER_ENUM(RPMSENSE_SCRIPT_PREUN);
00315     REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN);
00316     REGISTER_ENUM(RPMSENSE_SCRIPT_VERIFY);
00317     REGISTER_ENUM(RPMSENSE_FIND_REQUIRES);
00318     REGISTER_ENUM(RPMSENSE_FIND_PROVIDES);
00319     REGISTER_ENUM(RPMSENSE_TRIGGERIN);
00320     REGISTER_ENUM(RPMSENSE_TRIGGERUN);
00321     REGISTER_ENUM(RPMSENSE_TRIGGERPOSTUN);
00322     REGISTER_ENUM(RPMSENSE_SCRIPT_PREP);
00323     REGISTER_ENUM(RPMSENSE_SCRIPT_BUILD);
00324     REGISTER_ENUM(RPMSENSE_SCRIPT_INSTALL);
00325     REGISTER_ENUM(RPMSENSE_SCRIPT_CLEAN);
00326     REGISTER_ENUM(RPMSENSE_RPMLIB);
00327     REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
00328     REGISTER_ENUM(RPMSENSE_KEYRING);
00329     REGISTER_ENUM(RPMSENSE_PATCHES);
00330     REGISTER_ENUM(RPMSENSE_CONFIG);
00331 
00332     REGISTER_ENUM(RPMTRANS_FLAG_TEST);
00333     REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS);
00334     REGISTER_ENUM(RPMTRANS_FLAG_NOSCRIPTS);
00335     REGISTER_ENUM(RPMTRANS_FLAG_JUSTDB);
00336     REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS);
00337     REGISTER_ENUM(RPMTRANS_FLAG_NODOCS);
00338     REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES);
00339     REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE);
00340     REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE);
00341     REGISTER_ENUM(RPMTRANS_FLAG_REVERSE);
00342     REGISTER_ENUM(RPMTRANS_FLAG_NOPRE);
00343     REGISTER_ENUM(RPMTRANS_FLAG_NOPOST);
00344     REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPREIN);
00345     REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERIN);
00346     REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERUN);
00347     REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN);
00348     REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN);
00349     REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN);
00350     REGISTER_ENUM(RPMTRANS_FLAG_ANACONDA);
00351     REGISTER_ENUM(RPMTRANS_FLAG_NOMD5);
00352     REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST);
00353     REGISTER_ENUM(RPMTRANS_FLAG_ADDINDEPS);
00354     REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS);
00355 
00356     REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS);
00357     REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH);
00358     REGISTER_ENUM(RPMPROB_FILTER_REPLACEPKG);
00359     REGISTER_ENUM(RPMPROB_FILTER_FORCERELOCATE);
00360     REGISTER_ENUM(RPMPROB_FILTER_REPLACENEWFILES);
00361     REGISTER_ENUM(RPMPROB_FILTER_REPLACEOLDFILES);
00362     REGISTER_ENUM(RPMPROB_FILTER_OLDPACKAGE);
00363     REGISTER_ENUM(RPMPROB_FILTER_DISKSPACE);
00364     REGISTER_ENUM(RPMPROB_FILTER_DISKNODES);
00365 
00366     REGISTER_ENUM(RPMCALLBACK_UNKNOWN);
00367     REGISTER_ENUM(RPMCALLBACK_INST_PROGRESS);
00368     REGISTER_ENUM(RPMCALLBACK_INST_START);
00369     REGISTER_ENUM(RPMCALLBACK_INST_OPEN_FILE);
00370     REGISTER_ENUM(RPMCALLBACK_INST_CLOSE_FILE);
00371     REGISTER_ENUM(RPMCALLBACK_TRANS_PROGRESS);
00372     REGISTER_ENUM(RPMCALLBACK_TRANS_START);
00373     REGISTER_ENUM(RPMCALLBACK_TRANS_STOP);
00374     REGISTER_ENUM(RPMCALLBACK_UNINST_PROGRESS);
00375     REGISTER_ENUM(RPMCALLBACK_UNINST_START);
00376     REGISTER_ENUM(RPMCALLBACK_UNINST_STOP);
00377     REGISTER_ENUM(RPMCALLBACK_REPACKAGE_PROGRESS);
00378     REGISTER_ENUM(RPMCALLBACK_REPACKAGE_START);
00379     REGISTER_ENUM(RPMCALLBACK_REPACKAGE_STOP);
00380     REGISTER_ENUM(RPMCALLBACK_UNPACK_ERROR);
00381     REGISTER_ENUM(RPMCALLBACK_CPIO_ERROR);
00382 
00383     REGISTER_ENUM(RPMPROB_BADARCH);
00384     REGISTER_ENUM(RPMPROB_BADOS);
00385     REGISTER_ENUM(RPMPROB_PKG_INSTALLED);
00386     REGISTER_ENUM(RPMPROB_BADRELOCATE);
00387     REGISTER_ENUM(RPMPROB_REQUIRES);
00388     REGISTER_ENUM(RPMPROB_CONFLICT);
00389     REGISTER_ENUM(RPMPROB_NEW_FILE_CONFLICT);
00390     REGISTER_ENUM(RPMPROB_FILE_CONFLICT);
00391     REGISTER_ENUM(RPMPROB_OLDPACKAGE);
00392     REGISTER_ENUM(RPMPROB_DISKSPACE);
00393     REGISTER_ENUM(RPMPROB_DISKNODES);
00394     REGISTER_ENUM(RPMPROB_BADPRETRANS);
00395 
00396     REGISTER_ENUM(VERIFY_DIGEST);
00397     REGISTER_ENUM(VERIFY_SIGNATURE);
00398 
00399     REGISTER_ENUM(RPMLOG_EMERG);
00400     REGISTER_ENUM(RPMLOG_ALERT);
00401     REGISTER_ENUM(RPMLOG_CRIT);
00402     REGISTER_ENUM(RPMLOG_ERR);
00403     REGISTER_ENUM(RPMLOG_WARNING);
00404     REGISTER_ENUM(RPMLOG_NOTICE);
00405     REGISTER_ENUM(RPMLOG_INFO);
00406     REGISTER_ENUM(RPMLOG_DEBUG);
00407 
00408     REGISTER_ENUM(RPMMIRE_DEFAULT);
00409     REGISTER_ENUM(RPMMIRE_STRCMP);
00410     REGISTER_ENUM(RPMMIRE_REGEX);
00411     REGISTER_ENUM(RPMMIRE_GLOB);
00412 
00413     REGISTER_ENUM(RPMVSF_DEFAULT);
00414     REGISTER_ENUM(RPMVSF_NOHDRCHK);
00415     REGISTER_ENUM(RPMVSF_NEEDPAYLOAD);
00416     REGISTER_ENUM(RPMVSF_NOSHA1HEADER);
00417     REGISTER_ENUM(RPMVSF_NOMD5HEADER);
00418     REGISTER_ENUM(RPMVSF_NODSAHEADER);
00419     REGISTER_ENUM(RPMVSF_NORSAHEADER);
00420     REGISTER_ENUM(RPMVSF_NOSHA1);
00421     REGISTER_ENUM(RPMVSF_NOMD5);
00422     REGISTER_ENUM(RPMVSF_NODSA);
00423     REGISTER_ENUM(RPMVSF_NORSA);
00424     REGISTER_ENUM(_RPMVSF_NODIGESTS);
00425     REGISTER_ENUM(_RPMVSF_NOSIGNATURES);
00426     REGISTER_ENUM(_RPMVSF_NOHEADER);
00427     REGISTER_ENUM(_RPMVSF_NOPAYLOAD);
00428 
00429     REGISTER_ENUM(TR_ADDED);
00430     REGISTER_ENUM(TR_REMOVED);
00431 
00432     REGISTER_ENUM(RPMDBI_PACKAGES);
00433 
00434     PyDict_SetItemString(d, "RPMAL_NOMATCH", o=PyInt_FromLong( (long)RPMAL_NOMATCH ));
00435     Py_DECREF(o);
00436 
00437     REGISTER_ENUM(RPMDBI_PACKAGES);
00438 }
00439 

Generated on Wed Aug 30 08:36:02 2006 for rpm by  doxygen 1.3.9.1