1515"""A simple function that evaluates markers using a python interpreter."""
1616
1717load (":deps.bzl" , "record_files" )
18- load (":pypi_repo_utils.bzl" , "pypi_repo_utils" )
18+ load (":pep508_env.bzl" , "env" , _platform_from_str = "platform_from_str" )
19+ load (":pep508_evaluate.bzl" , "evaluate" )
20+ load (":pep508_req.bzl" , _req = "requirement" )
1921
2022# Used as a default value in a rule to ensure we fetch the dependencies.
2123SRCS = [
@@ -26,53 +28,20 @@ SRCS = [
2628 Label ("//python/private/pypi/whl_installer:platform.py" ),
2729]
2830
29- def evaluate_markers (mrctx , * , requirements , python_interpreter , python_interpreter_target , srcs , logger = None ):
31+ def evaluate_markers (requirements ):
3032 """Return the list of supported platforms per requirements line.
3133
3234 Args:
33- mrctx: repository_ctx or module_ctx.
34- requirements: list[str] of the requirement file lines to evaluate.
35- python_interpreter: str, path to the python_interpreter to use to
36- evaluate the env markers in the given requirements files. It will
37- be only called if the requirements files have env markers. This
38- should be something that is in your PATH or an absolute path.
39- python_interpreter_target: Label, same as python_interpreter, but in a
40- label format.
41- srcs: list[Label], the value of SRCS passed from the `rctx` or `mctx` to this function.
42- logger: repo_utils.logger or None, a simple struct to log diagnostic
43- messages. Defaults to None.
35+ requirements: dict[str, list[str]] of the requirement file lines to evaluate.
4436
4537 Returns:
4638 dict of string lists with target platforms
4739 """
48- if not requirements :
49- return {}
50-
51- in_file = mrctx .path ("requirements_with_markers.in.json" )
52- out_file = mrctx .path ("requirements_with_markers.out.json" )
53- mrctx .file (in_file , json .encode (requirements ))
54-
55- pypi_repo_utils .execute_checked (
56- mrctx ,
57- op = "ResolveRequirementEnvMarkers({})" .format (in_file ),
58- arguments = [
59- pypi_repo_utils .resolve_python_interpreter (
60- mrctx ,
61- python_interpreter = python_interpreter ,
62- python_interpreter_target = python_interpreter_target ,
63- ),
64- "-m" ,
65- "python.private.pypi.requirements_parser.resolve_target_platforms" ,
66- in_file ,
67- out_file ,
68- ],
69- srcs = srcs ,
70- environment = {
71- "PYTHONPATH" : [
72- Label ("@pypi__packaging//:BUILD.bazel" ),
73- Label ("//:BUILD.bazel" ),
74- ],
75- },
76- logger = logger ,
77- )
78- return json .decode (mrctx .read (out_file ))
40+ ret = {}
41+ for req_string , platforms in requirements .items ():
42+ req = _req (req_string )
43+ for platform in platforms :
44+ if evaluate (req .marker , env = env (_platform_from_str (platform , None ))):
45+ ret .setdefault (req_string , []).append (platform )
46+
47+ return ret
0 commit comments