summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortmzullinger <tmzullinger@f01d2545-417e-4e96-918e-98f8d0dbbcb6>2008-08-23 18:02:42 +0000
committertmzullinger <tmzullinger@f01d2545-417e-4e96-918e-98f8d0dbbcb6>2008-08-23 18:02:42 +0000
commit21f833e2ffc6e031d5d3421e9dabf38069cf4896 (patch)
tree4ad21c366991b8341a48287741917ec38f7d24d6
parent9a98fc1a1b4476dd57e226cfafaa283997732752 (diff)
downloadlibgpod-21f833e2ffc6e031d5d3421e9dabf38069cf4896.tar.gz
libgpod-21f833e2ffc6e031d5d3421e9dabf38069cf4896.tar.xz
libgpod-21f833e2ffc6e031d5d3421e9dabf38069cf4896.zip
Python: Be more consistent with other container objects and classes
This enables testing whether a key exists in an object (e.g. "'title' in track") as well as iterating over a Track or Photo object's keys, values, or items. The items() and pairs() methods were renamed to values() and items(), respectively, in the Track and Photo classes. git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@2110 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r--ChangeLog10
-rw-r--r--bindings/python/ipod.py58
-rw-r--r--bindings/python/tests/tests.py12
3 files changed, 75 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index ef16b75..8ab1b1d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,16 @@
Add a quiet parameter to Database.remove() and use it in
tests
+ * bindings/python/ipod.py:
+ Be more consistent with other python container objects and
+ classes
+
+ This enables testing whether a key exists in an object (e.g.
+ "'title' in track") as well as iterating over a Track or
+ Photo object's keys, values, or items. The items() and
+ pairs() methods were renamed to values() and items(),
+ respectively, in the Track and Photo classes.
+
2008-08-20 Todd Zullinger <tmzullinger at users.sourceforge.net>
* bindings/python/examples/save_photos.py
diff --git a/bindings/python/ipod.py b/bindings/python/ipod.py
index 80b5858..85f5456 100644
--- a/bindings/python/ipod.py
+++ b/bindings/python/ipod.py
@@ -454,13 +454,38 @@ class Track:
repr(self['title']),
repr(self['album']))
+ def __iter__(self):
+ for k in self.keys():
+ yield k
+
+ def has_key(self, key):
+ try:
+ value = self[key]
+ except KeyError:
+ return False
+ return True
+
+ def __contains__(self, key):
+ return self.has_key(key)
+
+ def iteritems(self):
+ for k in self:
+ yield (k, self[k])
+
+ def iterkeys(self):
+ return self.__iter__()
+
+ def itervalues(self):
+ for _, v in self.iteritems():
+ yield v
+
def keys(self):
return list(self._proxied_attributes)
- def items(self):
+ def values(self):
return [self[k] for k in self._proxied_attributes]
- def pairs(self):
+ def items(self):
return [(k, self[k]) for k in self._proxied_attributes]
def __getitem__(self, item):
@@ -937,13 +962,38 @@ class Photo:
self['digitized_date'].strftime("%c"),
repr(self['artwork_size']))
+ def __iter__(self):
+ for k in self.keys():
+ yield k
+
+ def has_key(self, key):
+ try:
+ value = self[key]
+ except KeyError:
+ return False
+ return True
+
+ def __contains__(self, key):
+ return self.has_key(key)
+
+ def iteritems(self):
+ for k in self:
+ yield (k, self[k])
+
+ def iterkeys(self):
+ return self.__iter__()
+
+ def itervalues(self):
+ for _, v in self.iteritems():
+ yield v
+
def keys(self):
return list(self._proxied_attributes)
- def items(self):
+ def values(self):
return [self[k] for k in self._proxied_attributes]
- def pairs(self):
+ def items(self):
return [(k, self[k]) for k in self._proxied_attributes]
def __getitem__(self, item):
diff --git a/bindings/python/tests/tests.py b/bindings/python/tests/tests.py
index 657e7f5..6ebb8ff 100644
--- a/bindings/python/tests/tests.py
+++ b/bindings/python/tests/tests.py
@@ -79,7 +79,12 @@ class TestiPodFunctions(unittest.TestCase):
t['time_added'] = time.mktime(date.timetuple())
self.assertEqual(date.year, t['time_added'].year)
self.assertEqual(date.second, t['time_added'].second)
-
+
+ def testTrackContainerMethods(self):
+ self.testAddTrack()
+ track = self.db[0]
+ self.failUnless('title' in track)
+
def testVersion(self):
self.assertEqual(type(gpod.version_info),
types.TupleType)
@@ -182,5 +187,10 @@ class TestPhotoDatabase(unittest.TestCase):
for album in self.db.PhotoAlbums:
[photo for photo in album]
+ def testPhotoContainerMethods(self):
+ self.testAddPhoto()
+ photo = self.db[0]
+ self.failUnless('id' in photo)
+
if __name__ == '__main__':
unittest.main()