From a363ac6b216acaf046690ff85191113c95946d0d Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Fri, 30 Sep 2022 17:42:31 +1000 Subject: [PATCH] micropython/mip: Add command-line functionality for the Unix port. Moves mip.py to mip/__init__.py, so that the optional (added in this commit) mip/__main__.py can exist to support: `micropython -m mip install [--target,--index,--no-mpy] package@version` "install" works by forwarding the arguments directly to mip.install. Updates mip to v0.2.0 because of the change in directory structure. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- micropython/mip-cmdline/manifest.py | 6 +++ micropython/mip-cmdline/mip/__main__.py | 46 +++++++++++++++++++++ micropython/mip/manifest.py | 4 +- micropython/mip/{mip.py => mip/__init__.py} | 5 ++- 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 micropython/mip-cmdline/manifest.py create mode 100644 micropython/mip-cmdline/mip/__main__.py rename micropython/mip/{mip.py => mip/__init__.py} (97%) diff --git a/micropython/mip-cmdline/manifest.py b/micropython/mip-cmdline/manifest.py new file mode 100644 index 0000000..cf8e4b4 --- /dev/null +++ b/micropython/mip-cmdline/manifest.py @@ -0,0 +1,6 @@ +metadata(version="0.1.0", description="Optional support for running `micropython -m mip`") + +require("argparse") +require("mip") + +package("mip") diff --git a/micropython/mip-cmdline/mip/__main__.py b/micropython/mip-cmdline/mip/__main__.py new file mode 100644 index 0000000..7732638 --- /dev/null +++ b/micropython/mip-cmdline/mip/__main__.py @@ -0,0 +1,46 @@ +# MicroPython package installer command line +# MIT license; Copyright (c) 2022 Jim Mussared + +import argparse +import sys + + +def do_install(): + parser = argparse.ArgumentParser() + parser.add_argument( + "-t", + "--target", + help="Directory to start discovery", + ) + parser.add_argument( + "-i", + "--index", + help="Pattern to match test files", + ) + parser.add_argument( + "--mpy", + action="store_true", + help="download as compiled .mpy files (default)", + ) + parser.add_argument( + "--no-mpy", + action="store_true", + help="download as .py source files", + ) + parser.add_argument("package", nargs="+") + args = parser.parse_args(args=sys.argv[2:]) + + from . import install + + for package in args.package: + version = None + if "@" in package: + package, version = package.split("@") + install(package, args.index, args.target, version, not args.no_mpy) + + +if len(sys.argv) >= 2: + if sys.argv[1] == "install": + do_install() + else: + print('mip: Unknown command "{}"'.format(sys.argv[1])) diff --git a/micropython/mip/manifest.py b/micropython/mip/manifest.py index e13ad7a..4e85fe1 100644 --- a/micropython/mip/manifest.py +++ b/micropython/mip/manifest.py @@ -1,5 +1,5 @@ -metadata(version="0.1.0", description="On-device package installer for network-capable boards") +metadata(version="0.2.0", description="On-device package installer for network-capable boards") require("urequests") -module("mip.py") +package("mip") diff --git a/micropython/mip/mip.py b/micropython/mip/mip/__init__.py similarity index 97% rename from micropython/mip/mip.py rename to micropython/mip/mip/__init__.py index a019e4e..0593e2e 100644 --- a/micropython/mip/mip.py +++ b/micropython/mip/mip/__init__.py @@ -153,7 +153,7 @@ def _install_package(package, index, target, version, mpy): return _install_json(package, index, target, version, mpy) -def install(package, index=_PACKAGE_INDEX, target=None, version=None, mpy=True): +def install(package, index=None, target=None, version=None, mpy=True): if not target: for p in sys.path: if p.endswith("/lib"): @@ -163,6 +163,9 @@ def install(package, index=_PACKAGE_INDEX, target=None, version=None, mpy=True): print("Unable to find lib dir in sys.path") return + if not index: + index = _PACKAGE_INDEX + if _install_package(package, index.rstrip("/"), target, version, mpy): print("Done") else: