A Pure Python Protobuf .proto Parser
Project description
Protobuf Schema Parser
Protobuf Schema Parser is a pure-Python library that parses and writes Protobuf schemas to and from an abstract syntax tree (AST).
The library uses proto_schema_parser.parser.Parser
to parse the CST into an AST. The proto_schema_parser.generator.Generator
class converts the AST back into a CST (a Protobuf schema string).
The lexer and parser are autogenerated from Buf's ANTLR lexer and parser grammar files.
Features
- ✅ proto2 and proto3 support
- ✅ message, field, enum, optional, required, repeated
- ✅ import, package, oneof, map, and option
- ✅ group and extend (in proto2)
- ✅ service, rpc, and stream
- ✅ line and block comment preservation
Installation
Install the package via pip:
pip install proto-schema-parser
Usage
To parse a protobuf schema, create a Parser
object and call the parse
method:
from proto_schema_parser.parser import Parser
text = """
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
"""
result = Parser().parse(text)
This will return an AST object (ast.File
) representing the parsed protobuf schema.
File(
syntax='proto3',
file_elements=[
Message(
name='SearchRequest',
elements=[
Field(
name='query',
number=1,
type='string',
cardinality=None,
options=[]),
Field(
name='page_number',
number=2,
type='int32',
cardinality=None,
options=[]),
Field(
name='result_per_page',
number=3,
type='int32',
cardinality=None,
options=[])])])
To write the AST back to a protobuf schema, create a Generator
object and call the generate
method:
from proto_schema_parser.generator import Generator
proto = Generator().generate(result)
The proto
variable now contains the string:
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
Contributing
I welcome contributions!
- Submit a PR and I'll review it as soon as I can.
- Open an issue if you find a bug or have a feature request.
License
Protobuf Schema Parser is licensed under the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for proto_schema_parser-1.3.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f9af4aa0d0862b668d2dd2f7dff979e5847331e927e7e9f3de2fe1410363ba0 |
|
MD5 | bf623c34cef3fbdc857fdb2569830572 |
|
BLAKE2b-256 | 735c7d462fb1a6e21201bc104295b31d69ebf4fb5855baba3cca419dda1dde6a |
Hashes for proto_schema_parser-1.3.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d0ab3063b013119f724b177556200ffd56b4a6a4d253c73e23fa32ff04fdef2 |
|
MD5 | 9a74091bfa11f4b6b177de1a1e39dbb4 |
|
BLAKE2b-256 | 060cca47ea69d1005fd66c1a9387801343e07e0fc1a5da153575e8761d3e4359 |