本文整理汇总了Python中pants.engine.rules.RuleIndex类的典型用法代码示例。如果您正苦于以下问题:Python RuleIndex类的具体用法?Python RuleIndex怎么用?Python RuleIndex使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了RuleIndex类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_smallest_full_test_multiple_root_subject_types
def test_smallest_full_test_multiple_root_subject_types(self):
rules = [
RootRule(SubA),
RootRule(A),
TaskRule(A, [Select(SubA)], noop),
TaskRule(B, [Select(A)], noop)
]
fullgraph = self.create_full_graph(RuleIndex.create(rules))
self.assert_equal_with_printing(dedent("""
digraph {
// root subject types: A, SubA
// root entries
"Select(A) for A" [color=blue]
"Select(A) for A" -> {"SubjectIsProduct(A)"}
"Select(A) for SubA" [color=blue]
"Select(A) for SubA" -> {"(A, (Select(SubA),), noop) of SubA"}
"Select(B) for A" [color=blue]
"Select(B) for A" -> {"(B, (Select(A),), noop) of A"}
"Select(B) for SubA" [color=blue]
"Select(B) for SubA" -> {"(B, (Select(A),), noop) of SubA"}
// internal entries
"(A, (Select(SubA),), noop) of SubA" -> {"SubjectIsProduct(SubA)"}
"(B, (Select(A),), noop) of A" -> {"SubjectIsProduct(A)"}
"(B, (Select(A),), noop) of SubA" -> {"(A, (Select(SubA),), noop) of SubA"}
}""").strip(),
fullgraph)
示例2: test_select_dependencies_recurse_with_different_type
def test_select_dependencies_recurse_with_different_type(self):
rules = [
(Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop),
(B, (Select(A),), noop),
(C, (Select(SubA),), noop),
(SubA, tuple(), noop)
]
graphmaker = GraphMaker(RuleIndex.create(rules, tuple()),
root_subject_fns=_suba_root_subject_fns)
subgraph = graphmaker.generate_subgraph(SubA(), requested_product=A)
self.assert_equal_with_printing(dedent("""
{
root_subject_types: (SubA,)
root_rules:
Select(A) for SubA => ((Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop) of SubA,)
all_rules:
(B, (Select(A),), noop) of C => ((Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop) of C,)
(B, (Select(A),), noop) of D => ((Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop) of D,)
(Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop) of C => ((SubA, (), noop) of C, (B, (Select(A),), noop) of C, (B, (Select(A),), noop) of D,)
(Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop) of D => ((SubA, (), noop) of D, (B, (Select(A),), noop) of C, (B, (Select(A),), noop) of D,)
(Exactly(A), (SelectDependencies(B, SubA, field_types=(C, D,)),), noop) of SubA => (SubjectIsProduct(SubA), (B, (Select(A),), noop) of C, (B, (Select(A),), noop) of D,)
(SubA, (), noop) of C => (,)
(SubA, (), noop) of D => (,)
}""").strip(),
subgraph)
示例3: test_multiple_depend_on_same_rule
def test_multiple_depend_on_same_rule(self):
rules = _suba_root_rules + [
TaskRule(B, [Select(A)], noop),
TaskRule(C, [Select(A)], noop),
TaskRule(A, [Select(SubA)], noop)
]
subgraph = self.create_full_graph(RuleIndex.create(rules))
self.assert_equal_with_printing(dedent("""
digraph {
// root subject types: SubA
// root entries
"Select(A) for SubA" [color=blue]
"Select(A) for SubA" -> {"(A, (Select(SubA),), noop) of SubA"}
"Select(B) for SubA" [color=blue]
"Select(B) for SubA" -> {"(B, (Select(A),), noop) of SubA"}
"Select(C) for SubA" [color=blue]
"Select(C) for SubA" -> {"(C, (Select(A),), noop) of SubA"}
// internal entries
"(A, (Select(SubA),), noop) of SubA" -> {"SubjectIsProduct(SubA)"}
"(B, (Select(A),), noop) of SubA" -> {"(A, (Select(SubA),), noop) of SubA"}
"(C, (Select(A),), noop) of SubA" -> {"(A, (Select(SubA),), noop) of SubA"}
}""").strip(),
subgraph)
示例4: test_noop_removal_transitive
def test_noop_removal_transitive(self):
# If a noop-able rule has rules that depend on it,
# they should be removed from the graph.
rules = [
(Exactly(B), (Select(C),), noop),
(Exactly(A), (Select(B),), noop),
(Exactly(A), tuple(), noop),
]
intrinsics = [
(D, C, BoringRule(C))
]
graphmaker = GraphMaker(RuleIndex.create(rules, intrinsics),
root_subject_fns=_suba_root_subject_fns,
)
subgraph = graphmaker.generate_subgraph(SubA(), requested_product=A)
self.assert_equal_with_printing(dedent("""
{
root_subject_types: (SubA,)
root_rules:
Select(A) for SubA => ((Exactly(A), (), noop) of SubA,)
all_rules:
(Exactly(A), (), noop) of SubA => (,)
}""").strip(), subgraph)
示例5: test_full_graph_for_planner_example
def test_full_graph_for_planner_example(self):
symbol_table_cls = TargetTable
address_mapper = AddressMapper(symbol_table_cls, JsonParser, '*.BUILD.json')
rules = create_graph_rules(address_mapper, symbol_table_cls) + create_fs_rules()
rule_index = RuleIndex.create(rules)
fullgraph_str = self.create_full_graph(rule_index)
print('---diagnostic------')
print(fullgraph_str)
print('/---diagnostic------')
in_root_rules = False
in_all_rules = False
all_rules = []
root_rule_lines = []
for line in fullgraph_str.splitlines():
if line.startswith(' // root subject types:'):
pass
elif line.startswith(' // root entries'):
in_root_rules = True
elif line.startswith(' // internal entries'):
in_all_rules = True
elif in_all_rules:
all_rules.append(line)
elif in_root_rules:
root_rule_lines.append(line)
else:
pass
self.assertEquals(36, len(all_rules))
self.assertEquals(66, len(root_rule_lines)) # 2 lines per entry
示例6: test_full_graph_for_planner_example
def test_full_graph_for_planner_example(self):
symbol_table_cls = TargetTable
address_mapper = AddressMapper(symbol_table_cls, JsonParser, '*.BUILD.json')
tasks = create_graph_tasks(address_mapper, symbol_table_cls) + create_fs_tasks()
intrinsics = create_fs_intrinsics('Let us pretend that this is a ProjectTree!')
rule_index = RuleIndex.create(tasks, intrinsics)
graphmaker = GraphMaker(rule_index,
root_subject_fns={k: lambda p: Select(p) for k in (Address, # TODO, use the actual fns.
PathGlobs,
SingleAddress,
SiblingAddresses,
DescendantAddresses,
AscendantAddresses
)})
fullgraph = graphmaker.full_graph()
print('---diagnostic------')
print(fullgraph.error_message())
print('/---diagnostic------')
print(fullgraph)
# Assert that all of the rules specified the various task fns are present
declared_rules = rule_index.all_rules()
rules_remaining_in_graph_strs = set(str(r.rule) for r in fullgraph.rule_dependencies.keys())
declared_rule_strings = set(str(r) for r in declared_rules)
self.assertEquals(declared_rule_strings,
rules_remaining_in_graph_strs
)
# statically assert that the number of dependency keys is fixed
self.assertEquals(41, len(fullgraph.rule_dependencies))
示例7: test_ruleset_with_selector_only_provided_as_root_subject
def test_ruleset_with_selector_only_provided_as_root_subject(self):
rules = [(A, (Select(B),), noop)]
validator = RulesetValidator(RuleIndex.create(rules, tuple()),
goal_to_product={},
root_subject_fns={k: lambda p: Select(p) for k in (B,)})
validator.validate()
示例8: test_fails_if_root_subject_types_empty
def test_fails_if_root_subject_types_empty(self):
rules = [
(A, (Select(B),), noop),
]
with self.assertRaises(ValueError) as cm:
GraphMaker(RuleIndex.create(rules), tuple())
self.assertEquals(dedent("""
root_subject_fns must not be empty
""").strip(), str(cm.exception))
示例9: test_ruleset_with_explicit_type_constraint
def test_ruleset_with_explicit_type_constraint(self):
rules = [
(Exactly(A), (Select(B),), noop),
(B, (Select(A),), noop)
]
validator = RulesetValidator(RuleIndex.create(rules, tuple()),
goal_to_product={},
root_subject_fns={k: lambda p: Select(p) for k in (SubA,)})
validator.validate()
示例10: __init__
def __init__(self,
work_dir,
goals,
rules,
project_tree,
native,
graph_lock=None):
"""
:param goals: A dict from a goal name to a product type. A goal is just an alias for a
particular (possibly synthetic) product.
:param rules: A set of Rules which is used to compute values in the product graph.
:param project_tree: An instance of ProjectTree for the current build root.
:param work_dir: The pants work dir.
:param native: An instance of engine.subsystem.native.Native.
:param graph_lock: A re-entrant lock to use for guarding access to the internal product Graph
instance. Defaults to creating a new threading.RLock().
"""
self._products_by_goal = goals
self._project_tree = project_tree
self._product_graph_lock = graph_lock or threading.RLock()
self._run_count = 0
# Create the ExternContext, and the native Scheduler.
self._execution_request = None
# Validate and register all provided and intrinsic tasks.
# TODO: This bounding of input Subject types allows for closed-world validation, but is not
# strictly necessary for execution. We might eventually be able to remove it by only executing
# validation below the execution roots (and thus not considering paths that aren't in use).
root_subject_types = {
Address,
BuildFileAddress,
AscendantAddresses,
DescendantAddresses,
PathGlobs,
SiblingAddresses,
SingleAddress,
}
rules = list(rules) + create_snapshot_rules()
rule_index = RuleIndex.create(rules)
self._scheduler = WrappedNativeScheduler(native,
project_tree.build_root,
work_dir,
project_tree.ignore_patterns,
rule_index,
root_subject_types)
# If configured, visualize the rule graph before asserting that it is valid.
if self._scheduler.visualize_to_dir() is not None:
rule_graph_name = 'rule_graph.dot'
self.visualize_rule_graph_to_file(os.path.join(self._scheduler.visualize_to_dir(), rule_graph_name))
self._scheduler.assert_ruleset_valid()
示例11: test_ruleset_with_missing_product_type
def test_ruleset_with_missing_product_type(self):
rules = [(A, (Select(B),), noop)]
validator = RulesetValidator(RuleIndex.create(rules, tuple()),
goal_to_product={},
root_subject_fns={k: lambda p: Select(p) for k in (SubA,)})
with self.assertRaises(ValueError) as cm:
validator.validate()
self.assert_equal_with_printing(dedent("""
Rules with errors: 1
(A, (Select(B),), noop):
no matches for Select(B) with subject types: SubA
""").strip(),
str(cm.exception))
示例12: test_ruleset_with_goal_not_produced
def test_ruleset_with_goal_not_produced(self):
# The graph is complete, but the goal 'goal-name' requests A,
# which is not produced by any rule.
rules = [
(B, (Select(SubA),), noop)
]
validator = RulesetValidator(RuleIndex.create(rules, tuple()),
goal_to_product={'goal-name': AGoal},
root_subject_fns={k: lambda p: Select(p) for k in (SubA,)})
with self.assertRaises(ValueError) as cm:
validator.validate()
self.assert_equal_with_printing("no task for product used by goal \"goal-name\": AGoal",
str(cm.exception))
示例13: __init__
def __init__(self,
goals,
tasks,
project_tree,
native,
graph_lock=None):
"""
:param goals: A dict from a goal name to a product type. A goal is just an alias for a
particular (possibly synthetic) product.
:param tasks: A set of (output, input selection clause, task function) triples which
is used to compute values in the product graph.
:param project_tree: An instance of ProjectTree for the current build root.
:param native: An instance of engine.subsystem.native.Native.
:param graph_lock: A re-entrant lock to use for guarding access to the internal product Graph
instance. Defaults to creating a new threading.RLock().
"""
self._products_by_goal = goals
self._project_tree = project_tree
self._product_graph_lock = graph_lock or threading.RLock()
self._run_count = 0
# Create the ExternContext, and the native Scheduler.
self._execution_request = None
# Validate and register all provided and intrinsic tasks.
# TODO: This bounding of input Subject types allows for closed-world validation, but is not
# strictly necessary for execution. We might eventually be able to remove it by only executing
# validation below the execution roots (and thus not considering paths that aren't in use).
root_subject_types = {
Address,
BuildFileAddress,
AscendantAddresses,
DescendantAddresses,
PathGlobs,
SiblingAddresses,
SingleAddress,
}
singletons = create_snapshot_singletons()
rule_index = RuleIndex.create(tasks, intrinsic_entries=[], singleton_entries=singletons)
self._scheduler = WrappedNativeScheduler(native,
project_tree.build_root,
project_tree.ignore_patterns,
rule_index,
root_subject_types)
self._scheduler.assert_ruleset_valid()
示例14: test_smallest_full_test
def test_smallest_full_test(self):
rules = [
(Exactly(A), (Select(SubA),), noop)
]
fullgraph = GraphMaker(RuleIndex.create(rules, tuple()),
root_subject_fns={k: lambda p: Select(p) for k in (SubA,)}).full_graph()
self.assert_equal_with_printing(dedent("""
{
root_subject_types: (SubA,)
root_rules:
Select(A) for SubA => ((Exactly(A), (Select(SubA),), noop) of SubA,)
all_rules:
(Exactly(A), (Select(SubA),), noop) of SubA => (SubjectIsProduct(SubA),)
}""").strip(), fullgraph)
示例15: test_smallest_full_test
def test_smallest_full_test(self):
rules = _suba_root_rules + [
RootRule(SubA),
TaskRule(Exactly(A), [Select(SubA)], noop)
]
fullgraph = self.create_full_graph(RuleIndex.create(rules))
self.assert_equal_with_printing(dedent("""
digraph {
// root subject types: SubA
// root entries
"Select(A) for SubA" [color=blue]
"Select(A) for SubA" -> {"(A, (Select(SubA),), noop) of SubA"}
// internal entries
"(A, (Select(SubA),), noop) of SubA" -> {"SubjectIsProduct(SubA)"}
}""").strip(), fullgraph)