// -*- mode: cpp; mode: fold -*- // Description /*{{{*/ // $Id: pkgrecords.cc,v 1.3 2002/02/26 01:36:15 mdz Exp $ /* ###################################################################### Package Records - Wrapper for the package records functions ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ #include "generic.h" #include "apt_pkgmodule.h" #include "pkgrecords.h" #include /*}}}*/ // PkgRecords Class /*{{{*/ // --------------------------------------------------------------------- static PyObject *PkgRecordsLookup(PyObject *Self,PyObject *Args) { PkgRecordsStruct &Struct = GetCpp(Self); PyObject *PkgFObj; long int Index; if (PyArg_ParseTuple(Args,"(O!l)",&PackageFileType,&PkgFObj,&Index) == 0) return 0; // Get the index and check to make sure it is reasonable pkgCache::PkgFileIterator &PkgF = GetCpp(PkgFObj); pkgCache *Cache = PkgF.Cache(); if (Cache->DataEnd() <= Cache->VerFileP + Index + 1 || Cache->VerFileP[Index].File != PkgF.Index()) { PyErr_SetNone(PyExc_IndexError); return 0; } // Do the lookup Struct.Last = &Struct.Records.Lookup(pkgCache::VerFileIterator(*Cache,Cache->VerFileP+Index)); // always return true (to make it consistent with the pkgsrcrecords object return Py_BuildValue("i", 1); } static PyMethodDef PkgRecordsMethods[] = { {"Lookup",PkgRecordsLookup,METH_VARARGS,"Changes to a new package"}, {} }; /** * Get the PkgSrcRecordsStruct from a PyObject. If no package has been looked * up, set an AttributeError using the given name. */ static inline PkgRecordsStruct &GetStruct(PyObject *Self,char *name) { PkgRecordsStruct &Struct = GetCpp(Self); if (Struct.Last == 0) PyErr_SetString(PyExc_AttributeError,name); return Struct; } static PyObject *PkgRecordsGetFileName(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"FileName"); return (Struct.Last != 0) ? CppPyString(Struct.Last->FileName()) : 0; } static PyObject *PkgRecordsGetMD5Hash(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"MD5Hash"); return (Struct.Last != 0) ? CppPyString(Struct.Last->MD5Hash()) : 0; } static PyObject *PkgRecordsGetSHA1Hash(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"SHA1Hash"); return (Struct.Last != 0) ? CppPyString(Struct.Last->SHA1Hash()) : 0; } static PyObject *PkgRecordsGetSHA256Hash(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"SHA256Hash"); return (Struct.Last != 0) ? CppPyString(Struct.Last->SHA256Hash()) : 0; } static PyObject *PkgRecordsGetSourcePkg(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"SourcePkg"); return (Struct.Last != 0) ? CppPyString(Struct.Last->SourcePkg()) : 0; } static PyObject *PkgRecordsGetSourceVer(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"SourceVer"); return (Struct.Last != 0) ? CppPyString(Struct.Last->SourceVer()) : 0; } static PyObject *PkgRecordsGetMaintainer(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"Maintainer"); return (Struct.Last != 0) ? CppPyString(Struct.Last->Maintainer()) : 0; } static PyObject *PkgRecordsGetShortDesc(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"ShortDesc"); return (Struct.Last != 0) ? CppPyString(Struct.Last->ShortDesc()) : 0; } static PyObject *PkgRecordsGetLongDesc(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"LongDesc"); return (Struct.Last != 0) ? CppPyString(Struct.Last->LongDesc()) : 0; } static PyObject *PkgRecordsGetName(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"Name"); return (Struct.Last != 0) ? CppPyString(Struct.Last->Name()) : 0; } static PyObject *PkgRecordsGetHomepage(PyObject *Self,void*) { PkgRecordsStruct &Struct = GetStruct(Self,"Homepage"); return (Struct.Last != 0) ? CppPyString(Struct.Last->Homepage()) : 0; } static PyObject *PkgRecordsGetRecord(PyObject *Self,void*) { const char *start, *stop; PkgRecordsStruct &Struct = GetStruct(Self,"Record"); if (Struct.Last == 0) return 0; Struct.Last->GetRec(start, stop); return PyString_FromStringAndSize(start,stop-start); } static PyGetSetDef PkgRecordsGetSet[] = { {"FileName",PkgRecordsGetFileName}, {"Homepage",PkgRecordsGetHomepage}, {"LongDesc",PkgRecordsGetLongDesc}, {"MD5Hash",PkgRecordsGetMD5Hash}, {"Maintainer",PkgRecordsGetMaintainer}, {"Name",PkgRecordsGetName}, {"Record",PkgRecordsGetRecord}, {"SHA1Hash",PkgRecordsGetSHA1Hash}, {"SHA256Hash",PkgRecordsGetSHA256Hash}, {"ShortDesc",PkgRecordsGetShortDesc}, {"SourcePkg",PkgRecordsGetSourcePkg}, {"SourceVer",PkgRecordsGetSourceVer}, {} }; PyTypeObject PkgRecordsType = { PyObject_HEAD_INIT(&PyType_Type) #if PY_MAJOR_VERSION < 3 0, // ob_size #endif "pkgRecords", // tp_name sizeof(CppOwnedPyObject), // tp_basicsize 0, // tp_itemsize // Methods CppOwnedDealloc, // tp_dealloc 0, // tp_print 0, // tp_getattr 0, // tp_setattr 0, // tp_compare 0, // tp_repr 0, // tp_as_number 0, // tp_as_sequence 0, // tp_as_mapping 0, // tp_hash 0, // tp_call 0, // tp_str 0, // tp_getattro 0, // tp_setattro 0, // tp_as_buffer Py_TPFLAGS_DEFAULT, // tp_flags "Records Object", // tp_doc 0, // tp_traverse 0, // tp_clear 0, // tp_richcompare 0, // tp_weaklistoffset 0, // tp_iter 0, // tp_iternext PkgRecordsMethods, // tp_methods 0, // tp_members PkgRecordsGetSet, // tp_getset }; /*}}}*/ PyObject *GetPkgRecords(PyObject *Self,PyObject *Args) { PyObject *Owner; if (PyArg_ParseTuple(Args,"O!",&PkgCacheType,&Owner) == 0) return 0; return HandleErrors(CppOwnedPyObject_NEW(Owner,&PkgRecordsType, GetCpp(Owner))); }