mirror of
				https://github.com/enpaul/tox-poetry-installer.git
				synced 2025-11-03 07:39:20 +00:00 
			
		
		
		
	Merge pull request #49 from enpaul/enp/log
Add internal logging wrapper to reduce copy/paste
This commit is contained in:
		@@ -12,9 +12,9 @@ from tox.config import Parser as ToxParser
 | 
			
		||||
from tox.venv import VirtualEnv as ToxVirtualEnv
 | 
			
		||||
 | 
			
		||||
from tox_poetry_installer import __about__
 | 
			
		||||
from tox_poetry_installer import constants
 | 
			
		||||
from tox_poetry_installer import exceptions
 | 
			
		||||
from tox_poetry_installer import installer
 | 
			
		||||
from tox_poetry_installer import logger
 | 
			
		||||
from tox_poetry_installer import utilities
 | 
			
		||||
from tox_poetry_installer.datatypes import PackageMap
 | 
			
		||||
 | 
			
		||||
@@ -83,19 +83,17 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
 | 
			
		||||
            and venv.envconfig.config.option.require_poetry
 | 
			
		||||
        ):
 | 
			
		||||
            venv.status = err.__class__.__name__
 | 
			
		||||
            tox.reporter.error(str(err))
 | 
			
		||||
            logger.error(str(err))
 | 
			
		||||
            return False
 | 
			
		||||
        tox.reporter.verbosity1(str(err))
 | 
			
		||||
        logger.info(str(err))
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    tox.reporter.verbosity1(
 | 
			
		||||
        f"{constants.REPORTER_PREFIX} Loaded project pyproject.toml from {poetry.file}"
 | 
			
		||||
    )
 | 
			
		||||
    logger.info(f"Loaded project pyproject.toml from {poetry.file}")
 | 
			
		||||
 | 
			
		||||
    virtualenv = utilities.convert_virtualenv(venv)
 | 
			
		||||
 | 
			
		||||
    if not poetry.locker.is_fresh():
 | 
			
		||||
        tox.reporter.warning(
 | 
			
		||||
        logger.warning(
 | 
			
		||||
            f"The Poetry lock file is not up to date with the latest changes in {poetry.file}"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
@@ -112,42 +110,38 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
 | 
			
		||||
 | 
			
		||||
        if venv.envconfig.install_dev_deps:
 | 
			
		||||
            dev_deps = utilities.find_dev_deps(packages, virtualenv, poetry)
 | 
			
		||||
            tox.reporter.verbosity1(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Identified {len(dev_deps)} development dependencies to install to env"
 | 
			
		||||
            logger.info(
 | 
			
		||||
                f"Identified {len(dev_deps)} development dependencies to install to env"
 | 
			
		||||
            )
 | 
			
		||||
        else:
 | 
			
		||||
            dev_deps = []
 | 
			
		||||
            tox.reporter.verbosity1(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Env does not install development dependencies, skipping"
 | 
			
		||||
            )
 | 
			
		||||
            logger.info("Env does not install development dependencies, skipping")
 | 
			
		||||
 | 
			
		||||
        env_deps = utilities.find_additional_deps(
 | 
			
		||||
            packages, virtualenv, poetry, venv.envconfig.locked_deps
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        tox.reporter.verbosity1(
 | 
			
		||||
            f"{constants.REPORTER_PREFIX} Identified {len(env_deps)} environment dependencies to install to env"
 | 
			
		||||
        logger.info(
 | 
			
		||||
            f"Identified {len(env_deps)} environment dependencies to install to env"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if not venv.envconfig.skip_install and not venv.envconfig.config.skipsdist:
 | 
			
		||||
            project_deps = utilities.find_project_deps(
 | 
			
		||||
                packages, virtualenv, poetry, venv.envconfig.extras
 | 
			
		||||
            )
 | 
			
		||||
            tox.reporter.verbosity1(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Identified {len(project_deps)} project dependencies to install to env"
 | 
			
		||||
            logger.info(
 | 
			
		||||
                f"Identified {len(project_deps)} project dependencies to install to env"
 | 
			
		||||
            )
 | 
			
		||||
        else:
 | 
			
		||||
            project_deps = []
 | 
			
		||||
            tox.reporter.verbosity1(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Env does not install project package, skipping"
 | 
			
		||||
            )
 | 
			
		||||
            logger.info("Env does not install project package, skipping")
 | 
			
		||||
    except exceptions.ToxPoetryInstallerException as err:
 | 
			
		||||
        venv.status = err.__class__.__name__
 | 
			
		||||
        tox.reporter.error(f"{constants.REPORTER_PREFIX} {err}")
 | 
			
		||||
        logger.error(str(err))
 | 
			
		||||
        return False
 | 
			
		||||
    except Exception as err:
 | 
			
		||||
        venv.status = "InternalError"
 | 
			
		||||
        tox.reporter.error(f"{constants.REPORTER_PREFIX} Internal plugin error: {err}")
 | 
			
		||||
        logger.error(f"Internal plugin error: {err}")
 | 
			
		||||
        raise err
 | 
			
		||||
 | 
			
		||||
    dependencies = dev_deps + env_deps + project_deps
 | 
			
		||||
 
 | 
			
		||||
@@ -9,11 +9,10 @@ from typing import Optional
 | 
			
		||||
from typing import Sequence
 | 
			
		||||
from typing import Set
 | 
			
		||||
 | 
			
		||||
import tox
 | 
			
		||||
from poetry.core.packages import Package as PoetryPackage
 | 
			
		||||
from tox.venv import VirtualEnv as ToxVirtualEnv
 | 
			
		||||
 | 
			
		||||
from tox_poetry_installer import constants
 | 
			
		||||
from tox_poetry_installer import logger
 | 
			
		||||
from tox_poetry_installer import utilities
 | 
			
		||||
 | 
			
		||||
if typing.TYPE_CHECKING:
 | 
			
		||||
@@ -36,8 +35,8 @@ def install(
 | 
			
		||||
    """
 | 
			
		||||
    from tox_poetry_installer import _poetry
 | 
			
		||||
 | 
			
		||||
    tox.reporter.verbosity1(
 | 
			
		||||
        f"{constants.REPORTER_PREFIX} Installing {len(packages)} packages to environment at {venv.envconfig.envdir}"
 | 
			
		||||
    logger.info(
 | 
			
		||||
        f"Installing {len(packages)} packages to environment at {venv.envconfig.envdir}"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    pip = _poetry.PipInstaller(
 | 
			
		||||
@@ -68,14 +67,8 @@ def install(
 | 
			
		||||
        for dependency in packages:
 | 
			
		||||
            if dependency not in installed:
 | 
			
		||||
                installed.add(dependency)
 | 
			
		||||
                tox.reporter.verbosity2(
 | 
			
		||||
                    f"{constants.REPORTER_PREFIX} Installing {dependency}"
 | 
			
		||||
                )
 | 
			
		||||
                logger.debug(f"Installing {dependency}")
 | 
			
		||||
                executor(pip.install, dependency)
 | 
			
		||||
            else:
 | 
			
		||||
                tox.reporter.verbosity2(
 | 
			
		||||
                    f"{constants.REPORTER_PREFIX} Skipping {dependency}, already installed"
 | 
			
		||||
                )
 | 
			
		||||
        tox.reporter.verbosity2(
 | 
			
		||||
            f"{constants.REPORTER_PREFIX} Waiting for installs to finish..."
 | 
			
		||||
        )
 | 
			
		||||
                logger.debug(f"Skipping {dependency}, already installed")
 | 
			
		||||
        logger.debug("Waiting for installs to finish...")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								tox_poetry_installer/logger.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								tox_poetry_installer/logger.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
"""Logging wrappers to reduce duplication elsewhere
 | 
			
		||||
 | 
			
		||||
Calling ``tox.reporter.something()`` and having to format a string with the prefix
 | 
			
		||||
gets really old fast, but more importantly it also makes the flow of the main code
 | 
			
		||||
more difficult to follow because of the added complexity.
 | 
			
		||||
"""
 | 
			
		||||
import tox
 | 
			
		||||
 | 
			
		||||
from tox_poetry_installer import constants
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def error(message: str):
 | 
			
		||||
    """Wrapper around :func:`tox.reporter.error`"""
 | 
			
		||||
    tox.reporter.error(f"{constants.REPORTER_PREFIX} {message}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def warning(message: str):
 | 
			
		||||
    """Wrapper around :func:`tox.reporter.warning`"""
 | 
			
		||||
    tox.reporter.warning(f"{constants.REPORTER_PREFIX} {message}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def info(message: str):
 | 
			
		||||
    """Wrapper around :func:`tox.reporter.verbosity1`"""
 | 
			
		||||
    tox.reporter.verbosity1(f"{constants.REPORTER_PREFIX} {message}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def debug(message: str):
 | 
			
		||||
    """Wrapper around :func:`tox.reporter.verbosity2`"""
 | 
			
		||||
    tox.reporter.verbosity2(f"{constants.REPORTER_PREFIX} {message}")
 | 
			
		||||
@@ -9,7 +9,6 @@ from typing import Sequence
 | 
			
		||||
from typing import Set
 | 
			
		||||
from typing import Union
 | 
			
		||||
 | 
			
		||||
import tox
 | 
			
		||||
from poetry.core.packages import Dependency as PoetryDependency
 | 
			
		||||
from poetry.core.packages import Package as PoetryPackage
 | 
			
		||||
from tox.action import Action as ToxAction
 | 
			
		||||
@@ -17,6 +16,7 @@ from tox.venv import VirtualEnv as ToxVirtualEnv
 | 
			
		||||
 | 
			
		||||
from tox_poetry_installer import constants
 | 
			
		||||
from tox_poetry_installer import exceptions
 | 
			
		||||
from tox_poetry_installer import logger
 | 
			
		||||
from tox_poetry_installer.datatypes import PackageMap
 | 
			
		||||
 | 
			
		||||
if typing.TYPE_CHECKING:
 | 
			
		||||
@@ -101,14 +101,10 @@ def identify_transients(
 | 
			
		||||
            for requirement in packages[transient.name].requires:
 | 
			
		||||
                if requirement.name not in searched:
 | 
			
		||||
                    _deps_of_dep(requirement)
 | 
			
		||||
            tox.reporter.verbosity2(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Including {transient} for installation"
 | 
			
		||||
            )
 | 
			
		||||
            logger.debug(f"Including {transient} for installation")
 | 
			
		||||
            transients.append(packages[transient.name])
 | 
			
		||||
        else:
 | 
			
		||||
            tox.reporter.verbosity2(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Skipping {transient}: package requires {transient.marker}"
 | 
			
		||||
            )
 | 
			
		||||
            logger.debug(f"Skipping {transient}: package requires {transient.marker}")
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        if isinstance(dep, str):
 | 
			
		||||
@@ -119,18 +115,14 @@ def identify_transients(
 | 
			
		||||
        dep_name = err.args[0]
 | 
			
		||||
 | 
			
		||||
        if dep_name in _poetry.Provider.UNSAFE_PACKAGES:
 | 
			
		||||
            tox.reporter.warning(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Installing package '{dep_name}' using Poetry is not supported and will be skipped"
 | 
			
		||||
            )
 | 
			
		||||
            tox.reporter.verbosity2(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Skipping {dep_name}: designated unsafe by Poetry"
 | 
			
		||||
            logger.warning(
 | 
			
		||||
                f"Installing package '{dep_name}' using Poetry is not supported and will be skipped"
 | 
			
		||||
            )
 | 
			
		||||
            logger.debug(f"Skipping {dep_name}: designated unsafe by Poetry")
 | 
			
		||||
            return []
 | 
			
		||||
 | 
			
		||||
        if dep_name in allow_missing:
 | 
			
		||||
            tox.reporter.verbosity2(
 | 
			
		||||
                f"{constants.REPORTER_PREFIX} Skipping {dep_name}: package is allowed to be unlocked"
 | 
			
		||||
            )
 | 
			
		||||
            logger.debug(f"Skipping {dep_name}: package is allowed to be unlocked")
 | 
			
		||||
            return []
 | 
			
		||||
 | 
			
		||||
        if any(
 | 
			
		||||
@@ -171,9 +163,7 @@ def find_project_deps(
 | 
			
		||||
 | 
			
		||||
    extra_deps: List[PoetryPackage] = []
 | 
			
		||||
    for extra in extras:
 | 
			
		||||
        tox.reporter.verbosity1(
 | 
			
		||||
            f"{constants.REPORTER_PREFIX} Processing project extra '{extra}'"
 | 
			
		||||
        )
 | 
			
		||||
        logger.info(f"Processing project extra '{extra}'")
 | 
			
		||||
        try:
 | 
			
		||||
            extra_deps += [packages[item.name] for item in poetry.package.extras[extra]]
 | 
			
		||||
        except KeyError:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user