mirror of
https://github.com/mikf/gallery-dl.git
synced 2025-01-31 19:51:34 +01:00
[postprocessor:zip] defer zip file creation (fixes #968)
don't try to create zip files on postprocessor construction, wait until directory creation during file download,
This commit is contained in:
parent
33fe67b594
commit
fd0685d9b5
@ -1,5 +1,7 @@
|
||||
# Changelog
|
||||
|
||||
## Unreleased
|
||||
|
||||
## 1.14.5 - 2020-08-30
|
||||
### Additions
|
||||
- [aryion] add username/password support ([#960](https://github.com/mikf/gallery-dl/issues/960))
|
||||
|
@ -33,23 +33,23 @@ class ZipPP(PostProcessor):
|
||||
algorithm)
|
||||
algorithm = "store"
|
||||
|
||||
self.zfile = None
|
||||
self.path = job.pathfmt.realdirectory
|
||||
args = (self.path[:-1] + ext, "a",
|
||||
self.COMPRESSION_ALGORITHMS[algorithm], True)
|
||||
self.args = (self.path[:-1] + ext, "a",
|
||||
self.COMPRESSION_ALGORITHMS[algorithm], True)
|
||||
|
||||
if options.get("mode") == "safe":
|
||||
self.run = self._write_safe
|
||||
self.zfile = None
|
||||
self.args = args
|
||||
else:
|
||||
self.run = self._write
|
||||
self.zfile = zipfile.ZipFile(*args)
|
||||
|
||||
def _write(self, pathfmt, zfile=None):
|
||||
# 'NameToInfo' is not officially documented, but it's available
|
||||
# for all supported Python versions and using it directly is a lot
|
||||
# faster than calling getinfo()
|
||||
if zfile is None:
|
||||
if self.zfile is None:
|
||||
self.zfile = zipfile.ZipFile(*self.args)
|
||||
zfile = self.zfile
|
||||
if pathfmt.filename not in zfile.NameToInfo:
|
||||
zfile.write(pathfmt.temppath, pathfmt.filename)
|
||||
|
@ -6,4 +6,4 @@
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
|
||||
__version__ = "1.14.5"
|
||||
__version__ = "1.15.0-dev"
|
||||
|
@ -342,9 +342,20 @@ class ZipTest(BasePostprocessorTest):
|
||||
self.assertEqual(pp.path, self.pathfmt.realdirectory)
|
||||
self.assertEqual(pp.run, pp._write)
|
||||
self.assertEqual(pp.delete, True)
|
||||
self.assertFalse(hasattr(pp, "args"))
|
||||
self.assertEqual(pp.zfile.compression, zipfile.ZIP_STORED)
|
||||
self.assertTrue(pp.zfile.filename.endswith("/test.zip"))
|
||||
self.assertEqual(pp.args, (
|
||||
pp.path[:-1] + ".zip", "a", zipfile.ZIP_STORED, True,
|
||||
))
|
||||
self.assertTrue(pp.args[0].endswith("/test.zip"))
|
||||
|
||||
def test_zip_safe(self):
|
||||
pp = self._create({"mode": "safe"})
|
||||
self.assertEqual(pp.path, self.pathfmt.realdirectory)
|
||||
self.assertEqual(pp.run, pp._write_safe)
|
||||
self.assertEqual(pp.delete, True)
|
||||
self.assertEqual(pp.args, (
|
||||
pp.path[:-1] + ".zip", "a", zipfile.ZIP_STORED, True,
|
||||
))
|
||||
self.assertTrue(pp.args[0].endswith("/test.zip"))
|
||||
|
||||
def test_zip_options(self):
|
||||
pp = self._create({
|
||||
@ -353,22 +364,13 @@ class ZipTest(BasePostprocessorTest):
|
||||
"extension": "cbz",
|
||||
})
|
||||
self.assertEqual(pp.delete, False)
|
||||
self.assertEqual(pp.zfile.compression, zipfile.ZIP_DEFLATED)
|
||||
self.assertTrue(pp.zfile.filename.endswith("/test.cbz"))
|
||||
|
||||
def test_zip_safe(self):
|
||||
pp = self._create({"mode": "safe"})
|
||||
self.assertEqual(pp.delete, True)
|
||||
self.assertEqual(pp.path, self.pathfmt.realdirectory)
|
||||
self.assertEqual(pp.run, pp._write_safe)
|
||||
self.assertEqual(pp.args, (
|
||||
pp.path[:-1] + ".zip", "a", zipfile.ZIP_STORED, True,
|
||||
pp.path[:-1] + ".cbz", "a", zipfile.ZIP_DEFLATED, True,
|
||||
))
|
||||
self.assertTrue(pp.args[0].endswith("/test.zip"))
|
||||
self.assertTrue(pp.args[0].endswith("/test.cbz"))
|
||||
|
||||
def test_zip_write(self):
|
||||
pp = self._create()
|
||||
nti = pp.zfile.NameToInfo
|
||||
|
||||
with tempfile.NamedTemporaryFile("w", dir=self.dir.name) as file:
|
||||
file.write("foobar\n")
|
||||
@ -382,6 +384,7 @@ class ZipTest(BasePostprocessorTest):
|
||||
pp.prepare(self.pathfmt)
|
||||
pp.run(self.pathfmt)
|
||||
|
||||
nti = pp.zfile.NameToInfo
|
||||
self.assertEqual(len(nti), i+1)
|
||||
self.assertIn(name, nti)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user