def backend_rules():
     return [example_rule, RootRule(RootType)]
 def rules(cls):
     return (
         *super().rules(),
         *awslambda_python_rules(),
         RootRule(PythonAwsLambdaFieldSet),
     )
 def rules(cls):
     return (super().rules() + [
         RootRule(JavacVersionExecutionRequest),
         get_javac_version_output,
     ] + create_cat_stdout_rules() + create_javac_compile_rules())
Example #4
0
class D:
    def __repr__(self):
        return "D()"


def noop(*args):
    pass


class SubA(A):
    def __repr__(self):
        return "SubA()"


_suba_root_rules = [RootRule(SubA)]

_this_is_not_a_type = 3


class ExampleOptions(GoalSubsystem):
    """An example."""

    name = "example"


class Example(Goal):
    subsystem_cls = ExampleOptions


@goal_rule
Example #5
0
 def rules(cls):
     return super().rules() + [
         get_owned_dependencies,
         get_exporting_owner,
         RootRule(DependencyOwner),
     ]
Example #6
0
 def rules(cls):
     return [*source_root.rules(), RootRule(Address)]
Example #7
0
def create_interactive_runner_rules():
    return [RootRule(InteractiveRunner)]
Example #8
0
 def rules(cls):
     return (*super().rules(), *black_rules(),
             RootRule(BlackConfigurations))
Example #9
0
 def rules(cls):
     return (*super().rules(), RootRule(Addresses), RootRule(WrappedTarget))
Example #10
0
 def mk_scheduler_in_example_fs(self, rules):
     rules = list(rules) + create_fs_rules() + [
         RootRule(ExecuteProcessRequest)
     ]
     return self.mk_scheduler(rules=rules,
                              project_tree=self.mk_example_fs_tree())
Example #11
0
 def rules(cls):
     return (
         *super().rules(),
         *pex_rules(),
         RootRule(PexRequest),
     )
Example #12
0
    def setup_graph_extended(
        options_bootstrapper: OptionsBootstrapper,
        build_configuration: BuildConfiguration,
        execution_options: ExecutionOptions,
        native: Native,
        *,
        pants_ignore_patterns: List[str],
        use_gitignore: bool,
        local_store_dir: str,
        local_execution_root_dir: str,
        named_caches_dir: str,
        build_root: Optional[str] = None,
        include_trace_on_error: bool = True,
    ) -> GraphScheduler:
        build_root = build_root or get_buildroot()

        build_configuration = build_configuration or BuildConfigInitializer.get(
            options_bootstrapper)
        rules = build_configuration.rules
        union_membership = UnionMembership.from_rules(
            build_configuration.union_rules)
        registered_target_types = RegisteredTargetTypes.create(
            build_configuration.target_types)

        bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope(
        )
        execution_options = execution_options or DEFAULT_EXECUTION_OPTIONS

        @rule
        def parser_singleton() -> Parser:
            return Parser(
                target_type_aliases=registered_target_types.aliases,
                object_aliases=build_configuration.registered_aliases,
            )

        @rule
        def build_configuration_singleton() -> BuildConfiguration:
            return build_configuration

        @rule
        def registered_target_types_singleton() -> RegisteredTargetTypes:
            return registered_target_types

        @rule
        def union_membership_singleton() -> UnionMembership:
            return union_membership

        @rule
        def build_root_singleton() -> BuildRoot:
            return cast(BuildRoot, BuildRoot.instance)

        # Create a Scheduler containing graph and filesystem rules, with no installed goals.
        rules = FrozenOrderedSet((
            *collect_rules(locals()),
            RootRule(Console),
            *build_files.rules(),
            *fs.rules(),
            *graph.rules(),
            *uuid.rules(),
            *options_parsing.rules(),
            *process.rules(),
            *create_platform_rules(),
            *changed_rules(),
            *rules,
        ))

        goal_map = EngineInitializer._make_goal_map_from_rules(rules)

        def ensure_absolute_path(v: str) -> str:
            return Path(v).resolve().as_posix()

        scheduler = Scheduler(
            native=native,
            ignore_patterns=pants_ignore_patterns,
            use_gitignore=use_gitignore,
            build_root=build_root,
            local_store_dir=ensure_absolute_path(local_store_dir),
            local_execution_root_dir=ensure_absolute_path(
                local_execution_root_dir),
            named_caches_dir=ensure_absolute_path(named_caches_dir),
            rules=rules,
            union_membership=union_membership,
            execution_options=execution_options,
            include_trace_on_error=include_trace_on_error,
            visualize_to_dir=bootstrap_options.native_engine_visualize_to,
        )

        return GraphScheduler(scheduler, goal_map)
Example #13
0
 def test_ruleset_with_selector_only_provided_as_root_subject(self):
     rules = [RootRule(B), TaskRule(A, [Select(B)], noop)]
     create_scheduler(rules)
Example #14
0
 def rules(cls):
     return super().rules() + [inject_init, RootRule(Snapshot)]
Example #15
0
 def rules(cls):
     return (*super().rules(), *target_rules(),
             RootRule(HydrateSourcesRequest))
Example #16
0
 def rules(cls):
   return super().rules() + [RootRule(MessageToGoalRule), workspace_goal_rule]
Example #17
0
 def rules(cls):
     return (*super().rules(), RootRule(AddressInput))
Example #18
0
def rules():
    return [*collect_rules(), RootRule(MaybeExtractable)]
Example #19
0
 def rules(cls):
     # Required for sources_for:
     return [RootRule(SourcesField)]
Example #20
0
def create_process_rules():
    """Intrinsically replaced on the rust side."""
    return [execute_process_noop, RootRule(ExecuteProcessRequest)]
Example #21
0
    def test_ruleset_with_selector_only_provided_as_root_subject(self):
        rules = [RootRule(B), TaskRule(A, [Select(B)], noop)]
        validator = self.create_validator({}, rules)

        validator.assert_ruleset_valid()
Example #22
0
def rules():
    return [*collect_rules(), RootRule(SourceFilesRequest)]
Example #23
0
 def rules(cls):
     return super().rules() + [
         get_ancestor_init_py,
         RootRule(HydratedTargets),
         RootRule(SourceRootConfig),
     ]
 def rules(cls):
     return (*super().rules(), *importable_python_sources_rules(),
             RootRule(HydratedTargets))
Example #25
0
 def rules(cls):
     return super().rules() + [
         get_exporting_owner,
         RootRule(OwnedDependency),
     ]
