(self,
                          context: interfaces.context.ContextInterface,
                          config_path: str,
                          requirement_root: interfaces.configuration.RequirementInterface,
                          requirement_type: Union[Tuple[Type[interfaces.configuration.RequirementInterface], ...],
                                                  Type[interfaces.configuration.RequirementInterface]],
                          shortcut: bool = True)
return results
Determines if there is actually an unfulfilled `Requirement`
        waiting.

        This ensures we do not carry out an expensive search when there is no need for a particular `Requirement`

        Args:
            context: Context on which to operate
            config_path: Configuration path of the top-level requirement
            requirement_root: Top-level requirement whose subrequirements will all be searched
            requirement_type: Type of requirement to find
            shortcut: Only returns requirements that live under unsatisfied requirements

        Returns:
            A list of tuples containing the config_path, sub_config_path and requirement identifying the unsatisfied `Requirements`
Determines if there is actually an unfulfilled `Requirement`
        waiting.
Determines if there is actually an unfulfilled Requirement waiting .
def find_requirements(self,
                          context: interfaces.context.ContextInterface,
                          config_path: str,
                          requirement_root: interfaces.configuration.RequirementInterface,
                          requirement_type: Union[Tuple[Type[interfaces.configuration.RequirementInterface], ...],
                                                  Type[interfaces.configuration.RequirementInterface]],
                          shortcut: bool = True) -> List[Tuple[str, interfaces.configuration.RequirementInterface]]:
        """Determines if there is actually an unfulfilled `Requirement`
        waiting.

        This ensures we do not carry out an expensive search when there is no need for a particular `Requirement`

        Args:
            context: Context on which to operate
            config_path: Configuration path of the top-level requirement
            requirement_root: Top-level requirement whose subrequirements will all be searched
            requirement_type: Type of requirement to find
            shortcut: Only returns requirements that live under unsatisfied requirements

        Returns:
            A list of tuples containing the config_path, sub_config_path and requirement identifying the unsatisfied `Requirements`
        """
        sub_config_path = interfaces.configuration.path_join(config_path, requirement_root.name)
        results = []  # type: List[Tuple[str, interfaces.configuration.RequirementInterface]]
        recurse = not shortcut
        if isinstance(requirement_root, requirement_type):
            if recurse or requirement_root.unsatisfied(context, config_path):
                results.append((sub_config_path, requirement_root))
        else:
            recurse = True
        if recurse:
            for subreq in requirement_root.requirements.values():
                results += self.find_requirements(context, sub_config_path, subreq, requirement_type, shortcut)
        return results
def find_requirements ( self , context : interfaces . context . ContextInterface , config_path : str , requirement_root : interfaces . configuration . RequirementInterface , requirement_type : Union [ Tuple [ Type [ interfaces . configuration . RequirementInterface ] , ... ] , Type [ interfaces . configuration . RequirementInterface ] ] , shortcut : bool = True ) -> List [ Tuple [ str , interfaces . configuration . RequirementInterface ] ] : sub_config_path = interfaces . configuration . path_join ( config_path , requirement_root . name ) results = [ ] # type: List[Tuple[str, interfaces.configuration.RequirementInterface]] recurse = not shortcut if isinstance ( requirement_root , requirement_type ) : if recurse or requirement_root . unsatisfied ( context , config_path ) : results . append ( ( sub_config_path , requirement_root ) ) else : recurse = True if recurse : for subreq in requirement_root . requirements . values ( ) : results += self . find_requirements ( context , sub_config_path , subreq , requirement_type , shortcut ) return results