summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <egon@bottom>2007-05-02 18:50:26 +0200
committerMichael Vogt <egon@bottom>2007-05-02 18:50:26 +0200
commite537ea9f6a1905c6ec4af01367851b053dfca40e (patch)
tree53ad39505bf788a5f858abb954dedbc964539314
parent500e805d3fa7faee957e67410f525435224f1e21 (diff)
parentfd31f9b76508663d24c9a5684784cff18c235170 (diff)
downloadpython-apt-e537ea9f6a1905c6ec4af01367851b053dfca40e.tar.gz
* merged from http://people.ubuntu.com/~mvo/bzr/python-apt/ddtp/
-rw-r--r--apt/package.py7
-rw-r--r--doc/examples/desc.py25
-rw-r--r--python/cache.cc69
3 files changed, 101 insertions, 0 deletions
diff --git a/apt/package.py b/apt/package.py
index 13481be3..fb30209f 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -200,6 +200,9 @@ class Package(object):
""" Return the short description (one line summary) """
if not self._lookupRecord():
return ""
+ ver = self._depcache.GetCandidateVer(self._pkg)
+ desc_iter = ver.TranslatedDescription
+ self._records.Lookup(desc_iter.FileList.pop(0))
return self._records.ShortDesc
summary = property(summary)
@@ -207,6 +210,10 @@ class Package(object):
""" Return the formated long description """
if not self._lookupRecord():
return ""
+ # get the translated description
+ ver = self._depcache.GetCandidateVer(self._pkg)
+ desc_iter = ver.TranslatedDescription
+ self._records.Lookup(desc_iter.FileList.pop(0))
desc = ""
try:
tmp = unicode(self._records.LongDesc)
diff --git a/doc/examples/desc.py b/doc/examples/desc.py
new file mode 100644
index 00000000..87b9473b
--- /dev/null
+++ b/doc/examples/desc.py
@@ -0,0 +1,25 @@
+
+import apt_pkg
+
+apt_pkg.init()
+
+apt_pkg.Config.Set("APT::Acquire::Translation","de")
+
+cache = apt_pkg.GetCache()
+depcache = apt_pkg.GetDepCache(cache)
+
+pkg = cache["gcc"]
+cand = depcache.GetCandidateVer(pkg)
+print cand
+
+desc = cand.TranslatedDescription
+print desc
+print desc.FileList
+(f,index) = desc.FileList.pop(0)
+
+records = apt_pkg.GetPkgRecords(cache)
+records.Lookup((f,index))
+desc = records.LongDesc
+print len(desc)
+print desc
+
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)