summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2007-06-14 11:31:56 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2007-06-14 11:31:56 +0200
commit204ba672314d9ed07ca76770a32a6af5fbd67c25 (patch)
treef427cec965fcd27822fae3617478768d4f0f26ea /python
parentbe05af84c65c7d4bae3cbd949304b9dd7020054f (diff)
parent3c2d0313a45668770e7cb2993dc092fb4e711bb7 (diff)
downloadpython-apt-204ba672314d9ed07ca76770a32a6af5fbd67c25.tar.gz
* build against the new apt
* support for new "aptsources" pythn module (thanks to Sebastian Heinlein) * merged support for translated package descriptions * merged support for automatic removal of unused dependencies * merged http://glatzor.de/bzr/python-apt/sebi: - this means that the new aptsources modules is available * support translated pacakge descriptions * support automatic dependency information * python/depcache.cc: - "IsGarbage()" method added (to support auto-mark)
Diffstat (limited to 'python')
-rw-r--r--python/apt_pkgmodule.cc1
-rw-r--r--python/apt_pkgmodule.h1
-rw-r--r--python/cache.cc69
-rw-r--r--python/depcache.cc106
4 files changed, 175 insertions, 2 deletions
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index 627eaced..a0352d4e 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -431,6 +431,7 @@ static PyMethodDef methods[] =
// misc
{"GetPkgProblemResolver",GetPkgProblemResolver,METH_VARARGS,"GetDepProblemResolver(DepCache) -> PkgProblemResolver"},
+ {"GetPkgActionGroup",GetPkgActionGroup,METH_VARARGS,"GetPkgActionGroup(DepCache) -> PkgActionGroup"},
// Cdrom
{"GetCdrom",GetCdrom,METH_VARARGS,"GetCdrom() -> Cdrom"},
diff --git a/python/apt_pkgmodule.h b/python/apt_pkgmodule.h
index fe7dfe88..d58f4589 100644
--- a/python/apt_pkgmodule.h
+++ b/python/apt_pkgmodule.h
@@ -67,6 +67,7 @@ PyObject *GetDepCache(PyObject *Self,PyObject *Args);
// pkgProblemResolver
extern PyTypeObject PkgProblemResolverType;
PyObject *GetPkgProblemResolver(PyObject *Self, PyObject *Args);
+PyObject *GetPkgActionGroup(PyObject *Self, PyObject *Args);
// cdrom
extern PyTypeObject PkgCdromType;
diff --git a/python/cache.cc b/python/cache.cc
index b6278de0..aa4d9ffc 100644
--- a/python/cache.cc
+++ b/python/cache.cc
@@ -443,6 +443,69 @@ PyTypeObject PackageType =
0, // tp_hash
};
/*}}}*/
+// Description Class /*{{{*/
+// ---------------------------------------------------------------------
+static PyObject *DescriptionAttr(PyObject *Self,char *Name)
+{
+ 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++)
+ {
+ 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;
+ }
+ PyErr_SetString(PyExc_AttributeError,Name);
+ return 0;
+}
+
+static PyObject *DescriptionRepr(PyObject *Self)
+{
+ pkgCache::DescIterator &Desc = GetCpp<pkgCache::DescIterator>(Self);
+
+ char S[300];
+ snprintf(S,sizeof(S),
+ "<pkgCache::Description object: language_code:'%s' md5:'%s' ",
+ Desc.LanguageCode(), Desc.md5());
+ return PyString_FromString(S);
+}
+
+PyTypeObject DescriptionType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "pkgCache::DescIterator", // tp_name
+ sizeof(CppOwnedPyObject<pkgCache::DescIterator>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppOwnedDealloc<pkgCache::DescIterator>, // tp_dealloc
+ 0, // tp_print
+ DescriptionAttr, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_compare
+ DescriptionRepr, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+};
+ /*}}}*/
// Version Class /*{{{*/
// ---------------------------------------------------------------------
@@ -571,6 +634,11 @@ static PyObject *VersionAttr(PyObject *Self,char *Name)
return PyString_FromString(Ver.PriorityType());
else if (strcmp("Downloadable", Name) == 0)
return Py_BuildValue("b", Ver.Downloadable());
+ else if (strcmp("TranslatedDescription", Name) == 0) {
+ return CppOwnedPyObject_NEW<pkgCache::DescIterator>(Owner,
+ &DescriptionType,
+ Ver.TranslatedDescription());
+ }
#if 0 // FIXME: enable once pkgSourceList is stored somewhere
else if (strcmp("IsTrusted", Name) == 0)
{
@@ -625,6 +693,7 @@ PyTypeObject VersionType =
};
/*}}}*/
+
// PackageFile Class /*{{{*/
// ---------------------------------------------------------------------
static PyObject *PackageFileAttr(PyObject *Self,char *Name)
diff --git a/python/depcache.cc b/python/depcache.cc
index e8140e2b..94ff708c 100644
--- a/python/depcache.cc
+++ b/python/depcache.cc
@@ -346,11 +346,13 @@ static PyObject *PkgDepCacheMarkInstall(PyObject *Self,PyObject *Args)
PyObject *PackageObj;
char autoInst=1;
- if (PyArg_ParseTuple(Args,"O!|b",&PackageType,&PackageObj, &autoInst) == 0)
+ char fromUser=1;
+ if (PyArg_ParseTuple(Args,"O!|bb",&PackageType,&PackageObj,
+ &autoInst, &fromUser) == 0)
return 0;
pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj);
- depcache->MarkInstall(Pkg, autoInst);
+ depcache->MarkInstall(Pkg, autoInst, 0, fromUser);
Py_INCREF(Py_None);
return HandleErrors(Py_None);
@@ -370,6 +372,34 @@ static PyObject *PkgDepCacheIsUpgradable(PyObject *Self,PyObject *Args)
return HandleErrors(Py_BuildValue("b",state.Upgradable()));
}
+static PyObject *PkgDepCacheIsGarbage(PyObject *Self,PyObject *Args)
+{
+ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self);
+
+ PyObject *PackageObj;
+ if (PyArg_ParseTuple(Args,"O!",&PackageType,&PackageObj) == 0)
+ return 0;
+
+ pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj);
+ pkgDepCache::StateCache &state = (*depcache)[Pkg];
+
+ return HandleErrors(Py_BuildValue("b",state.Garbage));
+}
+
+static PyObject *PkgDepCacheIsAutoInstalled(PyObject *Self,PyObject *Args)
+{
+ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self);
+
+ PyObject *PackageObj;
+ if (PyArg_ParseTuple(Args,"O!",&PackageType,&PackageObj) == 0)
+ return 0;
+
+ pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj);
+ pkgDepCache::StateCache &state = (*depcache)[Pkg];
+
+ return HandleErrors(Py_BuildValue("b",state.Flags & pkgCache::Flag::Auto));
+}
+
static PyObject *PkgDepCacheIsNowBroken(PyObject *Self,PyObject *Args)
{
pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self);
@@ -507,6 +537,8 @@ static PyMethodDef PkgDepCacheMethods[] =
{"IsUpgradable",PkgDepCacheIsUpgradable,METH_VARARGS,"Is pkg upgradable"},
{"IsNowBroken",PkgDepCacheIsNowBroken,METH_VARARGS,"Is pkg is now broken"},
{"IsInstBroken",PkgDepCacheIsInstBroken,METH_VARARGS,"Is pkg broken on the current install"},
+ {"IsGarbage",PkgDepCacheIsGarbage,METH_VARARGS,"Is pkg garbage (mark-n-sweep)"},
+ {"IsAutoInstalled",PkgDepCacheIsAutoInstalled,METH_VARARGS,"Is pkg marked as auto installed"},
{"MarkedInstall",PkgDepCacheMarkedInstall,METH_VARARGS,"Is pkg marked for install"},
{"MarkedUpgrade",PkgDepCacheMarkedUpgrade,METH_VARARGS,"Is pkg marked for upgrade"},
{"MarkedDelete",PkgDepCacheMarkedDelete,METH_VARARGS,"Is pkg marked for delete"},
@@ -730,3 +762,73 @@ PyTypeObject PkgProblemResolverType =
};
/*}}}*/
+
+// pkgActionGroup Class /*{{{*/
+// ---------------------------------------------------------------------
+
+
+static PyObject *PkgActionGroupRelease(PyObject *Self,PyObject *Args)
+{
+ pkgDepCache::ActionGroup *ag = GetCpp<pkgDepCache::ActionGroup*>(Self);
+ if (PyArg_ParseTuple(Args,"") == 0)
+ return 0;
+ ag->release();
+ Py_INCREF(Py_None);
+ return HandleErrors(Py_None);
+}
+
+static PyMethodDef PkgActionGroupMethods[] =
+{
+ {"release", PkgActionGroupRelease, METH_VARARGS, "release()"},
+ {}
+};
+
+
+static PyObject *ActionGroupAttr(PyObject *Self,char *Name)
+{
+ pkgDepCache::ActionGroup *ag = GetCpp<pkgDepCache::ActionGroup*>(Self);
+
+ return Py_FindMethod(PkgActionGroupMethods,Self,Name);
+}
+
+
+PyTypeObject PkgActionGroupType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "pkgActionGroup", // tp_name
+ sizeof(CppOwnedPyObject<pkgDepCache::ActionGroup*>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppOwnedDealloc<pkgDepCache::ActionGroup*>, // tp_dealloc
+ 0, // tp_print
+ ActionGroupAttr, // 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 *GetPkgActionGroup(PyObject *Self,PyObject *Args)
+{
+ PyObject *Owner;
+ if (PyArg_ParseTuple(Args,"O!",&PkgDepCacheType,&Owner) == 0)
+ return 0;
+
+ pkgDepCache *depcache = GetCpp<pkgDepCache*>(Owner);
+ pkgDepCache::ActionGroup *group = new pkgDepCache::ActionGroup(*depcache);
+ CppOwnedPyObject<pkgDepCache::ActionGroup*> *PkgActionGroupPyObj;
+ PkgActionGroupPyObj = CppOwnedPyObject_NEW<pkgDepCache::ActionGroup*>(Owner,
+ &PkgActionGroupType,
+ group);
+ HandleErrors(PkgActionGroupPyObj);
+
+ return PkgActionGroupPyObj;
+
+}
+
+
+ /*}}}*/