summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2009-04-13 18:27:43 +0200
committerJulian Andres Klode <jak@debian.org>2009-04-13 18:27:43 +0200
commit506cb021d62e643fba38ddb4b84572a86cb3a3ba (patch)
tree364b053d1560897d5b24dfd8950df341f0f63288
parent6c3e74bdf3a8bd6aced0a2ddb38c1cc7b22ec655 (diff)
downloadpython-apt-506cb021d62e643fba38ddb4b84572a86cb3a3ba.tar.gz
* python/tag.cc: Support 'key in mapping' for TagSections
Support the replacement of mapping.has_key() for sections, and update the usage in apt/package.py and apt/debfile accordingly. This is implemented by extending the TagSecType with sequence methods, but only settings the contains method there. The TagSecGetAttr() function has been removed and replaced by the use of the tp_methods slot.
-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