Skip to content

Commit

Permalink
finish updating stevedore_extensions pants plugin for new API in pant…
Browse files Browse the repository at this point in the history
…s 2.14
  • Loading branch information
cognifloyd committed Jan 18, 2023
1 parent 798c712 commit b0d27d8
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 46 deletions.
29 changes: 13 additions & 16 deletions pants-plugins/stevedore_extensions/python_dependency_injection.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@
from pants.engine.addresses import Address
from pants.engine.rules import collect_rules, Get, rule, UnionRule
from pants.engine.target import (
FieldSet,
InferDependenciesRequest,
InferredDependencies,
Targets,
WrappedTarget,
WrappedTargetRequest,
)
from pants.util.frozendict import FrozenDict
from pants.util.logging import LogLevel
Expand Down Expand Up @@ -66,30 +65,28 @@ async def map_stevedore_extensions(
)


@dataclass(frozen=True)
class PythonTestsStevedoreNamespaceInferenceFieldSet(FieldSet):
required_fields = (PythonTestsDependenciesField, StevedoreNamespacesField)

stevedore_namespaces: StevedoreNamespacesField


class InferStevedoreNamespaceDependencies(InferDependenciesRequest):
inject_for = PythonTestsDependenciesField
infer_from = PythonTestsStevedoreNamespaceInferenceFieldSet


@rule(
desc="Infer stevedore_extension target dependencies for python_tests based on namespace list.",
level=LogLevel.DEBUG,
)
async def inject_stevedore_namespace_dependencies(
async def infer_stevedore_namespace_dependencies(
request: InferStevedoreNamespaceDependencies,
stevedore_extensions: StevedoreExtensions,
) -> InferredDependencies:
original_tgt: WrappedTarget
original_tgt = await Get(
WrappedTarget,
WrappedTargetRequest(
request.dependencies_field.address,
description_of_origin="inject_stevedore_namespace_dependencies",
),
)
if original_tgt.target.get(StevedoreNamespacesField).value is None:
return InferredDependencies()

namespaces: StevedoreNamespacesField = original_tgt.target[StevedoreNamespacesField]
namespaces: StevedoreNamespacesField = request.field_set.stevedore_namespaces
if namespaces.value is None:
return InferredDependencies(())

addresses = []
for namespace in namespaces.value:
Expand Down
8 changes: 0 additions & 8 deletions pants-plugins/stevedore_extensions/target_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
from pants.engine.target import (
AsyncFieldMixin,
COMMON_TARGET_FIELDS,
Dependencies,
DictStringToStringField,
InvalidFieldException,
SecondaryOwnerMixin,
Expand Down Expand Up @@ -114,19 +113,12 @@ class ResolveStevedoreEntryPointsRequest:
entry_points_field: StevedoreEntryPointsField


# See `target_types_rules.py` for a dependency injection rule.
class StevedoreDependenciesField(Dependencies):
# dummy field for dependency injection to work
alias = "_stevedore_dependencies"


class StevedoreExtension(Target):
alias = "stevedore_extension"
core_fields = (
*COMMON_TARGET_FIELDS,
StevedoreNamespaceField,
StevedoreEntryPointsField,
StevedoreDependenciesField,
PythonResolveField,
)
help = "Entry points used to generate setuptools metadata for stevedore."
Expand Down
41 changes: 19 additions & 22 deletions pants-plugins/stevedore_extensions/target_types_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
# repurposed from pants.backend.python.target_types_rules
import dataclasses
import os
from dataclasses import dataclass

from pants.backend.python.dependency_inference.module_mapper import (
PythonModuleOwners,
Expand All @@ -29,11 +30,10 @@
Dependencies,
DependenciesRequest,
ExplicitlyProvidedDependencies,
FieldSet,
InferDependenciesRequest,
InferredDependencies,
InvalidFieldException,
WrappedTarget,
WrappedTargetRequest,
)
from pants.source.source_root import SourceRoot, SourceRootRequest
from pants.util.logging import LogLevel
Expand All @@ -42,7 +42,6 @@
AllStevedoreExtensionTargets,
ResolvedStevedoreEntryPoints,
ResolveStevedoreEntryPointsRequest,
StevedoreDependenciesField,
StevedoreEntryPoints,
StevedoreEntryPointsField,
)
Expand All @@ -53,7 +52,7 @@ def find_all_stevedore_extension_targets(
targets: AllTargets,
) -> AllStevedoreExtensionTargets:
return AllStevedoreExtensionTargets(
tgt for tgt in targets if tgt.has_field(StevedoreDependenciesField)
tgt for tgt in targets if tgt.has_field(StevedoreEntryPointsField)
)


Expand Down Expand Up @@ -143,54 +142,52 @@ async def resolve_stevedore_entry_points(
return ResolvedStevedoreEntryPoints(StevedoreEntryPoints(resolved))


@dataclass(frozen=True)
class StevedoreEntryPointsInferenceFieldSet(FieldSet):
required_fields = (StevedoreEntryPointsField, Dependencies, PythonResolveField)

entry_points: StevedoreEntryPointsField
dependencies: Dependencies
resolve: PythonResolveField


class InferStevedoreExtensionDependencies(InferDependenciesRequest):
inject_for = StevedoreDependenciesField
infer_from = StevedoreEntryPointsInferenceFieldSet


@rule(
desc="Inferring dependency from the stevedore_extension `entry_points` field",
level=LogLevel.DEBUG,
)
async def inject_stevedore_entry_points_dependencies(
async def infer_stevedore_entry_points_dependencies(
request: InferStevedoreExtensionDependencies,
python_setup: PythonSetup,
) -> InferredDependencies:
original_tgt: WrappedTarget = await Get(
WrappedTarget,
WrappedTargetRequest(
request.dependencies_field.address,
description_of_origin="inject_stevedore_entry_points_dependencies",
),
)
entry_points: ResolvedStevedoreEntryPoints
explicitly_provided_deps, entry_points = await MultiGet(
Get(
ExplicitlyProvidedDependencies,
DependenciesRequest(original_tgt.target[Dependencies]),
DependenciesRequest(request.field_set.dependencies),
),
Get(
ResolvedStevedoreEntryPoints,
ResolveStevedoreEntryPointsRequest(
original_tgt.target[StevedoreEntryPointsField]
),
ResolveStevedoreEntryPointsRequest(request.field_set.entry_points),
),
)
if entry_points.val is None:
return InferredDependencies()
address = original_tgt.target.address
address = request.field_set.address
owners_per_entry_point = await MultiGet(
Get(
PythonModuleOwners,
PythonModuleOwnersRequest(
entry_point.value.module,
resolve=original_tgt.target[PythonResolveField].normalized_value(
python_setup
),
resolve=request.field_set.resolve.normalized_value(python_setup),
),
)
for entry_point in entry_points.val
)
original_entry_points = original_tgt.target[StevedoreEntryPointsField].value
original_entry_points = request.field_set.entry_points.value
resolved_owners = []
for entry_point, owners, original_ep in zip(
entry_points.val, owners_per_entry_point, original_entry_points
Expand Down

0 comments on commit b0d27d8

Please sign in to comment.