Skip to content

Commit

Permalink
python: Basic Starlark implementation of PyInfo
Browse files Browse the repository at this point in the history
Not yet tested or exercised; to be done in a followup change.

Work towards #15897

PiperOrigin-RevId: 507902946
Change-Id: I0b203892d28e6b00f4ee6567e26abda84e6f71bc
  • Loading branch information
rickeylev authored and hvadehra committed Feb 14, 2023
1 parent 73bb1d7 commit 3b53dae
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions src/main/starlark/builtins_bzl/common/python/providers.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,60 @@ the same conventions as the standard CPython interpreter.

PyRuntimeInfo = _builtins.toplevel.PyRuntimeInfo

def _check_arg_type(name, required_type, value):
value_type = type(value)
if value_type != required_type:
fail("parameter '{}' got value of type '{}', want '{}'".format(
name,
value_type,
required_type,
))

def _PyInfo_init(
*,
transitive_sources,
uses_shared_libraries = False,
imports = depset(),
has_py2_only_sources = False,
has_py3_only_sources = False):
_check_arg_type("transitive_sources", "depset", transitive_sources)
_check_arg_type("uses_shared_libraries", "bool", uses_shared_libraries)
_check_arg_type("imports", "depset", imports)
_check_arg_type("has_py2_only_sources", "bool", has_py2_only_sources)
_check_arg_type("has_py2_only_sources", "bool", has_py3_only_sources)
return {
"transitive_sources": transitive_sources,
"imports": imports,
"uses_shared_libraries": uses_shared_libraries,
"has_py2_only_sources": has_py2_only_sources,
"has_py3_only_sources": has_py2_only_sources,
}

StarlarkPyInfo, _unused_raw_ctor = provider(
"Encapsulates information provided by the Python rules.",
init = _PyInfo_init,
fields = {
"transitive_sources": """\
A (`postorder`-compatible) depset of `.py` files appearing in the target's
`srcs` and the `srcs` of the target's transitive `deps`.
""",
"uses_shared_libraries": """
Whether any of this target's transitive `deps` has a shared library file (such
as a `.so` file).
This field is currently unused in Bazel and may go away in the future.
""",
"imports": """\
A depset of import path strings to be added to the `PYTHONPATH` of executable
Python targets. These are accumulated from the transitive `deps`.
The order of the depset is not guaranteed and may be changed in the future. It
is recommended to use `default` order (the default).
""",
"has_py2_only_sources": "Whether any of this target's transitive sources requires a Python 2 runtime.",
"has_py3_only_sources": "Whether any of this target's transitive sources requires a Python 3 runtime.",
},
)

PyInfo = _builtins.toplevel.PyInfo

# TODO(b/203567235): Re-implement in Starlark
Expand Down

0 comments on commit 3b53dae

Please sign in to comment.