{"library":"protoc-gen-validate","title":"Protoc-gen-validate (Python)","description":"Protoc-gen-validate provides robust data validation for Protocol Buffers. This Python library serves as the runtime component for validation code generated by the `protoc-gen-validate` plugin. It allows Python applications to enforce complex validation rules defined directly within `.proto` files, ensuring data integrity at the message level. The current version is 1.3.3, with releases often occurring to fix packaging or Python version compatibility issues.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install protoc-gen-validate"],"cli":{"name":"protoc-gen-validate","version":"sh: 1: protoc-gen-validate: not found"}},"imports":["from protoc_gen_validate.validator import ValidationError"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"# This quickstart assumes you have already defined a .proto file with validation rules\n# (e.g., example.proto) and generated the Python protobuf and validation stubs:\n#\n# example.proto content:\n# syntax = \"proto3\";\n# package example;\n# import validate/validate.proto;\n#\n# message Person {\n#   int32 id = 1 [(validate.rules).int32.gt = 0];\n#   string email = 2 [(validate.rules).string.email = true];\n#   string name = 3 [(validate.rules).string.min_len = 1];\n# }\n#\n# Generation command (requires 'protoc' and 'protoc-gen-validate' binaries):\n# protoc --plugin=protoc-gen-validate --validate_out=. --python_out=. example.proto\n\nfrom example_pb2 import Person\nfrom example_pb2_validate import validate as validate_person\nfrom protoc_gen_validate.validator import ValidationError\n\n# --- Example 1: Valid Person ---\nprint(\"\\n--- Valid Person Example ---\")\ntry:\n    p_valid = Person(id=1, email=\"alice@example.com\", name=\"Alice Smith\")\n    validate_person(p_valid)\n    print(f\"Validation successful for: {p_valid.name}\")\nexcept ValidationError as e:\n    print(f\"Validation unexpectedly failed for valid person: {e}\")\n\n# --- Example 2: Invalid Person (id <= 0) ---\nprint(\"\\n--- Invalid Person (ID) Example ---\")\ntry:\n    p_invalid_id = Person(id=0, email=\"bob@example.com\", name=\"Bob Johnson\")\n    validate_person(p_invalid_id)\n    print(f\"Validation unexpectedly passed for invalid ID: {p_invalid_id.name}\")\nexcept ValidationError as e:\n    print(f\"Validation failed for invalid ID (as expected): {e}\")\n\n# --- Example 3: Invalid Person (empty name) ---\nprint(\"\\n--- Invalid Person (Name) Example ---\")\ntry:\n    p_invalid_name = Person(id=2, email=\"charlie@example.com\", name=\"\")\n    validate_person(p_invalid_name)\n    print(f\"Validation unexpectedly passed for empty name: {p_invalid_name.email}\")\nexcept ValidationError as e:\n    print(f\"Validation failed for empty name (as expected): {e}\")\n","lang":"python","description":"This quickstart demonstrates how to use the generated validation functions and catch `ValidationError` exceptions for Protobuf messages in Python. It assumes that you have already defined your `.proto` messages with validation rules and used the `protoc` compiler with the `protoc-gen-validate` plugin to generate the Python `_pb2.py` and `_pb2_validate.py` files.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.2.1","pypi_latest":"1.3.3","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.1,"avg_import_s":null,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"22.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":2.7,"import_time_s":null,"mem_mb":null,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"25.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":2.6,"import_time_s":null,"mem_mb":null,"disk_size":"26M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"15.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":3.6,"import_time_s":null,"mem_mb":null,"disk_size":"16M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"14.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":3.2,"import_time_s":null,"mem_mb":null,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"protoc-gen-validate","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":3.2,"import_time_s":null,"mem_mb":null,"disk_size":"23M"}]}}