Vehicle-Anti-Theft-Face-Rec.../venv/Lib/site-packages/imageio/__main__.py

170 lines
5.3 KiB
Python
Raw Normal View History

"""
Console scripts and associated helper methods for imageio.
"""
import argparse
import os
from os import path as op
import shutil
import sys
from . import plugins
from .core import util
# A list of plugins that require binaries from the imageio-binaries
# repository. These plugins must implement the `download` method.
PLUGINS_WITH_BINARIES = ["freeimage"]
def download_bin(plugin_names=["all"], package_dir=False):
""" Download binary dependencies of plugins
This is a convenience method for downloading the binaries
(e.g. for freeimage) from the imageio-binaries
repository.
Parameters
----------
plugin_names: list
A list of imageio plugin names. If it contains "all", all
binary dependencies are downloaded.
package_dir: bool
If set to `True`, the binaries will be downloaded to the
`resources` directory of the imageio package instead of
to the users application data directory. Note that this
might require administrative rights if imageio is installed
in a system directory.
"""
if plugin_names.count("all"):
# Use all plugins
plugin_names = PLUGINS_WITH_BINARIES
plugin_names.sort()
print("Ascertaining binaries for: {}.".format(", ".join(plugin_names)))
if package_dir:
# Download the binaries to the `resources` directory
# of imageio. If imageio comes as an .egg, then a cache
# directory will be created by pkg_resources (requires setuptools).
# see `imageio.core.util.resource_dirs`
# and `imageio.core.utilresource_package_dir`
directory = util.resource_package_dir()
else:
directory = None
for plg in plugin_names:
if plg not in PLUGINS_WITH_BINARIES:
msg = "Plugin {} not registered for binary download!".format(plg)
raise Exception(msg)
mod = getattr(plugins, plg)
mod.download(directory=directory)
def download_bin_main():
""" Argument-parsing wrapper for `download_bin` """
description = "Download plugin binary dependencies"
phelp = (
"Plugin name for which to download the binary. "
+ "If no argument is given, all binaries are downloaded."
)
dhelp = (
"Download the binaries to the package directory "
+ "(default is the users application data directory). "
+ "This might require administrative rights."
)
example_text = (
"examples:\n"
+ " imageio_download_bin all\n"
+ " imageio_download_bin freeimage\n"
)
parser = argparse.ArgumentParser(
description=description,
epilog=example_text,
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument("plugin", type=str, nargs="*", default="all", help=phelp)
parser.add_argument(
"--package-dir",
dest="package_dir",
action="store_true",
default=False,
help=dhelp,
)
args = parser.parse_args()
download_bin(plugin_names=args.plugin, package_dir=args.package_dir)
def remove_bin(plugin_names=["all"]):
""" Remove binary dependencies of plugins
This is a convenience method that removes all binaries
dependencies for plugins downloaded by imageio.
Notes
-----
It only makes sense to use this method if the binaries
are corrupt.
"""
if plugin_names.count("all"):
# Use all plugins
plugin_names = PLUGINS_WITH_BINARIES
print("Removing binaries for: {}.".format(", ".join(plugin_names)))
rdirs = util.resource_dirs()
for plg in plugin_names:
if plg not in PLUGINS_WITH_BINARIES:
msg = "Plugin {} not registered for binary download!".format(plg)
raise Exception(msg)
not_removed = []
for rd in rdirs:
# plugin name is in subdirectories
for rsub in os.listdir(rd):
if rsub in plugin_names:
plgdir = op.join(rd, rsub)
try:
shutil.rmtree(plgdir)
except Exception:
not_removed.append(plgdir)
if not_removed:
nrs = ",".join(not_removed)
msg2 = (
"These plugins files could not be removed: {}\n".format(nrs)
+ "Make sure they are not used by any program and try again."
)
raise Exception(msg2)
def remove_bin_main():
""" Argument-parsing wrapper for `remove_bin` """
description = "Remove plugin binary dependencies"
phelp = (
"Plugin name for which to remove the binary. "
+ "If no argument is given, all binaries are removed."
)
example_text = (
"examples:\n"
+ " imageio_remove_bin all\n"
+ " imageio_remove_bin freeimage\n"
)
parser = argparse.ArgumentParser(
description=description,
epilog=example_text,
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument("plugin", type=str, nargs="*", default="all", help=phelp)
args = parser.parse_args()
remove_bin(plugin_names=args.plugin)
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "download_bin":
download_bin_main()
elif len(sys.argv) > 1 and sys.argv[1] == "remove_bin":
remove_bin_main()
else:
raise RuntimeError("Invalid use of the imageio CLI")