11"""Common transition implementation used by the various terminals."""
22
33DEP_GROUP_FLAG = "@aspect_rules_py//uv/private/constraints/dep_group:dep_group"
4+ _DEP_GROUP_BASELINE_FLAG = "@aspect_rules_py//uv/private/constraints/dep_group:baseline"
45
56# Our own python_version flag, replacing the rules_python one.
67PYTHON_VERSION_FLAG = "@aspect_rules_py//py/private/interpreter:python_version"
8+ _PYTHON_VERSION_BASELINE_FLAG = "@aspect_rules_py//py/private/interpreter:baseline_python_version"
79
810# rules_python's flag, kept for backward compatibility during migration.
911_RPY_VERSION_FLAG = "@rules_python//python/config_settings:python_version"
12+ _RPY_VERSION_BASELINE_FLAG = "@aspect_rules_py//py/private/interpreter:baseline_rules_python_version"
1013
11- # Interpreter feature flags that must be propagated through transitions.
12- _FREETHREADED_FLAG = "@aspect_rules_py//py/private/interpreter:freethreaded"
14+ _BASELINE_UNSET = "<unset>"
15+
16+ def _baseline (settings , flag , current ):
17+ baseline = settings [flag ]
18+ if baseline == _BASELINE_UNSET :
19+ return current
20+ return baseline
21+
22+ def _python_version (settings ):
23+ return settings [PYTHON_VERSION_FLAG ] or settings [_RPY_VERSION_FLAG ]
1324
1425def _python_transition_impl (settings , attr ):
1526 acc = {}
27+ acc [_PYTHON_VERSION_BASELINE_FLAG ] = _baseline (
28+ settings ,
29+ _PYTHON_VERSION_BASELINE_FLAG ,
30+ settings [PYTHON_VERSION_FLAG ],
31+ )
32+ acc [_RPY_VERSION_BASELINE_FLAG ] = _baseline (
33+ settings ,
34+ _RPY_VERSION_BASELINE_FLAG ,
35+ settings [_RPY_VERSION_FLAG ],
36+ )
1637 if attr .python_version :
1738 version = str (attr .python_version )
1839 else :
19- version = settings [ PYTHON_VERSION_FLAG ] or settings [ _RPY_VERSION_FLAG ]
40+ version = _python_version ( settings )
2041
2142 acc [PYTHON_VERSION_FLAG ] = version
2243 acc [_RPY_VERSION_FLAG ] = version
@@ -28,11 +49,14 @@ def _python_transition_impl(settings, attr):
2849 dep_group = getattr (attr , "dep_group" , None )
2950 if dep_group :
3051 acc [DEP_GROUP_FLAG ] = str (dep_group )
52+ acc [_DEP_GROUP_BASELINE_FLAG ] = _baseline (
53+ settings ,
54+ _DEP_GROUP_BASELINE_FLAG ,
55+ settings [DEP_GROUP_FLAG ],
56+ )
3157 else :
3258 acc [DEP_GROUP_FLAG ] = settings [DEP_GROUP_FLAG ]
33-
34- # Propagate interpreter feature flags
35- acc [_FREETHREADED_FLAG ] = settings [_FREETHREADED_FLAG ]
59+ acc [_DEP_GROUP_BASELINE_FLAG ] = settings [_DEP_GROUP_BASELINE_FLAG ]
3660
3761 return acc
3862
@@ -41,13 +65,63 @@ python_transition = transition(
4165 inputs = [
4266 PYTHON_VERSION_FLAG ,
4367 _RPY_VERSION_FLAG ,
68+ _PYTHON_VERSION_BASELINE_FLAG ,
69+ _RPY_VERSION_BASELINE_FLAG ,
70+ DEP_GROUP_FLAG ,
71+ _DEP_GROUP_BASELINE_FLAG ,
72+ ],
73+ outputs = [
74+ PYTHON_VERSION_FLAG ,
75+ _RPY_VERSION_FLAG ,
76+ _PYTHON_VERSION_BASELINE_FLAG ,
77+ _RPY_VERSION_BASELINE_FLAG ,
78+ DEP_GROUP_FLAG ,
79+ _DEP_GROUP_BASELINE_FLAG ,
80+ ],
81+ )
82+
83+ # Runtime data is outside the Python environment selected by terminal attrs.
84+ # Return every setting those attrs can override to its inherited value, then
85+ # clear the scratch state so data targets share the caller's canonical
86+ # configuration.
87+ def _reset_python_flags_transition_impl (settings , _attr ):
88+ return {
89+ PYTHON_VERSION_FLAG : _baseline (
90+ settings ,
91+ _PYTHON_VERSION_BASELINE_FLAG ,
92+ settings [PYTHON_VERSION_FLAG ],
93+ ),
94+ _RPY_VERSION_FLAG : _baseline (
95+ settings ,
96+ _RPY_VERSION_BASELINE_FLAG ,
97+ settings [_RPY_VERSION_FLAG ],
98+ ),
99+ _PYTHON_VERSION_BASELINE_FLAG : _BASELINE_UNSET ,
100+ _RPY_VERSION_BASELINE_FLAG : _BASELINE_UNSET ,
101+ DEP_GROUP_FLAG : _baseline (
102+ settings ,
103+ _DEP_GROUP_BASELINE_FLAG ,
104+ settings [DEP_GROUP_FLAG ],
105+ ),
106+ _DEP_GROUP_BASELINE_FLAG : _BASELINE_UNSET ,
107+ }
108+
109+ reset_python_flags_transition = transition (
110+ implementation = _reset_python_flags_transition_impl ,
111+ inputs = [
112+ PYTHON_VERSION_FLAG ,
113+ _RPY_VERSION_FLAG ,
114+ _PYTHON_VERSION_BASELINE_FLAG ,
115+ _RPY_VERSION_BASELINE_FLAG ,
44116 DEP_GROUP_FLAG ,
45- _FREETHREADED_FLAG ,
117+ _DEP_GROUP_BASELINE_FLAG ,
46118 ],
47119 outputs = [
48120 PYTHON_VERSION_FLAG ,
49121 _RPY_VERSION_FLAG ,
122+ _PYTHON_VERSION_BASELINE_FLAG ,
123+ _RPY_VERSION_BASELINE_FLAG ,
50124 DEP_GROUP_FLAG ,
51- _FREETHREADED_FLAG ,
125+ _DEP_GROUP_BASELINE_FLAG ,
52126 ],
53127)
0 commit comments