summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorMichael Vogt <egon@bottom>2007-11-29 12:25:33 +0100
committerMichael Vogt <egon@bottom>2007-11-29 12:25:33 +0100
commit0fc4aa9466d57ddc4a54191eeb8775e41ad35525 (patch)
tree93b7f4e949c3c013309d397de200d058ec7b5af5 /python
parentbe3ddb25ea0baa259f20936f1d7a62cafa019b99 (diff)
parentabf6c5801c6b162a9dcda5099e8eb746525dc826 (diff)
downloadpython-apt-0fc4aa9466d57ddc4a54191eeb8775e41ad35525.tar.gz
* apt/package.py:
- fix apt.package.Dependency.relation initialization * python/string.cc: - fix overflow in SizeToStr() * python/metaindex.cc: - added support for the metaIndex objects * python/sourceslist.cc: - support new "List" attribute that returns the list of metaIndex source entries * python/depcache.cc: - be more threading friendly * python/tag.cc - support "None" as default in ParseSection(control).get(field, default), LP: #44470 * python/progress.cc: - fix refcount problem in OpProgress - fix refcount problem in FetchProgress - fix refcount problem in CdromProgress * apt/README.apt: - fix typo (thanks to Thomas Schoepf, closes: #387787) * po/fr.po: - merge update, thanks to Christian Perrier (closes: #435918)
Diffstat (limited to 'python')
-rw-r--r--python/apt_pkgmodule.h3
-rw-r--r--python/depcache.cc25
-rw-r--r--python/makefile2
-rw-r--r--python/metaindex.cc78
-rw-r--r--python/progress.cc11
-rw-r--r--python/sourcelist.cc16
-rw-r--r--python/string.cc2
-rw-r--r--python/tag.cc7
8 files changed, 129 insertions, 15 deletions
diff --git a/python/apt_pkgmodule.h b/python/apt_pkgmodule.h
index d58f4589..f59c8ca0 100644
--- a/python/apt_pkgmodule.h
+++ b/python/apt_pkgmodule.h
@@ -95,5 +95,8 @@ PyObject *GetPkgSourceList(PyObject *Self,PyObject *Args);
// pkgSourceList
extern PyTypeObject PackageIndexFileType;
+// metaIndex
+extern PyTypeObject MetaIndexType;
+
#endif
diff --git a/python/depcache.cc b/python/depcache.cc
index 94ff708c..f44f2f32 100644
--- a/python/depcache.cc
+++ b/python/depcache.cc
@@ -227,17 +227,19 @@ static PyObject *PkgDepCacheGetCandidateVer(PyObject *Self,PyObject *Args)
static PyObject *PkgDepCacheUpgrade(PyObject *Self,PyObject *Args)
{
+ bool res;
pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self);
char distUpgrade=0;
if (PyArg_ParseTuple(Args,"|b",&distUpgrade) == 0)
return 0;
- bool res;
+ Py_BEGIN_ALLOW_THREADS
if(distUpgrade)
res = pkgDistUpgrade(*depcache);
else
res = pkgAllUpgrade(*depcache);
+ Py_END_ALLOW_THREADS
Py_INCREF(Py_None);
return HandleErrors(Py_BuildValue("b",res));
@@ -245,12 +247,15 @@ static PyObject *PkgDepCacheUpgrade(PyObject *Self,PyObject *Args)
static PyObject *PkgDepCacheMinimizeUpgrade(PyObject *Self,PyObject *Args)
{
+ bool res;
pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self);
if (PyArg_ParseTuple(Args,"") == 0)
return 0;
- bool res = pkgMinimizeUpgrade(*depcache);
+ Py_BEGIN_ALLOW_THREADS
+ res = pkgMinimizeUpgrade(*depcache);
+ Py_END_ALLOW_THREADS
Py_INCREF(Py_None);
return HandleErrors(Py_BuildValue("b",res));
@@ -351,8 +356,10 @@ static PyObject *PkgDepCacheMarkInstall(PyObject *Self,PyObject *Args)
&autoInst, &fromUser) == 0)
return 0;
+ Py_BEGIN_ALLOW_THREADS
pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj);
depcache->MarkInstall(Pkg, autoInst, 0, fromUser);
+ Py_END_ALLOW_THREADS
Py_INCREF(Py_None);
return HandleErrors(Py_None);
@@ -652,23 +659,31 @@ PyObject *GetPkgProblemResolver(PyObject *Self,PyObject *Args)
static PyObject *PkgProblemResolverResolve(PyObject *Self,PyObject *Args)
{
+ bool res;
pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self);
char brokenFix=1;
if (PyArg_ParseTuple(Args,"|b",&brokenFix) == 0)
return 0;
- bool res = fixer->Resolve(brokenFix);
+ Py_BEGIN_ALLOW_THREADS
+ res = fixer->Resolve(brokenFix);
+ Py_END_ALLOW_THREADS
return HandleErrors(Py_BuildValue("b", res));
}
static PyObject *PkgProblemResolverResolveByKeep(PyObject *Self,PyObject *Args)
-{
+{
+ bool res;
pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self);
if (PyArg_ParseTuple(Args,"") == 0)
return 0;
- bool res = fixer->ResolveByKeep();
+
+ Py_BEGIN_ALLOW_THREADS
+ res = fixer->ResolveByKeep();
+ Py_END_ALLOW_THREADS
+
return HandleErrors(Py_BuildValue("b", res));
}
diff --git a/python/makefile b/python/makefile
index 24ef3238..e0c62541 100644
--- a/python/makefile
+++ b/python/makefile
@@ -12,7 +12,7 @@ LIB_MAKES = apt-pkg/makefile
APT_PKG_SRC = apt_pkgmodule.cc configuration.cc generic.cc tag.cc string.cc \
cache.cc pkgrecords.cc pkgsrcrecords.cc sourcelist.cc \
depcache.cc progress.cc cdrom.cc acquire.cc pkgmanager.cc \
- indexfile.cc
+ indexfile.cc metaindex.cc
SOURCE := $(APT_PKG_SRC)
include $(PYTHON_H) progress.h
diff --git a/python/metaindex.cc b/python/metaindex.cc
new file mode 100644
index 00000000..c9a86ab4
--- /dev/null
+++ b/python/metaindex.cc
@@ -0,0 +1,78 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+// $Id: metaindex.cc,v 1.2 2003/12/26 17:04:22 mdz Exp $
+/* ######################################################################
+
+ metaindex - Wrapper for the metaIndex functions
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include "generic.h"
+#include "apt_pkgmodule.h"
+
+#include <apt-pkg/metaindex.h>
+
+#include <Python.h>
+
+
+static PyObject *MetaIndexAttr(PyObject *Self,char *Name)
+{
+ metaIndex *meta = GetCpp<metaIndex*>(Self);
+ if (strcmp("URI",Name) == 0)
+ return Safe_FromString(meta->GetURI().c_str());
+ else if (strcmp("Dist",Name) == 0)
+ return Safe_FromString(meta->GetDist().c_str());
+ else if (strcmp("IsTrusted",Name) == 0)
+ return Py_BuildValue("i",(meta->IsTrusted()));
+ else if (strcmp("IndexFiles",Name) == 0)
+ {
+ PyObject *List = PyList_New(0);
+ vector<pkgIndexFile *> *indexFiles = meta->GetIndexFiles();
+ for (vector<pkgIndexFile *>::const_iterator I = indexFiles->begin();
+ I != indexFiles->end(); I++)
+ {
+ PyObject *Obj;
+ Obj = CppPyObject_NEW<pkgIndexFile*>(&PackageIndexFileType,*I);
+ PyList_Append(List,Obj);
+ }
+ return List;
+ }
+}
+
+static PyObject *MetaIndexRepr(PyObject *Self)
+{
+ metaIndex *meta = GetCpp<metaIndex*>(Self);
+
+ char S[1024];
+ snprintf(S,sizeof(S),"<metaIndex object: "
+ "Type='%s', URI:'%s' Dist='%s' IsTrusted='%i'>",
+ meta->GetType(), meta->GetURI().c_str(), meta->GetDist().c_str(),
+ meta->IsTrusted());
+
+ return PyString_FromString(S);
+}
+
+PyTypeObject MetaIndexType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "metaIndex", // tp_name
+ sizeof(CppOwnedPyObject<metaIndex*>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppOwnedDealloc<metaIndex*>, // tp_dealloc
+ 0, // tp_print
+ MetaIndexAttr, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_compare
+ MetaIndexRepr, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+};
+
+
+
+
diff --git a/python/progress.cc b/python/progress.cc
index df9c2ec1..793265db 100644
--- a/python/progress.cc
+++ b/python/progress.cc
@@ -65,10 +65,11 @@ void PyOpProgress::Update()
Py_XDECREF(o);
// Build up the argument list...
- PyObject *arglist = Py_BuildValue("(f)", Percent);
if(CheckChange(0.05))
+ {
+ PyObject *arglist = Py_BuildValue("(f)", Percent);
RunSimpleCallback("update", arglist);
- Py_XDECREF(arglist);
+ }
};
void PyOpProgress::Done()
@@ -163,14 +164,19 @@ bool PyFetchProgress::Pulse(pkgAcquire * Owner)
PyObject *o;
o = Py_BuildValue("f", CurrentCPS);
PyObject_SetAttrString(callbackInst, "currentCPS", o);
+ Py_XDECREF(o);
o = Py_BuildValue("f", CurrentBytes);
PyObject_SetAttrString(callbackInst, "currentBytes", o);
+ Py_XDECREF(o);
o = Py_BuildValue("i", CurrentItems);
PyObject_SetAttrString(callbackInst, "currentItems", o);
+ Py_XDECREF(o);
o = Py_BuildValue("i", TotalItems);
PyObject_SetAttrString(callbackInst, "totalItems", o);
+ Py_XDECREF(o);
o = Py_BuildValue("f", TotalBytes);
PyObject_SetAttrString(callbackInst, "totalBytes", o);
+ Py_XDECREF(o);
PyObject *arglist = Py_BuildValue("()");
PyObject *result;
@@ -306,6 +312,7 @@ void PyCdromProgress::Update(string text, int current)
PyObject *o = Py_BuildValue("i", totalSteps);
PyObject_SetAttrString(callbackInst, "totalSteps", o);
+ Py_XDECREF(o);
RunSimpleCallback("update", arglist);
}
diff --git a/python/sourcelist.cc b/python/sourcelist.cc
index 16e51368..68b764f8 100644
--- a/python/sourcelist.cc
+++ b/python/sourcelist.cc
@@ -80,7 +80,21 @@ static PyMethodDef PkgSourceListMethods[] =
static PyObject *PkgSourceListAttr(PyObject *Self,char *Name)
{
- return Py_FindMethod(PkgSourceListMethods,Self,Name);
+ pkgSourceList *list = GetCpp<pkgSourceList*>(Self);
+
+ if (strcmp("List",Name) == 0)
+ {
+ PyObject *List = PyList_New(0);
+ for (vector<metaIndex *>::const_iterator I = list->begin();
+ I != list->end(); I++)
+ {
+ PyObject *Obj;
+ Obj = CppPyObject_NEW<metaIndex*>(&MetaIndexType,*I);
+ PyList_Append(List,Obj);
+ }
+ return List;
+ }
+ return Py_FindMethod(PkgSourceListMethods,Self,Name);
}
PyTypeObject PkgSourceListType =
{
diff --git a/python/string.cc b/python/string.cc
index d0926da5..1fa5a901 100644
--- a/python/string.cc
+++ b/python/string.cc
@@ -55,7 +55,7 @@ PyObject *StrSizeToStr(PyObject *Self,PyObject *Args)
if (PyInt_Check(Obj))
return CppPyString(SizeToStr(PyInt_AsLong(Obj)));
if (PyLong_Check(Obj))
- return CppPyString(SizeToStr(PyLong_AsLong(Obj)));
+ return CppPyString(SizeToStr(PyLong_AsDouble(Obj)));
if (PyFloat_Check(Obj))
return CppPyString(SizeToStr(PyFloat_AsDouble(Obj)));
diff --git a/python/tag.cc b/python/tag.cc
index d0d862c9..4b378a55 100644
--- a/python/tag.cc
+++ b/python/tag.cc
@@ -78,7 +78,7 @@ static PyObject *TagSecFind(PyObject *Self,PyObject *Args)
{
char *Name = 0;
char *Default = 0;
- if (PyArg_ParseTuple(Args,"s|s",&Name,&Default) == 0)
+ if (PyArg_ParseTuple(Args,"s|z",&Name,&Default) == 0)
return 0;
const char *Start;
@@ -86,10 +86,7 @@ static PyObject *TagSecFind(PyObject *Self,PyObject *Args)
if (GetCpp<pkgTagSection>(Self).Find(Name,Start,Stop) == false)
{
if (Default == 0)
- {
- Py_INCREF(Py_None);
- return Py_None;
- }
+ Py_RETURN_NONE;
return PyString_FromString(Default);
}
return PyString_FromStringAndSize(Start,Stop-Start);