summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt/debfile.py10
-rw-r--r--apt/package.py4
-rw-r--r--debian/changelog7
-rw-r--r--doc/source/apt_pkg/cache.rst4
-rw-r--r--python/apt_pkgmodule.cc4
-rw-r--r--python/tag.cc47
6 files changed, 53 insertions, 23 deletions
diff --git a/apt/debfile.py b/apt/debfile.py
index 0406a250..8d4f534c 100644
--- a/apt/debfile.py
+++ b/apt/debfile.py
@@ -463,18 +463,18 @@ class DscSrcPackage(DebPackage):
try:
while tagfile.Step() == 1:
for tag in depends_tags:
- if not sec.has_key(tag):
+ if not tag in sec:
continue
self._depends.extend(apt_pkg.ParseSrcDepends(sec[tag]))
for tag in conflicts_tags:
- if not sec.has_key(tag):
+ if not tag in sec:
continue
self._conflicts.extend(apt_pkg.ParseSrcDepends(sec[tag]))
- if sec.has_key('Source'):
+ if 'Source' in sec:
self.pkgname = sec['Source']
- if sec.has_key('Binary'):
+ if 'Binary' in sec:
self.binaries = sec['Binary'].split(', ')
- if sec.has_key('Version'):
+ if 'Version' in sec:
self._sections['Version'] = sec['Version']
finally:
del sec
diff --git a/apt/package.py b/apt/package.py
index ec88a456..e308da4b 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -157,7 +157,7 @@ class Record(object):
return self._rec[key]
def __contains__(self, key):
- return self._rec.has_key(key)
+ return key in self._rec
def __iter__(self):
return iter(self._rec.keys())
@@ -176,7 +176,7 @@ class Record(object):
def has_key(self, key):
"""deprecated form of 'key in x'."""
- return self._rec.has_key(key)
+ return key in self._rec
class Version(object):
diff --git a/debian/changelog b/debian/changelog
index 83b00150..f623254e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+python-apt (0.7.11) UNRELEASED; urgency=low
+
+ * python/tag.cc:
+ - Support 'key in mapping' for TagSections
+
+ -- Julian Andres Klode <jak@debian.org> Mon, 13 Apr 2009 18:08:10 +0200
+
python-apt (0.7.10.3) unstable; urgency=low
* apt/package.py: Handle cases where no candidate is available, by returning
diff --git a/doc/source/apt_pkg/cache.rst b/doc/source/apt_pkg/cache.rst
index af67d82f..146c2c2a 100644
--- a/doc/source/apt_pkg/cache.rst
+++ b/doc/source/apt_pkg/cache.rst
@@ -1199,6 +1199,10 @@ broken dependencies:
Return the value of the field at *key*. If *key* is not available,
raise :exc:`KeyError`.
+ .. describe:: key in section
+
+ Return ``True`` if *section* has a key *key*, else ``False``.
+
.. method:: Bytes
The number of bytes in the section.
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index 86732781..34669fd5 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -472,6 +472,10 @@ static void AddInt(PyObject *Dict,const char *Itm,unsigned long I)
extern "C" void initapt_pkg()
{
+ // Finalize our types to add slots, etc.
+ if (PyType_Ready(&TagSecType) == -1) return;
+
+ // Initialize the module
PyObject *Module = Py_InitModule("apt_pkg",methods);
PyObject *Dict = PyModule_GetDict(Module);
diff --git a/python/tag.cc b/python/tag.cc
index 217be290..cab32370 100644
--- a/python/tag.cc
+++ b/python/tag.cc
@@ -174,6 +174,16 @@ static PyObject *TagSecExists(PyObject *Self,PyObject *Args)
return Py_BuildValue("i",1);
}
+static int TagSecContains(PyObject *Self,PyObject *Arg)
+{
+ char *Name = PyString_AsString(Arg);
+ const char *Start;
+ const char *Stop;
+ if (GetCpp<pkgTagSection>(Self).Find(Name,Start,Stop) == false)
+ return 0;
+ return 1;
+}
+
static char *doc_Bytes = "Bytes() -> integer";
static PyObject *TagSecBytes(PyObject *Self,PyObject *Args)
{
@@ -365,36 +375,41 @@ static PyMethodDef TagSecMethods[] =
{}
};
-// TagSecGetAttr - Get an attribute - variable/method /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-static PyObject *TagSecGetAttr(PyObject *Self,char *Name)
-{
- return Py_FindMethod(TagSecMethods,Self,Name);
-}
- /*}}}*/
-// Type for a Tag Section
+
+PySequenceMethods TagSecSeqMeth = {0,0,0,0,0,0,0,TagSecContains,0,0};
PyMappingMethods TagSecMapMeth = {TagSecLength,TagSecMap,0};
PyTypeObject TagSecType =
{
PyObject_HEAD_INIT(&PyType_Type)
- 0, // ob_size
- "TagSection", // tp_name
+ 0, // ob_size
+ "TagSection", // tp_name
sizeof(TagSecData), // tp_basicsize
0, // tp_itemsize
// Methods
TagSecFree, // tp_dealloc
- 0, // tp_print
- TagSecGetAttr, // tp_getattr
+ 0, // tp_print
+ 0, // tp_getattr
0, // tp_setattr
0, // tp_compare
0, // tp_repr
0, // tp_as_number
- 0, // tp_as_sequence
+ &TagSecSeqMeth, // tp_as_sequence
&TagSecMapMeth, // tp_as_mapping
0, // tp_hash
- 0, // tp_call
- TagSecStr, // tp_str
+ 0, // tp_call
+ TagSecStr, // tp_str
+ 0, // tp_getattro
+ 0, // tp_setattro
+ 0, // tp_as_buffer
+ Py_TPFLAGS_DEFAULT, // tp_flags
+ "TagSection Object", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ TagSecMethods // tp_methods
};
// Method table for the Tag File object