예제 #1
0
async def find_build_file(address: Address) -> BuildFileAddress:
    address_family = await Get(AddressFamily, Dir(address.spec_path))
    owning_address = address.maybe_convert_to_base_target()
    if address_family.get_target_adaptor(owning_address) is None:
        raise _did_you_mean_exception(address_family=address_family,
                                      name=owning_address.target_name)
    bfa = next(build_file_address
               for build_file_address in address_family.build_file_addresses
               if build_file_address.address == owning_address)
    return (bfa if address.is_base_target else BuildFileAddress(
        rel_path=bfa.rel_path, address=address))
예제 #2
0
파일: graph.py 프로젝트: Spacerat/pants
 def __init__(self, address: Address, *, unused_ignores: Iterable[Address],
              result: Iterable[Address]) -> None:
     # If the address was generated, we convert back to the original base target to correspond to
     # what users actually put in BUILD files.
     address = address.maybe_convert_to_base_target()
     sorted_unused_ignores = sorted([f"!{addr}" for addr in unused_ignores])
     formatted_unused_ignores = (repr(sorted_unused_ignores[0])
                                 if len(sorted_unused_ignores) == 1 else
                                 str(sorted_unused_ignores))
     bulleted_list_sep = "\n  * "
     possible_deps = sorted(addr.spec for addr in result)
     super().__init__(
         f"The target {address} includes {formatted_unused_ignores} in its `dependencies` field, "
         f"but {'it does' if len(sorted_unused_ignores) == 1 else 'they do'} not match any of "
         f"the resolved dependencies. Instead, please choose from the dependencies that are "
         f"being used:\n\n{bulleted_list_sep}{bulleted_list_sep.join(possible_deps)}"
     )
예제 #3
0
async def find_build_file(address: Address) -> BuildFileAddress:
    address_family = await Get(AddressFamily, AddressFamilyDir(address.spec_path))
    owning_address = address.maybe_convert_to_base_target()
    if address_family.get_target_adaptor(owning_address) is None:
        raise ResolveError.did_you_mean(
            bad_name=owning_address.target_name,
            known_names=address_family.target_names,
            namespace=address_family.namespace,
        )
    bfa = next(
        build_file_address
        for build_file_address in address_family.build_file_addresses
        if build_file_address.address == owning_address
    )
    return (
        bfa if address.is_base_target else BuildFileAddress(rel_path=bfa.rel_path, address=address)
    )
예제 #4
0
async def resolve_target(
    address: Address,
    registered_target_types: RegisteredTargetTypes,
    union_membership: UnionMembership,
) -> WrappedTarget:
    if not address.is_base_target:
        base_target = await Get(WrappedTarget, Address, address.maybe_convert_to_base_target())
        subtarget = generate_subtarget(
            base_target.target, full_file_name=address.filename, union_membership=union_membership
        )
        return WrappedTarget(subtarget)

    target_adaptor = await Get(TargetAdaptor, Address, address)
    target_type = registered_target_types.aliases_to_types.get(target_adaptor.type_alias, None)
    if target_type is None:
        raise UnrecognizedTargetTypeException(
            target_adaptor.type_alias, registered_target_types, address=address
        )
    target = target_type(target_adaptor.kwargs, address=address, union_membership=union_membership)
    return WrappedTarget(target)