Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/virtualenv/run/__init__.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/virtualenv/run/__init__.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,156 @@ +from __future__ import absolute_import, unicode_literals + +import logging +import os +from functools import partial + +from ..app_data import make_app_data +from ..config.cli.parser import VirtualEnvConfigParser +from ..report import LEVELS, setup_report +from ..run.session import Session +from ..seed.wheels.periodic_update import manual_upgrade +from ..version import __version__ +from .plugin.activators import ActivationSelector +from .plugin.creators import CreatorSelector +from .plugin.discovery import get_discover +from .plugin.seeders import SeederSelector + + +def cli_run(args, options=None, setup_logging=True, env=None): + """ + Create a virtual environment given some command line interface arguments. + + :param args: the command line arguments + :param options: passing in a ``VirtualEnvOptions`` object allows return of the parsed options + :param setup_logging: ``True`` if setup logging handlers, ``False`` to use handlers already registered + :param env: environment variables to use + :return: the session object of the creation (its structure for now is experimental and might change on short notice) + """ + env = os.environ if env is None else env + of_session = session_via_cli(args, options, setup_logging, env) + with of_session: + of_session.run() + return of_session + + +def session_via_cli(args, options=None, setup_logging=True, env=None): + """ + Create a virtualenv session (same as cli_run, but this does not perform the creation). Use this if you just want to + query what the virtual environment would look like, but not actually create it. + + :param args: the command line arguments + :param options: passing in a ``VirtualEnvOptions`` object allows return of the parsed options + :param setup_logging: ``True`` if setup logging handlers, ``False`` to use handlers already registered + :param env: environment variables to use + :return: the session object of the creation (its structure for now is experimental and might change on short notice) + """ + env = os.environ if env is None else env + parser, elements = build_parser(args, options, setup_logging, env) + options = parser.parse_args(args) + creator, seeder, activators = tuple(e.create(options) for e in elements) # create types + of_session = Session(options.verbosity, options.app_data, parser._interpreter, creator, seeder, activators) # noqa + return of_session + + +def build_parser(args=None, options=None, setup_logging=True, env=None): + parser = VirtualEnvConfigParser(options, os.environ if env is None else env) + add_version_flag(parser) + parser.add_argument( + "--with-traceback", + dest="with_traceback", + action="store_true", + default=False, + help="on failure also display the stacktrace internals of virtualenv", + ) + _do_report_setup(parser, args, setup_logging) + options = load_app_data(args, parser, options) + handle_extra_commands(options) + + discover = get_discover(parser, args) + parser._interpreter = interpreter = discover.interpreter + if interpreter is None: + raise RuntimeError("failed to find interpreter for {}".format(discover)) + elements = [ + CreatorSelector(interpreter, parser), + SeederSelector(interpreter, parser), + ActivationSelector(interpreter, parser), + ] + options, _ = parser.parse_known_args(args) + for element in elements: + element.handle_selected_arg_parse(options) + parser.enable_help() + return parser, elements + + +def build_parser_only(args=None): + """Used to provide a parser for the doc generation""" + return build_parser(args)[0] + + +def handle_extra_commands(options): + if options.upgrade_embed_wheels: + result = manual_upgrade(options.app_data, options.env) + raise SystemExit(result) + + +def load_app_data(args, parser, options): + parser.add_argument( + "--read-only-app-data", + action="store_true", + help="use app data folder in read-only mode (write operations will fail with error)", + ) + options, _ = parser.parse_known_args(args, namespace=options) + + # here we need a write-able application data (e.g. the zipapp might need this for discovery cache) + parser.add_argument( + "--app-data", + help="a data folder used as cache by the virtualenv", + type=partial(make_app_data, read_only=options.read_only_app_data, env=options.env), + default=make_app_data(None, read_only=options.read_only_app_data, env=options.env), + ) + parser.add_argument( + "--reset-app-data", + action="store_true", + help="start with empty app data folder", + ) + parser.add_argument( + "--upgrade-embed-wheels", + action="store_true", + help="trigger a manual update of the embedded wheels", + ) + options, _ = parser.parse_known_args(args, namespace=options) + if options.reset_app_data: + options.app_data.reset() + return options + + +def add_version_flag(parser): + import virtualenv + + parser.add_argument( + "--version", + action="version", + version="%(prog)s {} from {}".format(__version__, virtualenv.__file__), + help="display the version of the virtualenv package and its location, then exit", + ) + + +def _do_report_setup(parser, args, setup_logging): + level_map = ", ".join("{}={}".format(logging.getLevelName(l), c) for c, l in sorted(list(LEVELS.items()))) + msg = "verbosity = verbose - quiet, default {}, mapping => {}" + verbosity_group = parser.add_argument_group( + title="verbosity", + description=msg.format(logging.getLevelName(LEVELS[3]), level_map), + ) + verbosity = verbosity_group.add_mutually_exclusive_group() + verbosity.add_argument("-v", "--verbose", action="count", dest="verbose", help="increase verbosity", default=2) + verbosity.add_argument("-q", "--quiet", action="count", dest="quiet", help="decrease verbosity", default=0) + option, _ = parser.parse_known_args(args) + if setup_logging: + setup_report(option.verbosity) + + +__all__ = ( + "cli_run", + "session_via_cli", +)