Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -252,15 +252,15 @@ This method adds extension function definitions to the provided
absl::Status ConfigureCompiler(
cel::CompilerBuilder& compiler_builder,
const proto2::DescriptorPool& descriptor_pool) {
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
auto func_translate,
cel::MakeFunctionDecl("translate",
cel::MakeMemberOverloadDecl("translate_inst",
/*return_type=*/cel::StringType(),
/*target=*/cel::StringType(),
/*from_lang=*/cel::StringType(),
/*to_lang=*/cel::StringType())));
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
compiler_builder.GetCheckerBuilder().AddFunction(func_translate));
return absl::OkStatus();
}
Expand Down Expand Up @@ -292,7 +292,7 @@ absl::Status ConfigureRuntime(cel::RuntimeBuilder& runtime_builder,
const StringValue&>;
auto status = TranslateFunctionAdapter::RegisterMemberOverload(
"translate", &Translate, runtime_builder.function_registry());
PY_CEL_RETURN_IF_ERROR(status);
CEL_PYTHON_RETURN_IF_ERROR(status);
return absl::OkStatus();
}
```
Expand Down Expand Up @@ -368,7 +368,7 @@ If the extension is written in C++, use the `RegisterLazyFunction` function:
using MyFunctionAdapter =
cel::UnaryFunctionAdapter<absl::StatusOr<cel::IntValue>,
const cel::IntValue&>;
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
runtime_builder.function_registry().RegisterLazyFunction(
MyFunctionAdapter::CreateDescriptor(
"my_func",
Expand Down
12 changes: 6 additions & 6 deletions custom_ext/sample_cel_ext.cc
Original file line number Diff line number Diff line change
Expand Up @@ -71,24 +71,24 @@ class SampleCelExtension : public cel_python::CelExtension {
absl::Status ConfigureCompiler(
cel::CompilerBuilder& compiler_builder,
const google::protobuf::DescriptorPool& descriptor_pool) override {
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
auto func_translate,
MakeFunctionDecl("translate",
MakeMemberOverloadDecl("translate_inst",
/*return_type=*/StringType(),
/*target=*/StringType(),
/*from_lang=*/StringType(),
/*to_lang=*/StringType())));
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
compiler_builder.GetCheckerBuilder().AddFunction(func_translate));

PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
auto func_translate_late,
MakeFunctionDecl("translate_late",
MakeOverloadDecl("late_bound_translation",
/*return_type=*/StringType(),
/*text=*/StringType())));
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
compiler_builder.GetCheckerBuilder().AddFunction(func_translate_late));
return absl::OkStatus();
}
Expand All @@ -101,13 +101,13 @@ class SampleCelExtension : public cel_python::CelExtension {
const StringValue&>;
auto status = TranslateFunctionAdapter::RegisterMemberOverload(
"translate", &Translate, runtime_builder.function_registry());
PY_CEL_RETURN_IF_ERROR(status);
CEL_PYTHON_RETURN_IF_ERROR(status);

// Register a lazy function that will be bound at evaluation time.
using TranslateLateFunctionAdapter =
::cel::UnaryFunctionAdapter<absl::StatusOr<StringValue>,
const StringValue&>;
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
runtime_builder.function_registry().RegisterLazyFunction(
TranslateLateFunctionAdapter::CreateDescriptor(
"translate_late",
Expand Down
2 changes: 1 addition & 1 deletion py_cel/ext/ext_math.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class ExtMath : public CelExtension {

absl::Status ConfigureRuntime(cel::RuntimeBuilder& runtime_builder,
const cel::RuntimeOptions& opts) override {
PY_CEL_RETURN_IF_ERROR(cel::extensions::RegisterMathExtensionFunctions(
CEL_PYTHON_RETURN_IF_ERROR(cel::extensions::RegisterMathExtensionFunctions(
runtime_builder.function_registry(), opts));
return absl::OkStatus();
}
Expand Down
30 changes: 15 additions & 15 deletions py_cel/py_cel_env_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,31 +70,31 @@ absl::StatusOr<const cel::Compiler*> PyCelEnvInternal::GetCompiler(

cel::CompilerOptions compiler_options;
compiler_options.parser_options.enable_quoted_identifiers = true;
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
std::unique_ptr<cel::CompilerBuilder> compiler_builder,
cel::NewCompilerBuilder(&env->descriptor_pool_, compiler_options));
compiler_builder->GetCheckerBuilder().set_container(env->container_);
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
compiler_builder->AddLibrary(cel::StandardCompilerLibrary()));
for (std::unique_ptr<CelExtensionHandle>& extension_handle :
env->extensions_) {
PY_CEL_ASSIGN_OR_RETURN(CelExtension * extension,
extension_handle->GetExtension(env));
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_ASSIGN_OR_RETURN(CelExtension * extension,
extension_handle->GetExtension(env));
CEL_PYTHON_RETURN_IF_ERROR(
extension->ConfigureCompiler(*compiler_builder, env->descriptor_pool_));
}
google::protobuf::Arena* arena = compiler_builder->GetCheckerBuilder().arena();
for (const auto& [name, type] : env->variable_types_) {
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
cel::Type cel_type,
PyCelType::ToCelType(type, arena, env->descriptor_pool_));
cel::VariableDecl var;
var.set_name(name);
var.set_type(cel_type);
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
compiler_builder->GetCheckerBuilder().AddVariable(var));
}
PY_CEL_ASSIGN_OR_RETURN(env->compiler_, compiler_builder->Build());
CEL_PYTHON_ASSIGN_OR_RETURN(env->compiler_, compiler_builder->Build());
return env->compiler_.get();
}

Expand All @@ -116,19 +116,19 @@ absl::StatusOr<const cel::Runtime*> PyCelEnvInternal::GetRuntime(
opts.fail_on_warnings = false;
break;
}
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
cel::RuntimeBuilder builder,
cel::CreateStandardRuntimeBuilder(&env->descriptor_pool_, opts));
PY_CEL_RETURN_IF_ERROR(cel::EnableReferenceResolver(
CEL_PYTHON_RETURN_IF_ERROR(cel::EnableReferenceResolver(
builder, cel::ReferenceResolverEnabled::kAlways));
for (std::unique_ptr<CelExtensionHandle>& extension_handle :
env->extensions_) {
PY_CEL_ASSIGN_OR_RETURN(CelExtension * extension,
extension_handle->GetExtension(env));
PY_CEL_RETURN_IF_ERROR(extension->ConfigureRuntime(builder, opts));
CEL_PYTHON_ASSIGN_OR_RETURN(CelExtension * extension,
extension_handle->GetExtension(env));
CEL_PYTHON_RETURN_IF_ERROR(extension->ConfigureRuntime(builder, opts));
}
PY_CEL_ASSIGN_OR_RETURN(std::unique_ptr<cel::Runtime> runtime,
std::move(builder).Build());
CEL_PYTHON_ASSIGN_OR_RETURN(std::unique_ptr<cel::Runtime> runtime,
std::move(builder).Build());
const cel::Runtime* runtime_ptr = runtime.get();
env->runtimes_[runtime_mode] = std::move(runtime);
return runtime_ptr;
Expand Down
28 changes: 14 additions & 14 deletions py_cel/py_cel_expression.cc
Original file line number Diff line number Diff line change
Expand Up @@ -107,25 +107,25 @@ absl::StatusOr<PyCelExpression> PyCelExpression::Compile(
bool disable_check) {
ABSL_CHECK(PyGILState_Check());

PY_CEL_ASSIGN_OR_RETURN(const cel::Compiler* compiler,
PyCelEnvInternal::GetCompiler(env));
CEL_PYTHON_ASSIGN_OR_RETURN(const cel::Compiler* compiler,
PyCelEnvInternal::GetCompiler(env));

if (disable_check) {
PY_CEL_ASSIGN_OR_RETURN(auto s, cel::NewSource(cel_expr, "<input>"));
CEL_PYTHON_ASSIGN_OR_RETURN(auto ast, compiler->GetParser().Parse(*s));
CEL_PYTHON_ASSIGN_OR_RETURN(auto s, cel::NewSource(cel_expr, "<input>"));
PY_CEL_PYTHON_ASSIGN_OR_RETURN(auto ast, compiler->GetParser().Parse(*s));
ParsedExpr parsed_expr;
PY_CEL_RETURN_IF_ERROR(cel::AstToParsedExpr(*ast, &parsed_expr));
CEL_PYTHON_RETURN_IF_ERROR(cel::AstToParsedExpr(*ast, &parsed_expr));
return PyCelExpression(parsed_expr, env);
}

CEL_PYTHON_ASSIGN_OR_RETURN(auto validation, compiler->Compile(cel_expr));
PY_CEL_PYTHON_ASSIGN_OR_RETURN(auto validation, compiler->Compile(cel_expr));
if (!validation.IsValid() || validation.GetAst() == nullptr) {
return absl::InvalidArgumentError(validation.FormatError());
}
PY_CEL_ASSIGN_OR_RETURN(std::unique_ptr<cel::Ast> ast,
validation.ReleaseAst());
CEL_PYTHON_ASSIGN_OR_RETURN(std::unique_ptr<cel::Ast> ast,
validation.ReleaseAst());
CheckedExpr checked_expr;
PY_CEL_RETURN_IF_ERROR(cel::AstToCheckedExpr(*ast, &checked_expr));
CEL_PYTHON_RETURN_IF_ERROR(cel::AstToCheckedExpr(*ast, &checked_expr));
return PyCelExpression(checked_expr, env);
}

Expand All @@ -151,18 +151,18 @@ absl::StatusOr<PyCelValue> PyCelExpression::Eval(
ABSL_CHECK(PyGILState_Check());
if (cel_program_ == nullptr) {
if (std::holds_alternative<ParsedExpr>(expr_)) {
CEL_PYTHON_ASSIGN_OR_RETURN(
PY_CEL_PYTHON_ASSIGN_OR_RETURN(
const cel::Runtime* runtime,
PyCelEnvInternal::GetRuntime(
env_, PyCelEnvInternal::kStandardIgnoreWarnings));
CEL_PYTHON_ASSIGN_OR_RETURN(
PY_CEL_PYTHON_ASSIGN_OR_RETURN(
cel_program_, cel::extensions::ProtobufRuntimeAdapter::CreateProgram(
*runtime, std::get<ParsedExpr>(expr_)));
} else {
CEL_PYTHON_ASSIGN_OR_RETURN(
PY_CEL_PYTHON_ASSIGN_OR_RETURN(
const cel::Runtime* runtime,
PyCelEnvInternal::GetRuntime(env_, PyCelEnvInternal::kStandard));
CEL_PYTHON_ASSIGN_OR_RETURN(
PY_CEL_PYTHON_ASSIGN_OR_RETURN(
cel_program_, cel::extensions::ProtobufRuntimeAdapter::CreateProgram(
*runtime, std::get<CheckedExpr>(expr_)));
}
Expand All @@ -173,7 +173,7 @@ absl::StatusOr<PyCelValue> PyCelExpression::Eval(
cel::EvaluateOptions options;
options.message_factory = env->GetMessageFactory();
options.embedder_context = &embedder_context;
CEL_PYTHON_ASSIGN_OR_RETURN(
PY_CEL_PYTHON_ASSIGN_OR_RETURN(
cel::Value result,
cel_program_->Evaluate(arena->GetArena(), *activation.GetActivation(),
std::move(options)));
Expand Down
4 changes: 2 additions & 2 deletions py_cel/py_cel_function.cc
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ absl::StatusOr<cel::Value> PyCelFunctionAdapter::Invoke(
ABSL_CHECK(PyGILState_Check());

std::shared_ptr<PyCelEnvInternal> env = GetEnvFromContext(context);
PY_CEL_ASSIGN_OR_RETURN(auto py_arena,
PyCelArena::FromProtoArena(context.arena()));
CEL_PYTHON_ASSIGN_OR_RETURN(auto py_arena,
PyCelArena::FromProtoArena(context.arena()));
PyObject* py_args = PyTuple_New(args.size());
for (int i = 0; i < args.size(); ++i) {
PyTuple_SetItem(py_args, i,
Expand Down
12 changes: 6 additions & 6 deletions py_cel/py_cel_python_extension.cc
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,23 @@ absl::Status PyCelPythonExtension::ConfigureCompiler(
for (const PyCelOverload& overload : function.overloads()) {
cel::OverloadDecl overload_decl;
overload_decl.set_id(overload.overload_id());
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
cel::Type cel_type,
PyCelType::ToCelType(overload.return_type(), arena, descriptor_pool));
overload_decl.set_result(cel_type);
overload_decl.set_member(overload.is_member());
auto& mutable_args = overload_decl.mutable_args();
mutable_args.reserve(overload.parameters().size());
for (const auto& arg : overload.parameters()) {
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
cel::Type cel_type,
PyCelType::ToCelType(arg, arena, descriptor_pool));
mutable_args.push_back(cel_type);
}
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
function_decl.AddOverload(std::move(overload_decl)));
}
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
compiler_builder.GetCheckerBuilder().MergeFunction(function_decl));
}

Expand All @@ -113,12 +113,12 @@ absl::Status PyCelPythonExtension::ConfigureRuntime(
cel::FunctionDescriptor descriptor(function.name(), overload.is_member(),
types, kFunctionDescriptorOptions);
if (!overload.py_function().is_none()) {
PY_CEL_RETURN_IF_ERROR(runtime_builder.function_registry().Register(
CEL_PYTHON_RETURN_IF_ERROR(runtime_builder.function_registry().Register(
descriptor, std::make_unique<PyCelFunctionAdapter>(
function.name(), overload.return_type(),
overload.py_function())));
} else {
PY_CEL_RETURN_IF_ERROR(
CEL_PYTHON_RETURN_IF_ERROR(
runtime_builder.function_registry().RegisterLazyFunction(
descriptor));
}
Expand Down
33 changes: 17 additions & 16 deletions py_cel/py_cel_value.cc
Original file line number Diff line number Diff line change
Expand Up @@ -452,8 +452,8 @@ absl::StatusOr<cel::Value> PyObjectToCelValue(

switch (expected_type.GetKind()) {
case cel::Kind::kDyn: {
PY_CEL_ASSIGN_OR_RETURN(const PyCelType& type,
PyCelType::ForPyObject(py_object, context));
CEL_PYTHON_ASSIGN_OR_RETURN(const PyCelType& type,
PyCelType::ForPyObject(py_object, context));
return PyObjectToCelValue(py_object, type, context, env, arena,
/*bypass_type_check=*/true);
}
Expand Down Expand Up @@ -649,8 +649,8 @@ absl::StatusOr<cel::Value> PyObjectToCelValue(
}
}
case cel::Kind::kMessage: {
PY_CEL_ASSIGN_OR_RETURN(const PyCelType& type,
PyCelType::ForPyObject(py_object, context));
CEL_PYTHON_ASSIGN_OR_RETURN(const PyCelType& type,
PyCelType::ForPyObject(py_object, context));
if (!bypass_type_check && type.GetName() != expected_type.GetName()) {
return InvalidTypeError(py_object, context, expected_type);
}
Expand Down Expand Up @@ -718,15 +718,15 @@ absl::StatusOr<cel::Value> PyObjectToCelValue(
PyObject* item = PyList_GetItem(py_object, i);
// Note: PyList_GetItem returns a borrowed reference, so we shouldn't
// DECREF it.
PY_CEL_ASSIGN_OR_RETURN(cel::Value converted_value,
PyObjectToCelValue(
item, element_type,
[context, i]() {
return absl::StrFormat("%s[%d]",
context(), i);
},
env, arena));
PY_CEL_RETURN_IF_ERROR(builder->Add(converted_value));
CEL_PYTHON_ASSIGN_OR_RETURN(cel::Value converted_value,
PyObjectToCelValue(
item, element_type,
[context, i]() {
return absl::StrFormat(
"%s[%d]", context(), i);
},
env, arena));
CEL_PYTHON_RETURN_IF_ERROR(builder->Add(converted_value));
}
return std::move(*builder).Build();
}
Expand All @@ -742,7 +742,7 @@ absl::StatusOr<cel::Value> PyObjectToCelValue(
while (PyDict_Next(py_object, &pos, &key, &value)) {
// Note: PyDict_Next returns borrowed references, so we shouldn't
// DECREF them.
PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
cel::Value converted_key,
PyObjectToCelValue(
key, key_type,
Expand All @@ -753,7 +753,7 @@ absl::StatusOr<cel::Value> PyObjectToCelValue(
},
env, arena));

PY_CEL_ASSIGN_OR_RETURN(
CEL_PYTHON_ASSIGN_OR_RETURN(
cel::Value converted_value,
PyObjectToCelValue(
value, value_type,
Expand All @@ -764,7 +764,8 @@ absl::StatusOr<cel::Value> PyObjectToCelValue(
PyUnicode_AsUTF8(PyObject_Repr(value)));
},
env, arena));
PY_CEL_RETURN_IF_ERROR(builder->Put(converted_key, converted_value));
CEL_PYTHON_RETURN_IF_ERROR(
builder->Put(converted_key, converted_value));
}
return std::move(*builder).Build();
}
Expand Down
8 changes: 4 additions & 4 deletions py_cel/py_error_status.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
#include "py_cel/status_macros.h"
#include <pybind11/pybind11.h>

#define CEL_PYTHON_ASSIGN_OR_RETURN(...) \
PY_CEL_RETURN_IF_ERROR(PyErr_toStatus()); \
PY_CEL_ASSIGN_OR_RETURN(__VA_ARGS__); \
PY_CEL_RETURN_IF_ERROR(PyErr_toStatus());
#define PY_CEL_PYTHON_ASSIGN_OR_RETURN(...) \
CEL_PYTHON_RETURN_IF_ERROR(PyErr_toStatus()); \
CEL_PYTHON_ASSIGN_OR_RETURN(__VA_ARGS__); \
CEL_PYTHON_RETURN_IF_ERROR(PyErr_toStatus());

namespace cel_python {

Expand Down
Loading