danielgtaylor / python-betterproto

Clean, modern, Python 3.6+ code generator & library for Protobuf 3 and async gRPC
MIT License
1.54k stars 216 forks source link

Update buf plugin with latest v2 beta #608

Open zbstof opened 2 months ago

zbstof commented 2 months ago

Summary

Buf uses 1.2.5 of betterproto package, which cannot process optional keywords

What is the feature request for?

The core library

The Problem

In our company we have a standard to use buf to generate bindings to proto files. And we wanted to use betterproto plugin to generate idiomatic python code. Unfortunately, the only version of the plugin (v1.2.5) doesn't support some "newer" protobuf features, like "optional" keyword. This was fixed in v.2.0.0b4, but this release is not available in buf.

The Ideal Solution

Can I ask to release latest beta (v.2.0.0b7 as the time of writing) as another version of community plugin? https://github.com/danielgtaylor/python-betterproto/milestone/4 does not seem to be forthcoming. Thanks

The Current Solution

Rely on official buf python plugin https://buf.build/protocolbuffers/python?version=v28.0

JitPackJoyride commented 1 month ago

Hey, to get around this, I did an extra step on top of buf.gen.yaml with a poetry dependency that looked like this:

betterproto = {extras = ["compiler"], version = "^2.0.0b7", allow-prereleases = true}

You're likely also going to need grpcio and grpcio-tools installed.

Then, in my custom generate script, I did this:

  # Find all .proto files
  proto_files=$(find /schemas/proto -name "*.proto")

  # Special case for Python to use betterproto so that we can use Pydantic Dataclasses
  python3 -m grpc_tools.protoc \
      -I /schemas/proto \
      --python_betterproto_out=/schemas/output/python/proto/ \
      --python_betterproto_opt=pydantic_dataclasses,typing.310 \
      $proto_files

Hope that helps!

zbstof commented 1 month ago

Thank you @JitPackJoyride. I do have similar workaround at hand. But if we are willing to call raw protoc, I don't see why we need buf at all

alikleit commented 1 month ago

any take on this? Will Buf include pre-released commits? or make any exception on libraries like betterproto for beta releases?

jbouricius commented 6 days ago

:+1: here. I would also like to use betterproto with buf but the 4 year old version available doesn't work for our protos.