Source code for rez.cli.bind

# SPDX-License-Identifier: Apache-2.0
# Copyright Contributors to the Rez Project


'''
Create a Rez package for existing software.
'''
from __future__ import print_function

import argparse


[docs]def setup_parser(parser, completions=False): parser.add_argument( "--quickstart", action="store_true", help="bind a set of standard packages to get started") parser.add_argument( "-r", "--release", action="store_true", help="install to release path; overrides -i") parser.add_argument( "-i", "--install-path", dest="install_path", type=str, default=None, metavar="PATH", help="install path, defaults to local package path") parser.add_argument( "--no-deps", dest="no_deps", action="store_true", help="Do not bind dependencies") parser.add_argument( "-l", "--list", action="store_true", help="list all available bind modules") parser.add_argument( "-s", "--search", action="store_true", help="search for the bind module but do not perform the bind") parser.add_argument( "PKG", type=str, nargs='?', help='package to bind') parser.add_argument( "BIND_ARGS", metavar="ARG", nargs=argparse.REMAINDER, help="extra arguments to the target bind module. Use '-h' to show help " "for the module")
[docs]def command(opts, parser, extra_arg_groups=None): from rez.config import config from rez.package_bind import bind_package, find_bind_module, \ get_bind_modules, _print_package_list from rez.utils.formatting import PackageRequest, columnise if opts.release: install_path = config.release_packages_path elif opts.install_path: install_path = opts.install_path else: install_path = config.local_packages_path if opts.list: d = get_bind_modules() rows = [["PACKAGE", "BIND MODULE"], ["-------", "-----------"]] rows += sorted(d.items()) print('\n'.join(columnise(rows))) return if opts.quickstart: # note: in dependency order, do not change names = ["platform", "arch", "os", "python", "rez", "rezgui", "setuptools", "pip"] variants = [] for name in names: print("Binding %s into %s..." % (name, install_path)) variants_ = bind_package(name, path=install_path, no_deps=True, quiet=True) variants.extend(variants_) if variants: print("\nSuccessfully converted the following software found on " "the current system into Rez packages:") print() _print_package_list(variants) print("\nTo bind other software, see what's available using the " "command 'rez-bind --list', then run 'rez-bind <name>'.\n") return if not opts.PKG: parser.error("PKG required.") req = PackageRequest(opts.PKG) name = req.name version_range = None if req.range.is_any() else req.range if opts.search: find_bind_module(name, verbose=True) else: bind_package(name, path=install_path, version_range=version_range, no_deps=opts.no_deps, bind_args=opts.BIND_ARGS)