Example #26
0
    def setup_legacy_graph_extended(
        pants_ignore_patterns: List[str],
        use_gitignore: bool,
        local_store_dir,
        build_file_imports_behavior: BuildFileImportsBehavior,
        options_bootstrapper: OptionsBootstrapper,
        build_configuration: BuildConfiguration,
        build_root: Optional[str] = None,
        native: Optional[Native] = None,
        glob_match_error_behavior:
        GlobMatchErrorBehavior = GlobMatchErrorBehavior.warn,
        build_ignore_patterns=None,
        exclude_target_regexps=None,
        subproject_roots=None,
        include_trace_on_error: bool = True,
        execution_options: Optional[ExecutionOptions] = None,
    ) -> LegacyGraphScheduler:
        """Construct and return the components necessary for LegacyBuildGraph construction.

        :param local_store_dir: The directory to use for storing the engine's LMDB store in.
        :param build_file_imports_behavior: How to behave if a BUILD file being parsed tries to use
                                            import statements.
        :param build_root: A path to be used as the build root. If None, then default is used.
        :param native: An instance of the native-engine subsystem.
        :param options_bootstrapper: A `OptionsBootstrapper` object containing bootstrap options.
        :param build_configuration: The `BuildConfiguration` object to get build file aliases from.
        :param glob_match_error_behavior: How to behave if a glob specified for a target's sources or
                                          bundles does not expand to anything.
        :param list build_ignore_patterns: A list of paths ignore patterns used when searching for BUILD
                                           files, usually taken from the '--build-ignore' global option.
        :param list exclude_target_regexps: A list of regular expressions for excluding targets.
        :param list subproject_roots: Paths that correspond with embedded build roots
                                      under the current build root.
        :param include_trace_on_error: If True, when an error occurs, the error message will include
                                       the graph trace.
        :param execution_options: Option values for (remote) process execution.
        """

        build_root = build_root or get_buildroot()
        build_configuration = build_configuration or BuildConfigInitializer.get(
            options_bootstrapper)
        bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope(
        )

        build_file_aliases = build_configuration.registered_aliases()
        rules = build_configuration.rules()

        symbol_table = _legacy_symbol_table(build_file_aliases)

        # TODO: register this with the SymbolTable/LegacyPythonCallbacksParser so that the aliases
        #  exposed by the Target API are interpreted correctly.
        registered_target_types = RegisteredTargetTypes.create(
            build_configuration.targets())

        execution_options = execution_options or DEFAULT_EXECUTION_OPTIONS

        # Register "literal" subjects required for these rules.
        parser = LegacyPythonCallbacksParser(symbol_table, build_file_aliases,
                                             build_file_imports_behavior)
        address_mapper = AddressMapper(
            parser=parser,
            build_ignore_patterns=build_ignore_patterns,
            exclude_target_regexps=exclude_target_regexps,
            subproject_roots=subproject_roots,
        )

        @rule
        def glob_match_error_behavior_singleton() -> GlobMatchErrorBehavior:
            return glob_match_error_behavior

        @rule
        def build_configuration_singleton() -> BuildConfiguration:
            return build_configuration

        @rule
        def symbol_table_singleton() -> SymbolTable:
            return symbol_table

        @rule
        def registered_target_types_singleton() -> RegisteredTargetTypes:
            return registered_target_types

        @rule
        def union_membership_singleton() -> UnionMembership:
            return UnionMembership(build_configuration.union_rules())

        @rule
        def build_root_singleton() -> BuildRoot:
            return cast(BuildRoot, BuildRoot.instance)

        # Create a Scheduler containing graph and filesystem rules, with no installed goals. The
        # LegacyBuildGraph will explicitly request the products it needs.
        rules = (
            RootRule(Console),
            glob_match_error_behavior_singleton,
            build_configuration_singleton,
            symbol_table_singleton,
            registered_target_types_singleton,
            union_membership_singleton,
            build_root_singleton,
            *create_legacy_graph_tasks(),
            *create_fs_rules(),
            *create_interactive_runner_rules(),
            *create_process_rules(),
            *create_platform_rules(),
            *create_graph_rules(address_mapper),
            *create_options_parsing_rules(),
            *structs_rules(),
            *changed_rules(),
            *binary_tool_rules(),
            *binary_util_rules(),
            *rules,
        )

        goal_map = EngineInitializer._make_goal_map_from_rules(rules)

        union_rules = build_configuration.union_rules()

        scheduler = Scheduler(
            native=native,
            ignore_patterns=pants_ignore_patterns,
            use_gitignore=use_gitignore,
            build_root=build_root,
            local_store_dir=local_store_dir,
            rules=rules,
            union_rules=union_rules,
            execution_options=execution_options,
            include_trace_on_error=include_trace_on_error,
            visualize_to_dir=bootstrap_options.native_engine_visualize_to,
        )

        return LegacyGraphScheduler(scheduler, build_file_aliases, goal_map)
def create_javac_compile_rules():
    return [
        javac_compile_process_result,
        RootRule(JavacCompileRequest),
    ]
