mirror of
https://github.com/mikf/gallery-dl.git
synced 2024-11-25 04:02:32 +01:00
[postprocessor:metadata] add 'skip' option (#3786)
This commit is contained in:
parent
2bb937014f
commit
00f0233b28
@ -4411,6 +4411,16 @@ Description
|
||||
i.e. fields whose name starts with an underscore.
|
||||
|
||||
|
||||
metadata.skip
|
||||
-------------
|
||||
Type
|
||||
``bool``
|
||||
Default
|
||||
``false``
|
||||
Description
|
||||
Do not overwrite already existing files.
|
||||
|
||||
|
||||
metadata.archive
|
||||
----------------
|
||||
Type
|
||||
|
@ -87,6 +87,7 @@ class MetadataPP(PostProcessor):
|
||||
self.omode = options.get("open", omode)
|
||||
self.encoding = options.get("encoding", "utf-8")
|
||||
self.private = options.get("private", False)
|
||||
self.skip = options.get("skip", False)
|
||||
|
||||
def run(self, pathfmt):
|
||||
archive = self.archive
|
||||
@ -96,6 +97,9 @@ class MetadataPP(PostProcessor):
|
||||
directory = self._directory(pathfmt)
|
||||
path = directory + self._filename(pathfmt)
|
||||
|
||||
if self.skip and os.path.exists(path):
|
||||
return
|
||||
|
||||
try:
|
||||
with open(path, self.omode, encoding=self.encoding) as fp:
|
||||
self.write(fp, pathfmt.kwdict)
|
||||
|
@ -428,11 +428,46 @@ class MetadataTest(BasePostprocessorTest):
|
||||
self.assertNotIn("baz", pdict["bar"])
|
||||
self.assertEqual(kwdict["bar"], pdict["bar"])
|
||||
|
||||
# no errors for deleted/undefined fields
|
||||
self._trigger()
|
||||
self.assertNotIn("foo", pdict)
|
||||
self.assertNotIn("baz", pdict["bar"])
|
||||
self.assertEqual(kwdict["bar"], pdict["bar"])
|
||||
|
||||
def test_metadata_option_skip(self):
|
||||
self._create({"skip": True})
|
||||
|
||||
with patch("builtins.open", mock_open()) as m, \
|
||||
patch("os.path.exists") as e:
|
||||
e.return_value = True
|
||||
self._trigger()
|
||||
|
||||
self.assertTrue(e.called)
|
||||
self.assertTrue(not m.called)
|
||||
self.assertTrue(not len(self._output(m)))
|
||||
|
||||
with patch("builtins.open", mock_open()) as m, \
|
||||
patch("os.path.exists") as e:
|
||||
e.return_value = False
|
||||
self._trigger()
|
||||
|
||||
self.assertTrue(e.called)
|
||||
self.assertTrue(m.called)
|
||||
self.assertGreater(len(self._output(m)), 0)
|
||||
|
||||
path = self.pathfmt.realdirectory + "file.ext.json"
|
||||
m.assert_called_once_with(path, "w", encoding="utf-8")
|
||||
|
||||
def test_metadata_option_skip_false(self):
|
||||
self._create({"skip": False})
|
||||
|
||||
with patch("builtins.open", mock_open()) as m, \
|
||||
patch("os.path.exists") as e:
|
||||
self._trigger()
|
||||
|
||||
self.assertTrue(not e.called)
|
||||
self.assertTrue(m.called)
|
||||
|
||||
@staticmethod
|
||||
def _output(mock):
|
||||
return "".join(
|
||||
|
Loading…
Reference in New Issue
Block a user