Merge pull request #1141 from zas/metadata_use_cleanup

Metadata cleanup, second pass
This commit is contained in:
Laurent Monin
2019-03-21 21:52:14 +01:00
committed by GitHub
2 changed files with 26 additions and 3 deletions

View File

@@ -17,7 +17,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
from collections.abc import MutableMapping
from collections.abc import (
Iterable,
MutableMapping,
)
from PyQt5.QtCore import QObject
@@ -346,9 +349,9 @@ class Metadata(MutableMapping):
self.deleted_tags.discard(name)
def __setitem__(self, name, values):
if not isinstance(values, list):
if isinstance(values, str) or not isinstance(values, Iterable):
values = [values]
values = [str(value) for value in values if value]
values = [str(value) for value in values if value or value == 0]
if values:
self.set(name, values)
elif name in self._store:

View File

@@ -200,6 +200,16 @@ class MetadataTest(PicardTestCase):
self.assertIn('c', m.deleted_tags)
self.assertEqual(m.length, 1234)
def test_metadata_mapping_init_zero(self):
m = Metadata(tag1='a', tag2=0, tag3='', tag4=None)
m['tag5'] = 0
m['tag1'] = ''
self.assertIn('tag1', m.deleted_tags)
self.assertEqual(m['tag2'], '0')
self.assertNotIn('tag3', m)
self.assertNotIn('tag4', m)
self.assertEqual(m['tag5'], '0')
def test_metadata_mapping_del(self):
m = self.metadata_d1
self.assertEqual(m.getraw('a'), ['b'])
@@ -342,3 +352,13 @@ class MetadataTest(PicardTestCase):
m1.remove_image(0)
self.assertEqual(len(m1), 1) # one tag, zero image
self.assertFalse(m1.images)
def test_metadata_mapping_iterable(self):
m = Metadata(tag_tuple=('a', 0))
m['tag_set'] = {'c', 'd'}
m['tag_dict'] = {'e': 1, 'f': 2}
m['tag_str'] = 'gh'
self.assertIn('0', m.getraw('tag_tuple'))
self.assertIn('c', m.getraw('tag_set'))
self.assertIn('e', m.getraw('tag_dict'))
self.assertIn('gh', m.getraw('tag_str'))