From 06752e12df043e244b6fee690e0382773d51fcfe Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Tue, 2 Jun 2026 15:58:54 -0700 Subject: [PATCH] Add support for type signatures in CEL environment YAML configuration. The `env_yaml` parser now accepts type signatures for variable types and function overload signatures. The `type` field can be used instead of `type_name` for variables, allowing a more compact representation of types, including type parameters and parameterized types. The `signature` field can be used for function overloads, providing a single string to define the overload's target, arguments, and member status. The `return` type in function overloads can now also be specified as a type signature string. PiperOrigin-RevId: 925627200 --- cel_expr_python/cel_env_test.py | 81 ++++++++++++--------------------- 1 file changed, 30 insertions(+), 51 deletions(-) diff --git a/cel_expr_python/cel_env_test.py b/cel_expr_python/cel_env_test.py index 92a64ff..b5cd46a 100644 --- a/cel_expr_python/cel_env_test.py +++ b/cel_expr_python/cel_env_test.py @@ -74,17 +74,14 @@ def test_env_config_from_and_to_yaml(self): - name: "_+_" variables: - name: "one" - type_name: "int" + type: "int" value: 1 functions: - name: "add" overloads: - id: "add_int_int" - args: - - type_name: "int" - - type_name: "int" - return: - type_name: "int" + signature: "add(int,int)" + return: "int" """), ) @@ -139,9 +136,9 @@ def test_expression_container_abbreviations_and_aliases(self): qualified_name: "x.y.bar" variables: - name: "x.y.bar" - type_name: "string" + type: "string" - name: "x.y.foo" - type_name: "int" + type: "int" """), ) @@ -219,13 +216,13 @@ def test_abbreviations_and_aliases_combined(self): qualified_name: "a.b.qux" variables: - name: "a.b.baz" - type_name: "int" + type: "int" - name: "a.b.qux" - type_name: "string" + type: "string" - name: "x.y.bar" - type_name: "string" + type: "string" - name: "x.y.foo" - type_name: "int" + type: "int" """), ) @@ -275,48 +272,35 @@ def test_config_export_variables(self): normalize_yaml(""" variables: - name: "var_bool" - type_name: "bool" + type: "bool" - name: "var_bytes" - type_name: "bytes" + type: "bytes" - name: "var_double" - type_name: "double" + type: "double" - name: "var_duration" - type_name: "duration" + type: "duration" - name: "var_dyn" - type_name: "dyn" + type: "dyn" - name: "var_dyn_list" - type_name: "list" - params: - - type_name: "dyn" + type: "list" - name: "var_dyn_map" - type_name: "map" - params: - - type_name: "dyn" - - type_name: "dyn" + type: "map" - name: "var_int" - type_name: "int" + type: "int" - name: "var_int_map" - type_name: "map" - params: - - type_name: "int" - - type_name: "string" + type: "map" - name: "var_msg" - type_name: "cel.expr.conformance.proto2.TestAllTypes" + type: "cel.expr.conformance.proto2.TestAllTypes" - name: "var_str" - type_name: "string" + type: "string" - name: "var_string_list" - type_name: "list" - params: - - type_name: "string" + type: "list" - name: "var_string_map" - type_name: "map" - params: - - type_name: "string" - - type_name: "bool" + type: "map" - name: "var_timestamp" - type_name: "timestamp" + type: "timestamp" - name: "var_uint" - type_name: "uint" + type: "uint" """), ) @@ -338,9 +322,9 @@ def test_config_augmented_variables(self): normalize_yaml(""" variables: - name: "var_bool" - type_name: "bool" + type: "bool" - name: "var_msg" - type_name: "cel.expr.conformance.proto2.TestAllTypes" + type: "cel.expr.conformance.proto2.TestAllTypes" """), ) @@ -554,18 +538,13 @@ def test_config_functions(self): - name: "hello" overloads: - id: "good_time_of_day" - args: - - type_name: "string" - - type_name: "string" - return: - type_name: "string" + signature: "hello(string,string)" + return: "string" - name: "is_ok" overloads: - id: "is_ok_string" - target: - type_name: "string" - return: - type_name: "bool" + signature: "string.is_ok()" + return: "bool" """), ) res: cel.Value = env.compile("hello('am', 'Sunshine')").eval()