Merge pull request #49 from enpaul/enp/log

Add internal logging wrapper to reduce copy/paste
This commit is contained in:
Ethan Paul 2021-04-16 20:16:38 -04:00 committed by GitHub
commit ab4fc1197f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 52 deletions

View File

@ -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

View File

@ -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...")

View 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}")

View File

@ -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: