]> granicus.if.org Git - python/commitdiff
bpo-29958: Minor improvements to zipfile and tarfile CLI. (#944)
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 7 Apr 2017 15:56:12 +0000 (18:56 +0300)
committerGitHub <noreply@github.com>
Fri, 7 Apr 2017 15:56:12 +0000 (18:56 +0300)
Lib/tarfile.py
Lib/test/test_tarfile.py
Lib/test/test_zipfile.py
Lib/zipfile.py

index 2d702dd2ec6af9feab97908788ee90e724133246..9d46e5f6de12290fd105bd00f8c065ebc22ee8e8 100755 (executable)
@@ -2450,11 +2450,11 @@ open = TarFile.open
 def main():
     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.add_argument('-v', '--verbose', action='store_true', default=False,
                         help='Verbose output')
-    group = parser.add_mutually_exclusive_group()
+    group = parser.add_mutually_exclusive_group(required=True)
     group.add_argument('-l', '--list', metavar='<tarfile>',
                        help='Show listing of a tarfile')
     group.add_argument('-e', '--extract', nargs='+',
@@ -2467,7 +2467,7 @@ def main():
                        help='Test if a tarfile is valid')
     args = parser.parse_args()
 
-    if args.test:
+    if args.test is not None:
         src = args.test
         if is_tarfile(src):
             with open(src, 'r') as tar:
@@ -2478,7 +2478,7 @@ def main():
         else:
             parser.exit(1, '{!r} is not a tar archive.\n'.format(src))
 
-    elif args.list:
+    elif args.list is not None:
         src = args.list
         if is_tarfile(src):
             with TarFile.open(src, 'r:*') as tf:
@@ -2486,7 +2486,7 @@ def main():
         else:
             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:
             src = args.extract[0]
             curdir = os.curdir
@@ -2508,7 +2508,7 @@ def main():
         else:
             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)
         _, ext = os.path.splitext(tar_name)
         compressions = {
@@ -2534,8 +2534,5 @@ def main():
         if args.verbose:
             print('{!r} file created.'.format(tar_name))
 
-    else:
-        parser.exit(1, parser.format_help())
-
 if __name__ == '__main__':
     main()
index 561d5fc617c60816e7e02b13194e61eb67faff09..030ace14f16d38edcf26252d6ef7ae7ab2944b92 100644 (file)
@@ -2167,6 +2167,16 @@ class CommandLineTest(unittest.TestCase):
             for tardata in files:
                 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):
         for tar_name in testtarnames:
             for opt in '-t', '--test':
index 47436e57448b1a49cbaa9d7bba8ac4e44579e9eb..46a67d5428c3efbfa9de795824cb01b68b7a52a2 100644 (file)
@@ -2140,6 +2140,16 @@ class CommandLineTest(unittest.TestCase):
     def zipfilecmd_failure(self, *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):
         zip_name = findfile('zipdir.zip')
         for opt in '-t', '--test':
index 6fdf2c398dd1cc2c5d8601aec2ce9a2945bb9169..550e64fd1a29e5a0d999ee2e53dde06a449934ac 100644 (file)
@@ -1965,9 +1965,9 @@ class PyZipFile(ZipFile):
 def main(args=None):
     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)
-    group = parser.add_mutually_exclusive_group()
+    group = parser.add_mutually_exclusive_group(required=True)
     group.add_argument('-l', '--list', metavar='<zipfile>',
                        help='Show listing of a zipfile')
     group.add_argument('-e', '--extract', nargs=2,
@@ -2022,8 +2022,5 @@ def main(args=None):
                     zippath = ''
                 addToZip(zf, path, zippath)
 
-    else:
-        parser.exit(2, parser.format_usage())
-
 if __name__ == "__main__":
     main()