mirror of
				https://github.com/enpaul/tox-poetry-installer.git
				synced 2025-11-03 07:39:20 +00:00 
			
		
		
		
	Update transient dep resolution to always exclude root package name
Fixes #37
This commit is contained in:
		@@ -112,7 +112,9 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
 | 
			
		||||
 | 
			
		||||
        env_deps: List[PoetryPackage] = []
 | 
			
		||||
        for dep in venv.envconfig.locked_deps:
 | 
			
		||||
            env_deps += utilities.find_transients(package_map, dep.lower())
 | 
			
		||||
            env_deps += utilities.find_transients(
 | 
			
		||||
                package_map, dep.lower(), allow_missing=[poetry.package.name]
 | 
			
		||||
            )
 | 
			
		||||
        reporter.verbosity1(
 | 
			
		||||
            f"{constants.REPORTER_PREFIX} Identified {len(env_deps)} environment dependencies to install to env"
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -48,13 +48,17 @@ def install_to_venv(
 | 
			
		||||
        installer.install(dependency)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPackage]:
 | 
			
		||||
def find_transients(
 | 
			
		||||
    packages: PackageMap, dependency_name: str, allow_missing: Sequence[str] = ()
 | 
			
		||||
) -> Set[PoetryPackage]:
 | 
			
		||||
    """Using a poetry object identify all dependencies of a specific dependency
 | 
			
		||||
 | 
			
		||||
    :param poetry: Populated poetry object which can be used to build a populated locked
 | 
			
		||||
                   repository object.
 | 
			
		||||
    :param packages: All packages from the lockfile to use for identifying dependency relationships.
 | 
			
		||||
    :param dependency_name: Bare name (without version) of the dependency to fetch the transient
 | 
			
		||||
                            dependencies of.
 | 
			
		||||
    :param allow_missing: Sequence of package names to allow to be missing from the lockfile. Any
 | 
			
		||||
                          packages that are not found in the lockfile but their name appears in this
 | 
			
		||||
                          list will be silently skipped from installation.
 | 
			
		||||
    :returns: List of packages that need to be installed for the requested dependency.
 | 
			
		||||
 | 
			
		||||
    .. note:: The package corresponding to the dependency named by ``dependency_name`` is included
 | 
			
		||||
@@ -75,7 +79,15 @@ def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPac
 | 
			
		||||
            return dict()
 | 
			
		||||
 | 
			
		||||
        transients: PackageMap = {}
 | 
			
		||||
        package = packages[name]
 | 
			
		||||
        try:
 | 
			
		||||
            package = packages[name]
 | 
			
		||||
        except KeyError as err:
 | 
			
		||||
            if name in allow_missing:
 | 
			
		||||
                reporter.verbosity2(
 | 
			
		||||
                    f"{constants.REPORTER_PREFIX} Skip {name}: package is not in lockfile but designated as allowed to be missing"
 | 
			
		||||
                )
 | 
			
		||||
                return dict()
 | 
			
		||||
            raise err
 | 
			
		||||
 | 
			
		||||
        if not package.python_constraint.allows(constants.PLATFORM_VERSION):
 | 
			
		||||
            reporter.verbosity2(
 | 
			
		||||
@@ -190,6 +202,8 @@ def find_project_dependencies(
 | 
			
		||||
 | 
			
		||||
    dependencies: List[PoetryPackage] = []
 | 
			
		||||
    for dep in base_dependencies + extra_dependencies:
 | 
			
		||||
        dependencies += find_transients(packages, dep.name.lower())
 | 
			
		||||
        dependencies += find_transients(
 | 
			
		||||
            packages, dep.name.lower(), allow_missing=[poetry.package.name]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    return dependencies
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user