cloud-custodian / cloud-custodian/cel-python
Three-argument filtered map macro raises ValueError during evaluation
- Langage dominant
- Python
- Étoiles
- 174
- Forks
- 40
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
## 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)
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par exécuter la repro.py fournie sur l’évaluateur de macros de map et suivez le chemin map filtré à trois arguments décrit dans l’issue. Ajoutez une couverture pour les deux expressions, puis confirmez que la forme filtrée renvoie 3 au lieu de lever ValueError, tandis que la forme existante filter(...).map(...) continue de réussir.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 68/100