bpo-29958: Minor improvements to zipfile and tarfile CLI. (#944)
This commit is contained in:
parent
fd0cd07a5a
commit
150cd1916a
|
@ -2450,11 +2450,11 @@ open = TarFile.open
|
||||||
def main():
|
def main():
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
description = 'A simple command line interface for tarfile module.'
|
description = 'A simple command-line interface for tarfile module.'
|
||||||
parser = argparse.ArgumentParser(description=description)
|
parser = argparse.ArgumentParser(description=description)
|
||||||
parser.add_argument('-v', '--verbose', action='store_true', default=False,
|
parser.add_argument('-v', '--verbose', action='store_true', default=False,
|
||||||
help='Verbose output')
|
help='Verbose output')
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group(required=True)
|
||||||
group.add_argument('-l', '--list', metavar='<tarfile>',
|
group.add_argument('-l', '--list', metavar='<tarfile>',
|
||||||
help='Show listing of a tarfile')
|
help='Show listing of a tarfile')
|
||||||
group.add_argument('-e', '--extract', nargs='+',
|
group.add_argument('-e', '--extract', nargs='+',
|
||||||
|
@ -2467,7 +2467,7 @@ def main():
|
||||||
help='Test if a tarfile is valid')
|
help='Test if a tarfile is valid')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.test:
|
if args.test is not None:
|
||||||
src = args.test
|
src = args.test
|
||||||
if is_tarfile(src):
|
if is_tarfile(src):
|
||||||
with open(src, 'r') as tar:
|
with open(src, 'r') as tar:
|
||||||
|
@ -2478,7 +2478,7 @@ def main():
|
||||||
else:
|
else:
|
||||||
parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
|
parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
|
||||||
|
|
||||||
elif args.list:
|
elif args.list is not None:
|
||||||
src = args.list
|
src = args.list
|
||||||
if is_tarfile(src):
|
if is_tarfile(src):
|
||||||
with TarFile.open(src, 'r:*') as tf:
|
with TarFile.open(src, 'r:*') as tf:
|
||||||
|
@ -2486,7 +2486,7 @@ def main():
|
||||||
else:
|
else:
|
||||||
parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
|
parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
|
||||||
|
|
||||||
elif args.extract:
|
elif args.extract is not None:
|
||||||
if len(args.extract) == 1:
|
if len(args.extract) == 1:
|
||||||
src = args.extract[0]
|
src = args.extract[0]
|
||||||
curdir = os.curdir
|
curdir = os.curdir
|
||||||
|
@ -2508,7 +2508,7 @@ def main():
|
||||||
else:
|
else:
|
||||||
parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
|
parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
|
||||||
|
|
||||||
elif args.create:
|
elif args.create is not None:
|
||||||
tar_name = args.create.pop(0)
|
tar_name = args.create.pop(0)
|
||||||
_, ext = os.path.splitext(tar_name)
|
_, ext = os.path.splitext(tar_name)
|
||||||
compressions = {
|
compressions = {
|
||||||
|
@ -2534,8 +2534,5 @@ def main():
|
||||||
if args.verbose:
|
if args.verbose:
|
||||||
print('{!r} file created.'.format(tar_name))
|
print('{!r} file created.'.format(tar_name))
|
||||||
|
|
||||||
else:
|
|
||||||
parser.exit(1, parser.format_help())
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -2167,6 +2167,16 @@ class CommandLineTest(unittest.TestCase):
|
||||||
for tardata in files:
|
for tardata in files:
|
||||||
tf.add(tardata, arcname=os.path.basename(tardata))
|
tf.add(tardata, arcname=os.path.basename(tardata))
|
||||||
|
|
||||||
|
def test_bad_use(self):
|
||||||
|
rc, out, err = self.tarfilecmd_failure()
|
||||||
|
self.assertEqual(out, b'')
|
||||||
|
self.assertIn(b'usage', err.lower())
|
||||||
|
self.assertIn(b'error', err.lower())
|
||||||
|
self.assertIn(b'required', err.lower())
|
||||||
|
rc, out, err = self.tarfilecmd_failure('-l', '')
|
||||||
|
self.assertEqual(out, b'')
|
||||||
|
self.assertNotEqual(err.strip(), b'')
|
||||||
|
|
||||||
def test_test_command(self):
|
def test_test_command(self):
|
||||||
for tar_name in testtarnames:
|
for tar_name in testtarnames:
|
||||||
for opt in '-t', '--test':
|
for opt in '-t', '--test':
|
||||||
|
|
|
@ -2140,6 +2140,16 @@ class CommandLineTest(unittest.TestCase):
|
||||||
def zipfilecmd_failure(self, *args):
|
def zipfilecmd_failure(self, *args):
|
||||||
return script_helper.assert_python_failure('-m', 'zipfile', *args)
|
return script_helper.assert_python_failure('-m', 'zipfile', *args)
|
||||||
|
|
||||||
|
def test_bad_use(self):
|
||||||
|
rc, out, err = self.zipfilecmd_failure()
|
||||||
|
self.assertEqual(out, b'')
|
||||||
|
self.assertIn(b'usage', err.lower())
|
||||||
|
self.assertIn(b'error', err.lower())
|
||||||
|
self.assertIn(b'required', err.lower())
|
||||||
|
rc, out, err = self.zipfilecmd_failure('-l', '')
|
||||||
|
self.assertEqual(out, b'')
|
||||||
|
self.assertNotEqual(err.strip(), b'')
|
||||||
|
|
||||||
def test_test_command(self):
|
def test_test_command(self):
|
||||||
zip_name = findfile('zipdir.zip')
|
zip_name = findfile('zipdir.zip')
|
||||||
for opt in '-t', '--test':
|
for opt in '-t', '--test':
|
||||||
|
|
|
@ -1965,9 +1965,9 @@ class PyZipFile(ZipFile):
|
||||||
def main(args=None):
|
def main(args=None):
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
description = 'A simple command line interface for zipfile module.'
|
description = 'A simple command-line interface for zipfile module.'
|
||||||
parser = argparse.ArgumentParser(description=description)
|
parser = argparse.ArgumentParser(description=description)
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group(required=True)
|
||||||
group.add_argument('-l', '--list', metavar='<zipfile>',
|
group.add_argument('-l', '--list', metavar='<zipfile>',
|
||||||
help='Show listing of a zipfile')
|
help='Show listing of a zipfile')
|
||||||
group.add_argument('-e', '--extract', nargs=2,
|
group.add_argument('-e', '--extract', nargs=2,
|
||||||
|
@ -2022,8 +2022,5 @@ def main(args=None):
|
||||||
zippath = ''
|
zippath = ''
|
||||||
addToZip(zf, path, zippath)
|
addToZip(zf, path, zippath)
|
||||||
|
|
||||||
else:
|
|
||||||
parser.exit(2, parser.format_usage())
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue