GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - bufbuild/protovalidate-py: Protocol Buffer Validation for Python.

BranchesTags
Open more actions menu

Latest commit

 

History

461 Commits
461 Commits

Folders and files

NameName
Last commit message
Last commit date
.cargo
.cargo
 
 
.github
.github
 
 
crates
crates
 
 
docs
docs
 
 
proto/buf/validate
proto/buf/validate
 
 
protovalidate
protovalidate
 
 
scripts
scripts
 
 
src
src
 
 
test
test
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.gitmodules
.gitmodules
 
 
Cargo.lock
Cargo.lock
 
 
Cargo.toml
Cargo.toml
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
buf.gen.yaml
buf.gen.yaml
 
 
buf.yaml
buf.yaml
 
 
build.rs
build.rs
 
 
poe_tasks.toml
poe_tasks.toml
 
 
protovalidate-python.code-workspace
protovalidate-python.code-workspace
 
 
pyproject.toml
pyproject.toml
 
 
uv.lock
uv.lock
 
 
zensical.toml
zensical.toml
 
 

Repository files navigation

The Buf logo

protovalidate-py

CI PyPI version

Protovalidate is the semantic validation library for Protobuf. It provides standard annotations to validate common rules on messages and fields, as well as the ability to use CEL to write custom rules. It's the next generation of protoc-gen-validate.

With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:

syntax = "proto3";

package acme.user.v1;

import "buf/validate/validate.proto";

message User {
  string id = 1 [(buf.validate.field).string.uuid = true];
  uint32 age = 2 [(buf.validate.field).uint32.lte = 150]; // We can only hope.
  string email = 3 [(buf.validate.field).string.email = true];
  string first_name = 4 [(buf.validate.field).string.max_len = 64];
  string last_name = 5 [(buf.validate.field).string.max_len = 64];

  option (buf.validate.message).cel = {
    id: "first_name_requires_last_name"
    message: "last_name must be present if first_name is present"
    expression: "!has(this.first_name) || has(this.last_name)"
  };
}

Once you've added protovalidate to your project, validation is idiomatic Python:

try:
    protovalidate.validate(message)
except protovalidate.ValidationError as e:
    # Handle failure.

Installation

Tip

The easiest way to get started with Protovalidate for RPC APIs are the quickstarts in Buf's documentation. There's one available for Python and gRPC.

To install the package, use pip:

pip install protovalidate

protovalidate is implemented as a Python native extension. We publish wheels for common platforms and you will usually download a pre-built wheel. For others, ensure you have Rust and a C++ compiler available, and it will be automatically built during installation.

Documentation

Comprehensive documentation for Protovalidate is available at protovalidate.com.

Highlights for Python developers include:

  • The developer quickstart
  • A comprehensive RPC quickstart for Python and gRPC
  • A migration guide for protoc-gen-validate users

Additional languages and repositories

Protovalidate isn't just for Python! You might be interested in sibling repositories for other languages:

  • protovalidate-go (Go)
  • protovalidate-java (Java)
  • protovalidate-cc (C++)
  • protovalidate-es (TypeScript and JavaScript)

Additionally, protovalidate's core repository provides:

  • Protovalidate's Protobuf API
  • Conformance testing utilities for acceptance testing of protovalidate implementations

Benchmarks

We include a set of benchmarks to verify different types of validation operations based on pytest-benchmark. You can run them with

$ uv run poe bench

This persists the runs results. It is often helpful to compare benchmark results between runs, for example before and after an optimization. To compare persisted results, use

$ uv run poe bench-compare

Contributing

We genuinely appreciate any help! If you'd like to contribute, check out these resources:

  • Contributing Guidelines: Guidelines to make your contribution process straightforward and meaningful
  • Conformance testing utilities: Utilities providing acceptance testing of protovalidate implementations

Legal

Offered under the Apache 2 license.

About

Protocol Buffer Validation for Python.

protovalidate.com

Topics

celcommon-expression-languageprotobufprotocol-bufferspython

Resources

Readme
Apache-2.0 license

Code of conduct

Code of conduct

Contributing

Contributing
Activity
Custom properties

Stars

70 stars

Watchers

6 watching

Forks

12 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.