Skip to content

Commit

Permalink
cleanup for review
Browse files Browse the repository at this point in the history
[ci skip-rust]

[ci skip-build-wheels]
  • Loading branch information
Tom Dyas committed Oct 20, 2020
1 parent add0892 commit 9c3d29c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 32 deletions.
10 changes: 6 additions & 4 deletions src/python/pants/bin/local_pants_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import logging
import os
from dataclasses import dataclass, replace
from typing import Mapping, Optional, Set, Tuple
from typing import List, Mapping, Optional, Tuple

from pants.base.build_environment import get_buildroot
from pants.base.exception_sink import ExceptionSink
Expand Down Expand Up @@ -56,7 +56,7 @@ class LocalPantsRunner:
union_membership: UnionMembership
profile_path: Optional[str]
_run_tracker: RunTracker
_session_lifecycle_handlers: Set[SessionLifecycleHandler]
_session_lifecycle_handlers: List[SessionLifecycleHandler]

@classmethod
def parse_options(
Expand Down Expand Up @@ -168,7 +168,9 @@ def create(
# for this session.
session_lifecycle_handlers = []
for lifecycle_handler in build_config.lifecycle_handlers:
session_lifecycle_handler = lifecycle_handler.on_session_create(options)
session_lifecycle_handler = lifecycle_handler.on_session_create(
build_root=build_root, options=options, specs=specs
)
if session_lifecycle_handler:
session_lifecycle_handlers.append(session_lifecycle_handler)

Expand Down Expand Up @@ -298,6 +300,6 @@ def run(self, start_time: float) -> ExitCode:

# Invoke the session lifecycle handlers, if any.
for session_lifecycle_handler in self._session_lifecycle_handlers:
session_lifecycle_handler.on_session_end()
session_lifecycle_handler.on_session_end(engine_result=engine_result)

return self._merge_exit_codes(engine_result, run_tracker_result)
4 changes: 3 additions & 1 deletion src/python/pants/build_graph/build_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,9 @@ def register_target_types(
)
self._target_types.update(target_types)

def register_lifecycle_handlers(self, handlers: typing.Iterable[ExtensionLifecycleHandler]):
def register_lifecycle_handlers(
self, handlers: Union[typing.Iterable[ExtensionLifecycleHandler], typing.Any]
):
if not isinstance(handlers, Iterable):
raise TypeError(
f"The entrypoint `lifecycle_handlers` must return an iterable. Given {repr(handlers)}"
Expand Down
32 changes: 32 additions & 0 deletions src/python/pants/build_graph/build_configuration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
# Licensed under the Apache License, Version 2.0 (see LICENSE).

import unittest
from typing import Optional

from pants.base.specs import Specs
from pants.build_graph.build_configuration import BuildConfiguration
from pants.build_graph.build_file_aliases import BuildFileAliases
from pants.build_graph.lifecycle import ExtensionLifecycleHandler, SessionLifecycleHandler
from pants.engine.unions import UnionRule, union
from pants.option.options import Options
from pants.util.frozendict import FrozenDict
from pants.util.ordered_set import FrozenOrderedSet

Expand Down Expand Up @@ -64,3 +68,31 @@ class B:
self.bc_builder.register_rules([union_a])
self.bc_builder.register_rules([union_b])
assert self.bc_builder.create().union_rules == FrozenOrderedSet([union_a, union_b])

def test_register_lifecycle_handlers(self) -> None:
class FooHandler(ExtensionLifecycleHandler):
def on_session_create(
self,
*,
build_root: str,
options: Options,
specs: Specs,
) -> Optional[SessionLifecycleHandler]:
return None

class BarHandler(ExtensionLifecycleHandler):
def on_session_create(
self,
*,
build_root: str,
options: Options,
specs: Specs,
) -> Optional[SessionLifecycleHandler]:
return None

self.bc_builder.register_lifecycle_handlers([FooHandler()])
self.bc_builder.register_lifecycle_handlers([BarHandler()])
bc = self.bc_builder.create()
handlers = list(bc.lifecycle_handlers)
assert isinstance(handlers[0], FooHandler)
assert isinstance(handlers[1], BarHandler)
8 changes: 6 additions & 2 deletions src/python/pants/build_graph/lifecycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@
# Licensed under the Apache License, Version 2.0 (see LICENSE).
from typing import Optional

from pants.base.exiter import ExitCode
from pants.base.specs import Specs
from pants.option.options import Options


class SessionLifecycleHandler:
def on_session_start(self):
pass

def on_session_end(self):
def on_session_end(self, *, engine_result: ExitCode):
pass


class ExtensionLifecycleHandler:
# Returns a SessionLifecycleHandler that will receive lifecycle events for the session.
def on_session_create(self, options: Options) -> Optional[SessionLifecycleHandler]:
def on_session_create(
self, *, build_root: str, options: Options, specs: Specs
) -> Optional[SessionLifecycleHandler]:
pass
25 changes: 0 additions & 25 deletions src/python/pants/core/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
These are always activated and cannot be disabled.
"""
from typing import Optional

from pants.build_graph.lifecycle import ExtensionLifecycleHandler, SessionLifecycleHandler
from pants.core.goals import binary, fmt, lint, package, repl, run, test, typecheck
from pants.core.target_types import ArchiveTarget, Files, GenericTarget, RelocatedFiles, Resources
from pants.core.target_types import rules as target_type_rules
Expand All @@ -22,7 +20,6 @@
stripped_source_files,
subprocess_environment,
)
from pants.option.options import Options
from pants.source import source_root


Expand Down Expand Up @@ -54,25 +51,3 @@ def rules():

def target_types():
return [ArchiveTarget, Files, GenericTarget, Resources, RelocatedFiles]


import logging
logger = logging.getLogger(__name__)


class CoreSessionLifecycleHandler(SessionLifecycleHandler):
def on_session_start(self):
logger.info("on_session_start")

def on_session_end(self):
logger.info("on_session_end")


class CoreLifecycleHandler(ExtensionLifecycleHandler):
def on_session_create(self, options: Options) -> Optional[SessionLifecycleHandler]:
logger.info("on_session_create")
return CoreSessionLifecycleHandler()


def lifecycle_handlers():
return [CoreLifecycleHandler()]

0 comments on commit 9c3d29c

Please sign in to comment.