cloud-custodian / cloud-custodian/cel-python
Implement string.contains() per CEL spec section 6.2.5
- Lingua principale
- Python
- Stelle
- 174
- Fork
- 40
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
## Summary
The CEL specification (section 6.2.5) defines `string.contains(string) -> bool` as a standard string function. Currently, calling `.contains()` on a `StringType` raises `CELEvalError: no such overload` in cel-python.
## Steps to reproduce
```python
import celpy
env = celpy.Environment()
ast = env.compile('"hello world".contains("world")')
prog = env.program(ast)
result = prog.evaluate({})
print(result) # Expected: true
```
## Actual behaviour
```
celpy.celenv.CELEvalError: no such overload
```
## Expected behaviour
`contains()` should return `true` when the substring is present and `false` otherwise, matching the Go and Java CEL implementations.
## Proposed fix
Add a `contains` method to `StringType` in `src/celpy/celtypes.py`:
```python
def contains(self, other: 'StringType') -> BoolType:
return BoolType(str(other) in str(self))
```
And register the overload in the function dispatch table so that `"x".contains("y")` is correctly dispatched.
## Related
- Issue #128 (user question about `.contains()` not working)
- CEL spec reference: https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.