tasktree 0.0.16__py3-none-any.whl → 0.0.18__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tasktree/parser.py +46 -3
- {tasktree-0.0.16.dist-info → tasktree-0.0.18.dist-info}/METADATA +1 -1
- {tasktree-0.0.16.dist-info → tasktree-0.0.18.dist-info}/RECORD +5 -5
- {tasktree-0.0.16.dist-info → tasktree-0.0.18.dist-info}/WHEEL +0 -0
- {tasktree-0.0.16.dist-info → tasktree-0.0.18.dist-info}/entry_points.txt +0 -0
tasktree/parser.py
CHANGED
|
@@ -232,14 +232,16 @@ class Recipe:
|
|
|
232
232
|
# (CLI will provide its own "Task not found" error)
|
|
233
233
|
try:
|
|
234
234
|
reachable_tasks = collect_reachable_tasks(self.tasks, root_task)
|
|
235
|
-
variables_to_eval = collect_reachable_variables(self.tasks, reachable_tasks)
|
|
235
|
+
variables_to_eval = collect_reachable_variables(self.tasks, self.environments, reachable_tasks)
|
|
236
236
|
except ValueError:
|
|
237
237
|
# Root task not found - fall back to eager evaluation
|
|
238
238
|
# This allows the recipe to be parsed even with invalid task names
|
|
239
239
|
# so the CLI can provide its own error message
|
|
240
|
+
reachable_tasks = self.tasks.keys()
|
|
240
241
|
variables_to_eval = set(self.raw_variables.keys())
|
|
241
242
|
else:
|
|
242
243
|
# Eager path: evaluate all variables (for --list command)
|
|
244
|
+
reachable_tasks = self.tasks.keys()
|
|
243
245
|
variables_to_eval = set(self.raw_variables.keys())
|
|
244
246
|
|
|
245
247
|
# Evaluate the selected variables using helper function
|
|
@@ -256,7 +258,10 @@ class Recipe:
|
|
|
256
258
|
# Substitute evaluated variables into all tasks
|
|
257
259
|
from tasktree.substitution import substitute_variables
|
|
258
260
|
|
|
259
|
-
for task in self.tasks.
|
|
261
|
+
for task_name, task in self.tasks.items():
|
|
262
|
+
if task_name not in reachable_tasks:
|
|
263
|
+
continue
|
|
264
|
+
|
|
260
265
|
task.cmd = substitute_variables(task.cmd, self.evaluated_variables)
|
|
261
266
|
task.desc = substitute_variables(task.desc, self.evaluated_variables)
|
|
262
267
|
task.working_dir = substitute_variables(task.working_dir, self.evaluated_variables)
|
|
@@ -1311,15 +1316,17 @@ def collect_reachable_tasks(tasks: dict[str, Task], root_task: str) -> set[str]:
|
|
|
1311
1316
|
|
|
1312
1317
|
def collect_reachable_variables(
|
|
1313
1318
|
tasks: dict[str, Task],
|
|
1319
|
+
environments: dict[str, Environment],
|
|
1314
1320
|
reachable_task_names: set[str]
|
|
1315
1321
|
) -> set[str]:
|
|
1316
1322
|
"""Extract variable names used by reachable tasks.
|
|
1317
1323
|
|
|
1318
|
-
Searches for {{ var.* }} placeholders in task definitions to determine
|
|
1324
|
+
Searches for {{ var.* }} placeholders in task and environment definitions to determine
|
|
1319
1325
|
which variables are actually needed for execution.
|
|
1320
1326
|
|
|
1321
1327
|
Args:
|
|
1322
1328
|
tasks: Dictionary mapping task names to Task objects
|
|
1329
|
+
environments: Dictionary mapping environment names to Environment objects
|
|
1323
1330
|
reachable_task_names: Set of task names that will be executed
|
|
1324
1331
|
|
|
1325
1332
|
Returns:
|
|
@@ -1398,6 +1405,42 @@ def collect_reachable_variables(
|
|
|
1398
1405
|
for match in var_pattern.finditer(val):
|
|
1399
1406
|
variables.add(match.group(1))
|
|
1400
1407
|
|
|
1408
|
+
if task.env:
|
|
1409
|
+
if task.env in environments:
|
|
1410
|
+
env = environments[task.env]
|
|
1411
|
+
|
|
1412
|
+
if env.dockerfile and env.dockerfile != "":
|
|
1413
|
+
for match in var_pattern.finditer(env.dockerfile):
|
|
1414
|
+
variables.add(match.group(1))
|
|
1415
|
+
|
|
1416
|
+
if env.context != "":
|
|
1417
|
+
for match in var_pattern.finditer(env.context):
|
|
1418
|
+
variables.add(match.group(1))
|
|
1419
|
+
|
|
1420
|
+
if 0 != len(env.volumes):
|
|
1421
|
+
for v in env.volumes:
|
|
1422
|
+
for match in var_pattern.finditer(v):
|
|
1423
|
+
variables.add(match.group(1))
|
|
1424
|
+
|
|
1425
|
+
if 0 != len(env.ports):
|
|
1426
|
+
for p in env.ports:
|
|
1427
|
+
for match in var_pattern.finditer(p):
|
|
1428
|
+
variables.add(match.group(1))
|
|
1429
|
+
|
|
1430
|
+
if 0 != len(env.env_vars):
|
|
1431
|
+
for k, v in env.env_vars.items():
|
|
1432
|
+
for match in var_pattern.finditer(v):
|
|
1433
|
+
variables.add(match.group(1))
|
|
1434
|
+
|
|
1435
|
+
if env.working_dir != "":
|
|
1436
|
+
for match in var_pattern.finditer(env.working_dir):
|
|
1437
|
+
variables.add(match.group(1))
|
|
1438
|
+
|
|
1439
|
+
if 0 != len(env.extra_args):
|
|
1440
|
+
for e in env.extra_args:
|
|
1441
|
+
for match in var_pattern.finditer(e):
|
|
1442
|
+
variables.add(match.group(1))
|
|
1443
|
+
|
|
1401
1444
|
return variables
|
|
1402
1445
|
|
|
1403
1446
|
|
|
@@ -4,11 +4,11 @@ tasktree/docker.py,sha256=qvja8G63uAcC73YMVY739egda1_CcBtoqzm0qIJU_Q8,14443
|
|
|
4
4
|
tasktree/executor.py,sha256=QQcABThmof0MLTtwpJKpyqh80hr3YRIqqs3NZ-Ry-Bk,44873
|
|
5
5
|
tasktree/graph.py,sha256=yITp71RfhJ7sdC-2zRf89SHYZqQyF3XVAnaqX-XnMdE,15821
|
|
6
6
|
tasktree/hasher.py,sha256=0GrnCfwAXnwq_kpnHFFb12B5_2VFNXx6Ng7hTdcCyXo,4415
|
|
7
|
-
tasktree/parser.py,sha256=
|
|
7
|
+
tasktree/parser.py,sha256=o2AQuk9xeM9JCtyMzDeM0uJBsbJEhzPDxsPg9GwmJt4,88940
|
|
8
8
|
tasktree/state.py,sha256=Cktl4D8iDZVd55aO2LqVyPrc-BnljkesxxkcMcdcfOY,3541
|
|
9
9
|
tasktree/substitution.py,sha256=qG7SyEHn1PAKteWA0AgA1dUNbJfwQTupCLRq9FvOBD0,10724
|
|
10
10
|
tasktree/types.py,sha256=R_YAyO5bMLB6XZnkMRT7VAtlkA_Xx6xu0aIpzQjrBXs,4357
|
|
11
|
-
tasktree-0.0.
|
|
12
|
-
tasktree-0.0.
|
|
13
|
-
tasktree-0.0.
|
|
14
|
-
tasktree-0.0.
|
|
11
|
+
tasktree-0.0.18.dist-info/METADATA,sha256=u70mwnKCeb3sQkn5_B4cf0AOc8mI-FhvdTUbW0hoB3A,37234
|
|
12
|
+
tasktree-0.0.18.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
13
|
+
tasktree-0.0.18.dist-info/entry_points.txt,sha256=lQINlvRYnimvteBbnhH84A9clTg8NnpEjCWqWkqg8KE,40
|
|
14
|
+
tasktree-0.0.18.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|