diff options
Diffstat (limited to 'tox/_config.py')
-rw-r--r-- | tox/_config.py | 66 |
1 files changed, 17 insertions, 49 deletions
diff --git a/tox/_config.py b/tox/_config.py index d5e8a31..4468d86 100644 --- a/tox/_config.py +++ b/tox/_config.py @@ -8,10 +8,8 @@ import shlex import string import pkg_resources import itertools -import pluggy -import tox.interpreters -from tox import hookspecs +from tox.interpreters import Interpreters import py @@ -24,43 +22,20 @@ default_factors = {'jython': 'jython', 'pypy': 'pypy', 'pypy3': 'pypy3', for version in '24,25,26,27,30,31,32,33,34,35'.split(','): default_factors['py' + version] = 'python%s.%s' % tuple(version) -hookimpl = pluggy.HookimplMarker("tox") - -def get_plugin_manager(): - # initialize plugin manager - pm = pluggy.PluginManager("tox") - pm.add_hookspecs(hookspecs) - pm.register(tox._config) - pm.register(tox.interpreters) - pm.load_setuptools_entrypoints("tox") - pm.check_pending() - return pm - - -def parseconfig(args=None): +def parseconfig(args=None, pkg=None): """ :param list[str] args: Optional list of arguments. :type pkg: str :rtype: :class:`Config` :raise SystemExit: toxinit file is not found """ - - pm = get_plugin_manager() - if args is None: args = sys.argv[1:] - - # prepare command line options - parser = argparse.ArgumentParser(description=__doc__) - pm.hook.tox_addoption(parser=parser) - - # parse command line options - option = parser.parse_args(args) - interpreters = tox.interpreters.Interpreters(hook=pm.hook) - config = Config(pluginmanager=pm, option=option, interpreters=interpreters) - - # parse ini file + parser = prepare_parse(pkg) + opts = parser.parse_args(args) + config = Config() + config.option = opts basename = config.option.configfile if os.path.isabs(basename): inipath = py.path.local(basename) @@ -77,10 +52,6 @@ def parseconfig(args=None): exn = sys.exc_info()[1] # Use stdout to match test expectations py.builtin.print_("ERROR: " + str(exn)) - - # post process config object - pm.hook.tox_configure(config=config) - return config @@ -92,8 +63,10 @@ def feedback(msg, sysexit=False): class VersionAction(argparse.Action): def __call__(self, argparser, *args, **kwargs): - version = tox.__version__ - py.builtin.print_("%s imported from %s" % (version, tox.__file__)) + name = argparser.pkgname + mod = __import__(name) + version = mod.__version__ + py.builtin.print_("%s imported from %s" % (version, mod.__file__)) raise SystemExit(0) @@ -105,9 +78,10 @@ class CountAction(argparse.Action): setattr(namespace, self.dest, 0) -@hookimpl -def tox_addoption(parser): +def prepare_parse(pkgname): + parser = argparse.ArgumentParser(description=__doc__,) # formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.pkgname = pkgname parser.add_argument("--version", nargs=0, action=VersionAction, dest="version", help="report version information to stdout.") @@ -179,12 +153,10 @@ def tox_addoption(parser): class Config(object): - def __init__(self, pluginmanager, option, interpreters): + def __init__(self): self.envconfigs = {} self.invocationcwd = py.path.local() - self.interpreters = interpreters - self.pluginmanager = pluginmanager - self.option = option + self.interpreters = Interpreters() @property def homedir(self): @@ -220,14 +192,10 @@ class VenvConfig: def envsitepackagesdir(self): self.getsupportedinterpreter() # for throwing exceptions x = self.config.interpreters.get_sitepackagesdir( - info=self.python_info, + info=self._basepython_info, envdir=self.envdir) return x - @property - def python_info(self): - return self.config.interpreters.get_info(self.basepython) - def getsupportedinterpreter(self): if sys.platform == "win32" and self.basepython and \ "jython" in self.basepython: @@ -388,7 +356,7 @@ class parseini: bp = next((default_factors[f] for f in factors if f in default_factors), sys.executable) vc.basepython = reader.getdefault(section, "basepython", bp) - + vc._basepython_info = config.interpreters.get_info(vc.basepython) reader.addsubstitutions(envdir=vc.envdir, envname=vc.envname, envbindir=vc.envbindir, envpython=vc.envpython, envsitepackagesdir=vc.envsitepackagesdir) |