Example #28
0
  def setup_legacy_graph_extended(
    pants_ignore_patterns,
    workdir,
    local_store_dir,
    build_file_imports_behavior,
    options_bootstrapper,
    build_configuration,
    build_root=None,
    native=None,
    glob_match_error_behavior=None,
    build_ignore_patterns=None,
    exclude_target_regexps=None,
    subproject_roots=None,
    include_trace_on_error=True,
    execution_options=None,
  ):
    """Construct and return the components necessary for LegacyBuildGraph construction.

    :param list pants_ignore_patterns: A list of path ignore patterns for FileSystemProjectTree,
                                       usually taken from the '--pants-ignore' global option.
    :param str workdir: The pants workdir.
    :param local_store_dir: The directory to use for storing the engine's LMDB store in.
    :param build_file_imports_behavior: How to behave if a BUILD file being parsed tries to use
      import statements. Valid values: "allow", "warn", "error".
    :type build_file_imports_behavior: string
    :param str build_root: A path to be used as the build root. If None, then default is used.
    :param Native native: An instance of the native-engine subsystem.
    :param options_bootstrapper: A `OptionsBootstrapper` object containing bootstrap options.
    :type options_bootstrapper: :class:`pants.options.options_bootstrapper.OptionsBootstrapper`
    :param build_configuration: The `BuildConfiguration` object to get build file aliases from.
    :type build_configuration: :class:`pants.build_graph.build_configuration.BuildConfiguration`
    :param glob_match_error_behavior: How to behave if a glob specified for a target's sources or
                                      bundles does not expand to anything.
    :type glob_match_error_behavior: :class:`pants.option.global_options.GlobMatchErrorBehavior`
    :param list build_ignore_patterns: A list of paths ignore patterns used when searching for BUILD
                                       files, usually taken from the '--build-ignore' global option.
    :param list exclude_target_regexps: A list of regular expressions for excluding targets.
    :param list subproject_roots: Paths that correspond with embedded build roots
                                  under the current build root.
    :param bool include_trace_on_error: If True, when an error occurs, the error message will
                include the graph trace.
    :param execution_options: Option values for (remote) process execution.
    :type execution_options: :class:`pants.option.global_options.ExecutionOptions`
    :returns: A LegacyGraphScheduler.
    """

    build_root = build_root or get_buildroot()
    build_configuration = build_configuration or BuildConfigInitializer.get(options_bootstrapper)
    bootstrap_options = options_bootstrapper.bootstrap_options.for_global_scope()

    build_file_aliases = build_configuration.registered_aliases()
    rules = build_configuration.rules()

    symbol_table = LegacySymbolTable(build_file_aliases)

    project_tree = FileSystemProjectTree(build_root, pants_ignore_patterns)

    execution_options = execution_options or DEFAULT_EXECUTION_OPTIONS

    # Register "literal" subjects required for these rules.
    parser = LegacyPythonCallbacksParser(
      symbol_table,
      build_file_aliases,
      build_file_imports_behavior
    )
    address_mapper = AddressMapper(parser=parser,
                                   build_ignore_patterns=build_ignore_patterns,
                                   exclude_target_regexps=exclude_target_regexps,
                                   subproject_roots=subproject_roots)

    # Create a Scheduler containing graph and filesystem rules, with no installed goals. The
    # LegacyBuildGraph will explicitly request the products it needs.
    rules = (
      [
        RootRule(Console),
        SingletonRule.from_instance(GlobMatchErrorBehavior.create(glob_match_error_behavior)),
        SingletonRule.from_instance(build_configuration),
        SingletonRule(SymbolTable, symbol_table),
      ] +
      create_legacy_graph_tasks() +
      create_fs_rules() +
      create_process_rules() +
      create_graph_rules(address_mapper) +
      create_options_parsing_rules() +
      # TODO: This should happen automatically, but most tests (e.g. tests/python/pants_test/auth) fail if it's not here:
      python_test_runner.rules() +
      rules
    )

    goal_map = EngineInitializer._make_goal_map_from_rules(rules)

    scheduler = Scheduler(
      native,
      project_tree,
      workdir,
      local_store_dir,
      rules,
      execution_options,
      include_trace_on_error=include_trace_on_error,
      visualize_to_dir=bootstrap_options.native_engine_visualize_to,
    )

    return LegacyGraphScheduler(scheduler, symbol_table, goal_map)
def create_cat_stdout_rules():
    return [
        cat_files_process_result_concatted,
        RootRule(CatExecutionRequest),
    ]
Example #30
0
 def rules(cls):
     return (*super().rules(), *black_rules(), RootRule(BlackFieldSets))