summaryrefslogtreecommitdiff
path: root/python/pkgrecords.cc
diff options
context:
space:
mode:
Diffstat (limited to 'python/pkgrecords.cc')
-rw-r--r--python/pkgrecords.cc119
1 files changed, 119 insertions, 0 deletions
diff --git a/python/pkgrecords.cc b/python/pkgrecords.cc
new file mode 100644
index 00000000..3128365a
--- /dev/null
+++ b/python/pkgrecords.cc
@@ -0,0 +1,119 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+// $Id: pkgrecords.cc,v 1.1 2001/02/20 06:32:01 jgg Exp $
+/* ######################################################################
+
+ Package Records - Wrapper for the package records functions
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include "generic.h"
+#include "apt_pkgmodule.h"
+
+#include <apt-pkg/pkgrecords.h>
+
+#include <python/Python.h>
+ /*}}}*/
+
+struct PkgRecordsStruct
+{
+ pkgRecords Records;
+ pkgRecords::Parser *Last;
+
+ PkgRecordsStruct(pkgCache *Cache) : Records(*Cache), Last(0) {};
+ PkgRecordsStruct() : Records(*(pkgCache *)0) {abort();}; // G++ Bug..
+};
+
+// PkgRecords Class /*{{{*/
+// ---------------------------------------------------------------------
+static PyMethodDef PkgRecordsMethods[];
+
+static PyObject *PkgRecordsAttr(PyObject *Self,char *Name)
+{
+ PkgRecordsStruct &Struct = GetCpp<PkgRecordsStruct>(Self);
+
+ if (Struct.Last != 0)
+ {
+ if (strcmp("FileName",Name) == 0)
+ return CppPyString(Struct.Last->FileName());
+ else if (strcmp("MD5Hash",Name) == 0)
+ return CppPyString(Struct.Last->MD5Hash());
+ else if (strcmp("SourcePkg",Name) == 0)
+ return CppPyString(Struct.Last->SourcePkg());
+ else if (strcmp("Maintainer",Name) == 0)
+ return CppPyString(Struct.Last->Maintainer());
+ else if (strcmp("ShortDesc",Name) == 0)
+ return CppPyString(Struct.Last->ShortDesc());
+ else if (strcmp("LongDesc",Name) == 0)
+ return CppPyString(Struct.Last->LongDesc());
+ else if (strcmp("Name",Name) == 0)
+ return CppPyString(Struct.Last->Name());
+ }
+
+ return Py_FindMethod(PkgRecordsMethods,Self,Name);
+}
+
+static PyObject *PkgRecordsLookup(PyObject *Self,PyObject *Args)
+{
+ PkgRecordsStruct &Struct = GetCpp<PkgRecordsStruct>(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<pkgCache::PkgFileIterator>(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));
+ Py_INCREF(Py_None);
+ return HandleErrors(Py_None);
+}
+
+static PyMethodDef PkgRecordsMethods[] =
+{
+ {"Lookup",PkgRecordsLookup,METH_VARARGS,"Changes to a new package"},
+ {}
+};
+
+PyTypeObject PkgRecordsType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "pkgRecords", // tp_name
+ sizeof(CppOwnedPyObject<PkgRecordsStruct>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppOwnedDealloc<PkgRecordsStruct>, // tp_dealloc
+ 0, // tp_print
+ PkgRecordsAttr, // 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
+};
+
+ /*}}}*/
+
+PyObject *GetPkgRecords(PyObject *Self,PyObject *Args)
+{
+ PyObject *Owner;
+ if (PyArg_ParseTuple(Args,"O!",&PkgCacheType,&Owner) == 0)
+ return 0;
+
+ return HandleErrors(CppOwnedPyObject_NEW<PkgRecordsStruct>(Owner,&PkgRecordsType,
+ GetCpp<pkgCache *>(Owner)));
+}
+