diff --git a/gallery_dl/postprocessor/metadata.py b/gallery_dl/postprocessor/metadata.py index f6f835f1..5b7d399f 100644 --- a/gallery_dl/postprocessor/metadata.py +++ b/gallery_dl/postprocessor/metadata.py @@ -102,11 +102,17 @@ class MetadataPP(PostProcessor): if not tags: return - if not isinstance(tags, list): + if isinstance(tags, str): taglist = tags.split(", ") if len(taglist) < len(tags) / 16: taglist = tags.split(" ") tags = taglist + elif isinstance(tags, dict): + taglists = tags.values() + tags = [] + extend = tags.extend + for taglist in taglists: + extend(taglist) fp.write("\n".join(tags) + "\n") diff --git a/test/test_postprocessor.py b/test/test_postprocessor.py index 0e0f8abb..00c17b28 100644 --- a/test/test_postprocessor.py +++ b/test/test_postprocessor.py @@ -30,9 +30,9 @@ class MockPostprocessorModule(Mock): class FakeJob(): - def __init__(self): - self.extractor = extractor.find("test:") - self.pathfmt = util.PathFormat(self.extractor) + def __init__(self, extr=extractor.find("test:")): + self.extractor = extr + self.pathfmt = util.PathFormat(extr) self.out = output.NullOutput() self.get_logger = logging.getLogger self.hooks = collections.defaultdict(list) @@ -243,6 +243,15 @@ class MetadataTest(BasePostprocessorTest): self._trigger() self.assertEqual(self._output(m), "foo\nbar\nbaz\n") + def test_metadata_tags_dict(self): + self._create( + {"mode": "tags"}, + {"tags": {"g": ["foobar1", "foobar2"], "m": ["foobarbaz"]}}, + ) + with patch("builtins.open", mock_open()) as m: + self._trigger() + self.assertEqual(self._output(m), "foobar1\nfoobar2\nfoobarbaz\n") + def test_metadata_custom(self): def test(pp_info): pp = self._create(pp_info, {"foo": "bar"})