Source code for rez.cli.search

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


"""
Search for packages
"""
from __future__ import print_function

import os
import sys


[docs]def setup_parser(parser, completions=False): from rez.package_search import ResourceSearchResultFormatter type_choices = ("package", "family", "variant", "auto") format_choices = ", ".join(sorted(ResourceSearchResultFormatter.fields)) parser.add_argument( "-t", "--type", default="auto", choices=type_choices, help="type of resource to search for. If 'auto', either packages or " "package families are searched, depending on the value of PKG") parser.add_argument( "--nl", "--no-local", dest="no_local", action="store_true", help="don't search local packages") parser.add_argument( "--validate", action="store_true", help="validate each resource that is found") parser.add_argument( "--paths", type=str, help="set package search path (ignores --no-local if set)") parser.add_argument( "-f", "--format", type=str, help="format package output, eg --format='{qualified_name} | " "{description}'. Valid fields include: %s" % format_choices) parser.add_argument( "--no-newlines", action="store_true", help="print newlines as '\\n' rather than actual newlines") parser.add_argument( "-l", "--latest", action="store_true", help="when searching packages, only show the latest version of each " "package") parser.add_argument( "-e", "--errors", action="store_true", help="only print packages containing errors (implies --validate)") parser.add_argument( "--nw", "--no-warnings", dest="no_warnings", action="store_true", help="suppress warnings") parser.add_argument( "--before", type=str, default='0', help="only show packages released before the given time. Supported " "formats are: epoch time (eg 1393014494), or relative time (eg -10s, " "-5m, -0.5h, -10d)") parser.add_argument( "--after", type=str, default='0', help="only show packages released after the given time. Supported " "formats are: epoch time (eg 1393014494), or relative time (eg -10s, " "-5m, -0.5h, -10d)") parser.add_argument( "-s", "--sort", action="store_true", help="print results in sorted order (deprecated)") PKG_action = parser.add_argument( "PKG", type=str, nargs='?', help="packages to search, glob-style patterns are supported") if completions: from rez.cli._complete_util import PackageCompleter PKG_action.completer = PackageCompleter
[docs]def command(opts, parser, extra_arg_groups=None): from rez.package_search import ResourceSearcher, ResourceSearchResultFormatter from rez.utils.formatting import get_epoch_time_from_str from rez.config import config before_time = get_epoch_time_from_str(opts.before) after_time = get_epoch_time_from_str(opts.after) if after_time and before_time and (after_time >= before_time): parser.error("non-overlapping --before and --after") if opts.no_warnings: config.override("warn_none", True) if opts.paths: paths = opts.paths.split(os.pathsep) paths = [x for x in paths if x] else: paths = None if opts.type == "auto": type_ = None else: type_ = opts.type searcher = ResourceSearcher( package_paths=paths, resource_type=type_, no_local=opts.no_local, latest=opts.latest, after_time=after_time, before_time=before_time, validate=(opts.validate or opts.errors) ) resource_type, search_results = searcher.search(opts.PKG) if opts.errors: search_results = [x for x in search_results if x.validation_error] if not search_results: print("No matching erroneous %s found." % resource_type, file=sys.stderr) sys.exit(1) elif not search_results: print("No matching %s found." % resource_type, file=sys.stderr) sys.exit(1) formatter = ResourceSearchResultFormatter( output_format=opts.format, suppress_newlines=opts.no_newlines ) formatter.print_search_results(search_results)