summaryrefslogtreecommitdiff
path: root/python/pkgrecords.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2009-04-15 20:29:30 +0200
committerJulian Andres Klode <jak@debian.org>2009-04-15 20:29:30 +0200
commit49c10e3b9f6760280761f1255f3182637ba0ac9e (patch)
tree611819fece2da28d796b184457fb413f1f7b497d /python/pkgrecords.cc
parent23d29169c30b2f05a0c2943832a7cf7288ff5802 (diff)
parentabc7c861e85265b0725aa82a51fe41f9183bc506 (diff)
downloadpython-apt-49c10e3b9f6760280761f1255f3182637ba0ac9e.tar.gz
python-apt (0.7.90) experimental; urgency=low
* Introduce support for Python 3 (Closes: #523645) * Support the 'in' operator (e.g. "k in d") in Configuration{,Ptr,Sub} objects (e.g. apt_pkg.Config) and in TagSections (apt_pkg.ParseSection()) * Replace support for file objects with a more generic support for any object providing a fileno() method and for file descriptors (integers). * Add support for the Breaks fields * Only create Package objects when they are requested, do not keep them in a dict. Saves 10MB for 25,000 packages on my machine. * apt/package.py: Allow to set the candidate of a package (Closes: #523997) - Support assignments to the 'candidate' property of Package objects. - Initial patch by Sebastian Heinlein -- Julian Andres Klode <jak@debian.org> Wed, 15 Apr 2009 13:47:42 +0200
Diffstat (limited to 'python/pkgrecords.cc')
-rw-r--r--python/pkgrecords.cc131
1 files changed, 95 insertions, 36 deletions
diff --git a/python/pkgrecords.cc b/python/pkgrecords.cc
index 5359ee6f..978de6b7 100644
--- a/python/pkgrecords.cc
+++ b/python/pkgrecords.cc
@@ -53,55 +53,98 @@ static PyMethodDef PkgRecordsMethods[] =
{}
};
-static PyObject *PkgRecordsAttr(PyObject *Self,char *Name)
-{
+/**
+ * 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<PkgRecordsStruct>(Self);
+ if (Struct.Last == 0)
+ PyErr_SetString(PyExc_AttributeError,name);
+ return Struct;
+}
- 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("SHA1Hash",Name) == 0)
- return CppPyString(Struct.Last->SHA1Hash());
- else if (strcmp("SHA256Hash",Name) == 0)
- return CppPyString(Struct.Last->SHA256Hash());
- else if (strcmp("SourcePkg",Name) == 0)
- return CppPyString(Struct.Last->SourcePkg());
- else if (strcmp("SourceVer",Name) == 0)
- return CppPyString(Struct.Last->SourceVer());
- 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());
- else if (strcmp("Homepage",Name) == 0)
- return CppPyString(Struct.Last->Homepage());
- else if (strcmp("Record", Name) == 0)
- {
- const char *start, *stop;
- Struct.Last->GetRec(start, stop);
- return PyString_FromStringAndSize(start,stop-start);
- }
- }
-
- return Py_FindMethod(PkgRecordsMethods,Self,Name);
+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<PkgRecordsStruct>), // tp_basicsize
0, // tp_itemsize
// Methods
CppOwnedDealloc<PkgRecordsStruct>, // tp_dealloc
0, // tp_print
- PkgRecordsAttr, // tp_getattr
+ 0, // tp_getattr
0, // tp_setattr
0, // tp_compare
0, // tp_repr
@@ -109,6 +152,22 @@ PyTypeObject PkgRecordsType =
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
};
/*}}}*/