summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/acquire.cc102
-rw-r--r--python/apt_pkgmodule.cc4
-rw-r--r--python/apt_pkgmodule.h2
-rw-r--r--python/cache.cc198
4 files changed, 188 insertions, 118 deletions
diff --git a/python/acquire.cc b/python/acquire.cc
index 053753cd..abd3884d 100644
--- a/python/acquire.cc
+++ b/python/acquire.cc
@@ -12,46 +12,50 @@
#include <apt-pkg/acquire-item.h>
-// pkgAcquire::Item
-static PyObject *AcquireItemAttr(PyObject *Self,char *Name)
-{
- pkgAcquire::ItemIterator &I = GetCpp<pkgAcquire::ItemIterator>(Self);
-
- if (strcmp("ID",Name) == 0)
- return Py_BuildValue("i",(*I)->ID);
- else if (strcmp("Status",Name) == 0)
- return Py_BuildValue("i",(*I)->Status);
- else if (strcmp("Complete",Name) == 0)
- return Py_BuildValue("i",(*I)->Complete);
- else if (strcmp("Local",Name) == 0)
- return Py_BuildValue("i",(*I)->Local);
- else if (strcmp("IsTrusted",Name) == 0)
- return Py_BuildValue("i",(*I)->IsTrusted());
- else if (strcmp("FileSize",Name) == 0)
- return Py_BuildValue("i",(*I)->FileSize);
- else if (strcmp("ErrorText",Name) == 0)
- return Safe_FromString((*I)->ErrorText.c_str());
- else if (strcmp("DestFile",Name) == 0)
- return Safe_FromString((*I)->DestFile.c_str());
- else if (strcmp("DescURI",Name) == 0)
- return Safe_FromString((*I)->DescURI().c_str());
- // constants
- else if (strcmp("StatIdle",Name) == 0)
- return Py_BuildValue("i", pkgAcquire::Item::StatIdle);
- else if (strcmp("StatFetching",Name) == 0)
- return Py_BuildValue("i", pkgAcquire::Item::StatFetching);
- else if (strcmp("StatDone",Name) == 0)
- return Py_BuildValue("i", pkgAcquire::Item::StatDone);
- else if (strcmp("StatError",Name) == 0)
- return Py_BuildValue("i", pkgAcquire::Item::StatError);
- else if (strcmp("StatAuthError",Name) == 0)
- return Py_BuildValue("i", pkgAcquire::Item::StatAuthError);
-
-
- PyErr_SetString(PyExc_AttributeError,Name);
- return 0;
+#define MkGet(PyFunc,Ret) static PyObject *PyFunc(PyObject *Self,void*) \
+{ \
+ pkgAcquire::ItemIterator &I = GetCpp<pkgAcquire::ItemIterator>(Self); \
+ return Ret; \
}
+// Define our getters
+MkGet(AcquireItemGetComplete,Py_BuildValue("i",(*I)->Complete));
+MkGet(AcquireItemGetDescURI,Safe_FromString((*I)->DescURI().c_str()));
+MkGet(AcquireItemGetDestFile,Safe_FromString((*I)->DestFile.c_str()));
+MkGet(AcquireItemGetErrorText,Safe_FromString((*I)->ErrorText.c_str()));
+MkGet(AcquireItemGetFileSize,Py_BuildValue("i",(*I)->FileSize));
+MkGet(AcquireItemGetID,Py_BuildValue("i",(*I)->ID));
+MkGet(AcquireItemGetIsTrusted,Py_BuildValue("i",(*I)->IsTrusted()));
+MkGet(AcquireItemGetLocal,Py_BuildValue("i",(*I)->Local));
+MkGet(AcquireItemGetStatus,Py_BuildValue("i",(*I)->Status));
+
+// Constants
+MkGet(AcquireItemGetStatIdle,Py_BuildValue("i", pkgAcquire::Item::StatIdle));
+MkGet(AcquireItemGetStatFetching,Py_BuildValue("i", pkgAcquire::Item::StatFetching));
+MkGet(AcquireItemGetStatDone,Py_BuildValue("i", pkgAcquire::Item::StatDone));
+MkGet(AcquireItemGetStatError,Py_BuildValue("i", pkgAcquire::Item::StatError));
+MkGet(AcquireItemGetStatAuthError,Py_BuildValue("i", pkgAcquire::Item::StatAuthError));
+#undef MkGet
+
+static PyGetSetDef AcquireItemGetSet[] = {
+ {"Complete",AcquireItemGetComplete},
+ {"DescURI",AcquireItemGetDescURI},
+ {"DestFile",AcquireItemGetDestFile},
+ {"ErrorText",AcquireItemGetErrorText},
+ {"FileSize",AcquireItemGetFileSize},
+ {"ID",AcquireItemGetID},
+ {"IsTrusted",AcquireItemGetIsTrusted},
+ {"Local",AcquireItemGetLocal},
+ {"Status",AcquireItemGetStatus},
+ {"StatIdle",AcquireItemGetStatIdle},
+ {"StatFetching",AcquireItemGetStatFetching},
+ {"StatDone",AcquireItemGetStatDone},
+ {"StatError",AcquireItemGetStatError},
+ {"StatAuthError",AcquireItemGetStatAuthError},
+ {}
+};
+
+
static PyObject *AcquireItemRepr(PyObject *Self)
{
@@ -81,14 +85,30 @@ PyTypeObject AcquireItemType =
// Methods
CppOwnedDealloc<pkgAcquire::ItemIterator>, // tp_dealloc
0, // tp_print
- AcquireItemAttr, // tp_getattr
+ 0, // tp_getattr
0, // tp_setattr
0, // tp_compare
AcquireItemRepr, // tp_repr
0, // tp_as_number
- 0, // tp_as_sequence
- 0, // tp_as_mapping
+ 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
+ "AcquireItem Object", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ 0, // tp_methods
+ 0, // tp_members
+ AcquireItemGetSet, // tp_getset
};
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index e71d8ee6..3beec747 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -524,7 +524,9 @@ extern "C" void initapt_pkg()
if (PyType_Ready(&PkgManagerType) == -1) INIT_ERROR;
if (PyType_Ready(&PkgSrcRecordsType) == -1) INIT_ERROR;
if (PyType_Ready(&PkgRecordsType) == -1) INIT_ERROR;
-
+ if (PyType_Ready(&AcquireItemType) == -1) INIT_ERROR;
+ if (PyType_Ready(&PackageType) == -1) INIT_ERROR;
+ if (PyType_Ready(&DescriptionType) == -1) INIT_ERROR;
// Initialize the module
#if PY_MAJOR_VERSION >= 3
diff --git a/python/apt_pkgmodule.h b/python/apt_pkgmodule.h
index d2631864..424c4788 100644
--- a/python/apt_pkgmodule.h
+++ b/python/apt_pkgmodule.h
@@ -56,6 +56,7 @@ PyObject *StrCheckDomainList(PyObject *Self,PyObject *Args);
extern PyTypeObject PkgCacheType;
extern PyTypeObject PkgCacheFileType;
extern PyTypeObject PkgListType;
+extern PyTypeObject DescriptionType;
extern PyTypeObject PackageType;
extern PyTypeObject PackageFileType;
extern PyTypeObject DependencyType;
@@ -77,6 +78,7 @@ extern PyTypeObject PkgCdromType;
PyObject *GetCdrom(PyObject *Self,PyObject *Args);
// acquire
+extern PyTypeObject AcquireItemType;
extern PyTypeObject PkgAcquireType;
extern char *doc_GetPkgAcqFile;
PyObject *GetAcquire(PyObject *Self,PyObject *Args);
diff --git a/python/cache.cc b/python/cache.cc
index 957681ba..52c5982e 100644
--- a/python/cache.cc
+++ b/python/cache.cc
@@ -368,65 +368,73 @@ PyTypeObject PkgListType =
0, // tp_hash
};
- /*}}}*/
-// Package Class /*{{{*/
-// ---------------------------------------------------------------------
-static PyObject *PackageAttr(PyObject *Self,char *Name)
+#define MkGet(PyFunc,Ret) static PyObject *PyFunc(PyObject *Self,void*) \
+{ \
+ pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(Self); \
+ PyObject *Owner = GetOwner<pkgCache::PkgIterator>(Self); \
+ return Ret; \
+}
+
+MkGet(PackageGetName,PyString_FromString(Pkg.Name()));
+MkGet(PackageGetSection,Safe_FromString(Pkg.Section()));
+MkGet(PackageGetRevDependsList,CppOwnedPyObject_NEW<RDepListStruct>(Owner,
+ &RDepListType, Pkg.RevDependsList()));
+MkGet(PackageGetProvidesList,CreateProvides(Owner,Pkg.ProvidesList()));
+MkGet(PackageGetSelectedState,Py_BuildValue("i",Pkg->SelectedState));
+MkGet(PackageGetInstState,Py_BuildValue("i",Pkg->InstState));
+MkGet(PackageGetCurrentState,Py_BuildValue("i",Pkg->CurrentState));
+MkGet(PackageGetID,Py_BuildValue("i",Pkg->ID));
+#
+MkGet(PackageGetAuto,Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Auto) != 0));
+MkGet(PackageGetEssential,Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Essential) != 0));
+MkGet(PackageGetImportant,Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Important) != 0));
+#undef MkGet
+
+static PyObject *PackageGetVersionList(PyObject *Self,void*)
{
pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(Self);
PyObject *Owner = GetOwner<pkgCache::PkgIterator>(Self);
- if (strcmp("Name",Name) == 0)
- return PyString_FromString(Pkg.Name());
- else if (strcmp("VersionList",Name) == 0)
+ PyObject *List = PyList_New(0);
+ for (pkgCache::VerIterator I = Pkg.VersionList(); I.end() == false; I++)
{
- PyObject *List = PyList_New(0);
- for (pkgCache::VerIterator I = Pkg.VersionList(); I.end() == false; I++)
- {
- PyObject *Obj;
- Obj = CppOwnedPyObject_NEW<pkgCache::VerIterator>(Owner,&VersionType,I);
- PyList_Append(List,Obj);
- Py_DECREF(Obj);
- }
- return List;
+ PyObject *Obj;
+ Obj = CppOwnedPyObject_NEW<pkgCache::VerIterator>(Owner,&VersionType,I);
+ PyList_Append(List,Obj);
+ Py_DECREF(Obj);
}
- else if (strcmp("CurrentVer",Name) == 0)
+ return List;
+}
+static PyObject *PackageGetCurrentVer(PyObject *Self,void*)
+{
+ pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(Self);
+ PyObject *Owner = GetOwner<pkgCache::PkgIterator>(Self);
+ if (Pkg->CurrentVer == 0)
{
- if (Pkg->CurrentVer == 0)
- {
- Py_INCREF(Py_None);
- return Py_None;
- }
-
- return CppOwnedPyObject_NEW<pkgCache::VerIterator>(Owner,&VersionType,
- Pkg.CurrentVer());
+ Py_INCREF(Py_None);
+ return Py_None;
}
- else if (strcmp("Section",Name) == 0)
- return Safe_FromString(Pkg.Section());
- else if (strcmp("RevDependsList",Name) == 0)
- return CppOwnedPyObject_NEW<RDepListStruct>(Owner,&RDepListType,
- Pkg.RevDependsList());
- else if (strcmp("ProvidesList",Name) == 0)
- return CreateProvides(Owner,Pkg.ProvidesList());
- else if (strcmp("SelectedState",Name) == 0)
- return Py_BuildValue("i",Pkg->SelectedState);
- else if (strcmp("InstState",Name) == 0)
- return Py_BuildValue("i",Pkg->InstState);
- else if (strcmp("CurrentState",Name) == 0)
- return Py_BuildValue("i",Pkg->CurrentState);
- else if (strcmp("ID",Name) == 0)
- return Py_BuildValue("i",Pkg->ID);
- else if (strcmp("Auto",Name) == 0)
- return Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Auto) != 0);
- else if (strcmp("Essential",Name) == 0)
- return Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Essential) != 0);
- else if (strcmp("Important",Name) == 0)
- return Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Important) != 0);
-
- PyErr_SetString(PyExc_AttributeError,Name);
- return 0;
+ return CppOwnedPyObject_NEW<pkgCache::VerIterator>(Owner,&VersionType,
+ Pkg.CurrentVer());
}
+static PyGetSetDef PackageGetSet[] = {
+ {"Name",PackageGetName},
+ {"Section",PackageGetSection},
+ {"RevDependsList",PackageGetRevDependsList},
+ {"ProvidesList",PackageGetProvidesList},
+ {"SelectedState",PackageGetSelectedState},
+ {"InstState",PackageGetInstState},
+ {"CurrentState",PackageGetCurrentState},
+ {"ID",PackageGetID},
+ {"Auto",PackageGetID},
+ {"Essential",PackageGetEssential},
+ {"Important",PackageGetImportant},
+ {"VersionList",PackageGetVersionList},
+ {"CurrentVer",PackageGetCurrentVer},
+ {}
+};
+
static PyObject *PackageRepr(PyObject *Self)
{
pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(Self);
@@ -450,7 +458,7 @@ PyTypeObject PackageType =
// Methods
CppOwnedDealloc<pkgCache::PkgIterator>, // tp_dealloc
0, // tp_print
- PackageAttr, // tp_getattr
+ 0, // tp_getattr
0, // tp_setattr
0, // tp_compare
PackageRepr, // tp_repr
@@ -458,40 +466,62 @@ PyTypeObject PackageType =
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
+ "Package Object", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ 0, // tp_methods
+ 0, // tp_members
+ PackageGetSet, // tp_getset
};
- /*}}}*/
-// Description Class /*{{{*/
-// ---------------------------------------------------------------------
-static PyObject *DescriptionAttr(PyObject *Self,char *Name)
+
+#define Description_MkGet(PyFunc,Ret) static PyObject \
+ *PyFunc(PyObject *Self,void*) { \
+ pkgCache::DescIterator &Desc = GetCpp<pkgCache::DescIterator>(Self); \
+ return Ret; }
+
+Description_MkGet(DescriptionGetLanguageCode,
+ PyString_FromString(Desc.LanguageCode()));
+Description_MkGet(DescriptionGetMd5,Safe_FromString(Desc.md5()));
+#undef Description_MkGet
+
+static PyObject *DescriptionGetFileList(PyObject *Self,void*)
{
pkgCache::DescIterator &Desc = GetCpp<pkgCache::DescIterator>(Self);
PyObject *Owner = GetOwner<pkgCache::DescIterator>(Self);
- if (strcmp("LanguageCode",Name) == 0)
- return PyString_FromString(Desc.LanguageCode());
- else if (strcmp("md5",Name) == 0)
- return Safe_FromString(Desc.md5());
- else if (strcmp("FileList",Name) == 0)
+ /* The second value in the tuple is the index of the VF item. If the
+ user wants to request a lookup then that number will be used.
+ Maybe later it can become an object. */
+ PyObject *List = PyList_New(0);
+ for (pkgCache::DescFileIterator I = Desc.FileList(); I.end() == false; I++)
{
- /* The second value in the tuple is the index of the VF item. If the
- user wants to request a lookup then that number will be used.
- Maybe later it can become an object. */
- PyObject *List = PyList_New(0);
- for (pkgCache::DescFileIterator I = Desc.FileList(); I.end() == false; I++)
- {
- PyObject *DescFile;
- PyObject *Obj;
- DescFile = CppOwnedPyObject_NEW<pkgCache::PkgFileIterator>(Owner,&PackageFileType,I.File());
- Obj = Py_BuildValue("Nl",DescFile,I.Index());
- PyList_Append(List,Obj);
- Py_DECREF(Obj);
- }
- return List;
+ PyObject *DescFile;
+ PyObject *Obj;
+ DescFile = CppOwnedPyObject_NEW<pkgCache::PkgFileIterator>(Owner,&PackageFileType,I.File());
+ Obj = Py_BuildValue("Nl",DescFile,I.Index());
+ PyList_Append(List,Obj);
+ Py_DECREF(Obj);
}
- PyErr_SetString(PyExc_AttributeError,Name);
- return 0;
+ return List;
}
+static PyGetSetDef DescriptionGetSet[] = {
+ {"LanguageCode",DescriptionGetLanguageCode},
+ {"md5",DescriptionGetMd5},
+ {"FileList",DescriptionGetFileList},
+ {}
+};
+
static PyObject *DescriptionRepr(PyObject *Self)
{
pkgCache::DescIterator &Desc = GetCpp<pkgCache::DescIterator>(Self);
@@ -515,7 +545,7 @@ PyTypeObject DescriptionType =
// Methods
CppOwnedDealloc<pkgCache::DescIterator>, // tp_dealloc
0, // tp_print
- DescriptionAttr, // tp_getattr
+ 0, // tp_getattr
0, // tp_setattr
0, // tp_compare
DescriptionRepr, // tp_repr
@@ -523,6 +553,22 @@ PyTypeObject DescriptionType =
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
+ "AcquireItem Object", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ 0, // tp_methods
+ 0, // tp_members
+ DescriptionGetSet, // tp_getset
};
/*}}}*/
// Version Class /*{{{*/