summaryrefslogtreecommitdiffstats
path: root/Lib/zipfile
diff options
context:
space:
mode:
authorShantanu <12621235+hauntsaninja@users.noreply.github.com>2023-12-03 11:09:29 (GMT)
committerGitHub <noreply@github.com>2023-12-03 11:09:29 (GMT)
commit29e6c7b68acac628b084a82670708008be262379 (patch)
tree01c2f0dbc958b4557a507273b17d0ea7fa37c0f1 /Lib/zipfile
parentfc9e24b01fb7da4160b82cef26981d72bb678c13 (diff)
downloadcpython-29e6c7b68acac628b084a82670708008be262379.zip
cpython-29e6c7b68acac628b084a82670708008be262379.tar.gz
cpython-29e6c7b68acac628b084a82670708008be262379.tar.bz2
gh-112578: Fix RuntimeWarning when running zipfile (GH-112579)
Diffstat (limited to 'Lib/zipfile')
-rw-r--r--Lib/zipfile/__init__.py73
-rw-r--r--Lib/zipfile/__main__.py75
2 files changed, 71 insertions, 77 deletions
diff --git a/Lib/zipfile/__init__.py b/Lib/zipfile/__init__.py
index 2b28a07..fe629ed 100644
--- a/Lib/zipfile/__init__.py
+++ b/Lib/zipfile/__init__.py
@@ -2227,12 +2227,79 @@ class PyZipFile(ZipFile):
return (fname, archivename)
+def main(args=None):
+ import argparse
+
+ description = 'A simple command-line interface for zipfile module.'
+ parser = argparse.ArgumentParser(description=description)
+ 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,
+ metavar=('<zipfile>', '<output_dir>'),
+ help='Extract zipfile into target dir')
+ group.add_argument('-c', '--create', nargs='+',
+ metavar=('<name>', '<file>'),
+ help='Create zipfile from sources')
+ group.add_argument('-t', '--test', metavar='<zipfile>',
+ help='Test if a zipfile is valid')
+ parser.add_argument('--metadata-encoding', metavar='<encoding>',
+ help='Specify encoding of member names for -l, -e and -t')
+ args = parser.parse_args(args)
+
+ encoding = args.metadata_encoding
+
+ if args.test is not None:
+ src = args.test
+ with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
+ badfile = zf.testzip()
+ if badfile:
+ print("The following enclosed file is corrupted: {!r}".format(badfile))
+ print("Done testing")
+
+ elif args.list is not None:
+ src = args.list
+ with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
+ zf.printdir()
+
+ elif args.extract is not None:
+ src, curdir = args.extract
+ with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
+ zf.extractall(curdir)
+
+ elif args.create is not None:
+ if encoding:
+ print("Non-conforming encodings not supported with -c.",
+ file=sys.stderr)
+ sys.exit(1)
+
+ zip_name = args.create.pop(0)
+ files = args.create
+
+ def addToZip(zf, path, zippath):
+ if os.path.isfile(path):
+ zf.write(path, zippath, ZIP_DEFLATED)
+ elif os.path.isdir(path):
+ if zippath:
+ zf.write(path, zippath)
+ for nm in sorted(os.listdir(path)):
+ addToZip(zf,
+ os.path.join(path, nm), os.path.join(zippath, nm))
+ # else: ignore
+
+ with ZipFile(zip_name, 'w') as zf:
+ for path in files:
+ zippath = os.path.basename(path)
+ if not zippath:
+ zippath = os.path.basename(os.path.dirname(path))
+ if zippath in ('', os.curdir, os.pardir):
+ zippath = ''
+ addToZip(zf, path, zippath)
+
+
from ._path import ( # noqa: E402
Path,
# used privately for tests
CompleteDirs, # noqa: F401
)
-
-# used privately for tests
-from .__main__ import main # noqa: F401, E402
diff --git a/Lib/zipfile/__main__.py b/Lib/zipfile/__main__.py
index a9e5fb1..868d99e 100644
--- a/Lib/zipfile/__main__.py
+++ b/Lib/zipfile/__main__.py
@@ -1,77 +1,4 @@
-import sys
-import os
-from . import ZipFile, ZIP_DEFLATED
-
-
-def main(args=None):
- import argparse
-
- description = 'A simple command-line interface for zipfile module.'
- parser = argparse.ArgumentParser(description=description)
- 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,
- metavar=('<zipfile>', '<output_dir>'),
- help='Extract zipfile into target dir')
- group.add_argument('-c', '--create', nargs='+',
- metavar=('<name>', '<file>'),
- help='Create zipfile from sources')
- group.add_argument('-t', '--test', metavar='<zipfile>',
- help='Test if a zipfile is valid')
- parser.add_argument('--metadata-encoding', metavar='<encoding>',
- help='Specify encoding of member names for -l, -e and -t')
- args = parser.parse_args(args)
-
- encoding = args.metadata_encoding
-
- if args.test is not None:
- src = args.test
- with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
- badfile = zf.testzip()
- if badfile:
- print("The following enclosed file is corrupted: {!r}".format(badfile))
- print("Done testing")
-
- elif args.list is not None:
- src = args.list
- with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
- zf.printdir()
-
- elif args.extract is not None:
- src, curdir = args.extract
- with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
- zf.extractall(curdir)
-
- elif args.create is not None:
- if encoding:
- print("Non-conforming encodings not supported with -c.",
- file=sys.stderr)
- sys.exit(1)
-
- zip_name = args.create.pop(0)
- files = args.create
-
- def addToZip(zf, path, zippath):
- if os.path.isfile(path):
- zf.write(path, zippath, ZIP_DEFLATED)
- elif os.path.isdir(path):
- if zippath:
- zf.write(path, zippath)
- for nm in sorted(os.listdir(path)):
- addToZip(zf,
- os.path.join(path, nm), os.path.join(zippath, nm))
- # else: ignore
-
- with ZipFile(zip_name, 'w') as zf:
- for path in files:
- zippath = os.path.basename(path)
- if not zippath:
- zippath = os.path.basename(os.path.dirname(path))
- if zippath in ('', os.curdir, os.pardir):
- zippath = ''
- addToZip(zf, path, zippath)
-
+from . import main
if __name__ == "__main__":
main()