cloud-custodian / cloud-custodian/cel-python
Three-argument filtered map macro raises ValueError during evaluation
- Lenguaje dominante
- Python
- Estrellas
- 174
- Forks
- 40
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
## 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)
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Activo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 68/100