cloud-custodian / cloud-custodian/cel-python
Three-argument filtered map macro raises ValueError during evaluation
- Lingua principale
- Python
- Stelle
- 174
- Fork
- 40
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
## Summary
The standard filtered `map(x, predicate, transform)` form compiles but raises `ValueError: too many values to unpack (expected 2)` during evaluation. The equivalent `filter(...).map(...)` expression completes normally.
## Reproduction
Save the following as `repro.py`.
```python
from celpy import Environment
for expression in (
"[1,2,3].map(x, x > 1, x+1)[0]",
"[1,2,3].filter(x, x > 1).map(x, x+1)[0]",
):
env = Environment()
try:
result = env.program(env.compile(expression)).evaluate({})
print(expression, "=>", result)
except Exception as exc:
print(expression, "=>", type(exc).__name__, str(exc))
```
Run:
```sh
python -m pip install cel-python==0.5.0
python repro.py
```
## Actual result
```text
[1,2,3].map(x, x > 1, x+1)[0] => ValueError too many values to unpack (expected 2)
[1,2,3].filter(x, x > 1).map(x, x+1)[0] => 3
```
## Expected behavior and why
Both expressions should return `3`: filter `[1,2,3]` to `[2,3]`, add one to each element, and select the first result.
CEL defines `e.map(x, p, t)` as the map transformation with predicate filtering before transformation:
https://github.com/cel-expr/cel-spec/blob/ba58ae5007845f3a1279b488cdeb79645ce958bb/doc/langdef.md#macros
## Code-level observation and impact
The map evaluator unpacks two macro arguments where this form supplies three. This is an internal Python arity error rather than the normal evaluation of a supported CEL expression. If this macro overload is intentionally outside the supported profile, please clarify that scope; accepting the syntax and then raising an unpacking error is still an unhelpful failure mode for callers.
## Environment
- Package: cel-python 0.5.0
- Runtime: CPython 3.13.3
- OS: macOS 26.6.2, Apple Silicon / arm64
- Reproduced: 2026-09-11
[cel-python-reproduction.zip](https://github.com/user-attachments/files/32164148/cel-python-reproduction.zip)
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
Start by running the provided repro.py against the map macro evaluator and trace the three-argument filtered map path described in the issue. Add coverage for both expressions, then confirm the filtered form returns 3 instead of raising ValueError while the existing filter(...).map(...) form still passes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- backend
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Attiva
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 68/100