@ -28,8 +28,6 @@ from ansible.galaxy.dependency_resolution.versioning import (
from ansible . module_utils . six import string_types
from ansible . module_utils . six import string_types
from ansible . utils . version import SemanticVersion , LooseVersion
from ansible . utils . version import SemanticVersion , LooseVersion
from collections . abc import Set
try :
try :
from resolvelib import AbstractProvider
from resolvelib import AbstractProvider
from resolvelib import __version__ as resolvelib_version
from resolvelib import __version__ as resolvelib_version
@ -46,34 +44,6 @@ RESOLVELIB_UPPERBOUND = SemanticVersion("1.1.0")
RESOLVELIB_VERSION = SemanticVersion . from_loose_version ( LooseVersion ( resolvelib_version ) )
RESOLVELIB_VERSION = SemanticVersion . from_loose_version ( LooseVersion ( resolvelib_version ) )
class PinnedCandidateRequests ( Set ) :
""" Custom set class to store Candidate objects. Excludes the ' signatures ' attribute when determining if a Candidate instance is in the set. """
CANDIDATE_ATTRS = ( ' fqcn ' , ' ver ' , ' src ' , ' type ' )
def __init__ ( self , candidates ) :
self . _candidates = set ( candidates )
def __iter__ ( self ) :
return iter ( self . _candidates )
def __contains__ ( self , value ) :
if not isinstance ( value , Candidate ) :
raise ValueError ( f " Expected a Candidate object but got { value !r} " )
for candidate in self . _candidates :
# Compare Candidate attributes excluding "signatures" since it is
# unrelated to whether or not a matching Candidate is user-requested.
# Candidate objects in the set are not expected to have signatures.
for attr in PinnedCandidateRequests . CANDIDATE_ATTRS :
if getattr ( value , attr ) != getattr ( candidate , attr ) :
break
else :
return True
return False
def __len__ ( self ) :
return len ( self . _candidates )
class CollectionDependencyProviderBase ( AbstractProvider ) :
class CollectionDependencyProviderBase ( AbstractProvider ) :
""" Delegate providing a requirement interface for the resolver. """
""" Delegate providing a requirement interface for the resolver. """
@ -117,7 +87,7 @@ class CollectionDependencyProviderBase(AbstractProvider):
Requirement . from_requirement_dict ,
Requirement . from_requirement_dict ,
art_mgr = concrete_artifacts_manager ,
art_mgr = concrete_artifacts_manager ,
)
)
self . _pinned_candidate_requests = PinnedCandidateRequests (
self . _pinned_candidate_requests = set (
# NOTE: User-provided signatures are supplemental, so signatures
# NOTE: User-provided signatures are supplemental, so signatures
# NOTE: are not used to determine if a candidate is user-requested
# NOTE: are not used to determine if a candidate is user-requested
Candidate ( req . fqcn , req . ver , req . src , req . type , None )
Candidate ( req . fqcn , req . ver , req . src , req . type , None )