跳转到主要内容

Python协议缓冲区,为所有人而设计

项目描述

协议缓冲区,为所有人而设计

CI

动机

你是否因为必须修复由 protoc 生成的绝对导入而感到烦恼?

如果是这样,那么 protoletariat 就是你的工具。

protoletariat 有一个目标:修复由 protoc 生成的Python代码中的损坏的导入。

有关此工具的灵感的讨论,请参阅 https://github.com/protocolbuffers/protobuf/issues/1491

安装

工件 状态 安装命令
PyPI包 PyPI pip安装无产阶级
Conda包 Conda Version conda install protoletariat -c conda-forge
Docker镜像 docker pull ghcr.io/cpcloud/protoletariat:latest

注意:由于 conda-forge 包版本可能落后于其他工件几小时,所以可能需要等待。

用法

protoletariat 被设计为在运行 protoc 之后作为后处理步骤运行。它直接在生成的代码上操作。

示例

以下是如何使用名为 protol 的工具的示例

  1. 创建一些protobuf文件
// thing1.proto
syntax = "proto3";

import "thing2.proto";

package things;

message Thing1 {
  Thing2 thing2 = 1;
}
// thing2.proto
syntax = "proto3";

package things;

message Thing2 {
  string data = 1;
}
  1. 在这些文件上运行 protoc
$ mkdir out
$ protoc \
  --python_out=out \
  --proto_path=directory/containing/protos thing1.proto thing2.proto
  1. 在生成的代码上运行 protol
$ protol \
  --create-package \
  --in-place \
  --python-out out \
  protoc --proto-path=directory/containing/protos thing1.proto thing2.proto

应该显示包含至少以下行的 out/thing1_pb2.py 模块 diff

-import thing2_pb2 as thing2__pb2
-
+from . import thing2_pb2 as thing2__pb2

工作原理

从高层次来看,protoletariat 将绝对导入转换为相对导入。

然而,它不会将任何绝对导入转换为相对导入。

《protol》工具只会转换由 .proto 文件生成的导入。它通过检查从 proto 文件生成的 FileDescriptorProtos 来完成此操作。

核心重写机制使用一种简化的模式匹配形式实现,该形式查看 Python AST,并为匹配的导入模式调用重写规则。

子命令

protoletariat 为您可能想要用来生成 FileDescriptorSet 字节的每个工具提供了一个子命令

子命令 描述
protoc 使用 protoc 生成 FileDescriptorSet 字节
buf 使用 buf 生成 FileDescriptorSet 字节
raw 您可以通过文件或直接从 stdin 提供作为 FileDescriptorSet 字节的文件

帮助

$ protol
Usage: protol [OPTIONS] COMMAND [ARGS]...

  Rewrite protoc or buf-generated imports for use by the protoletariat.

Options:
  -o, --python-out DIRECTORY      Directory containing protoc or buf-generated Python code  [required]
  --in-place / --not-in-place     Overwrite all relevant files under `--python-out` with adjusted imports  [default: not-in-place]
  --create-package / --dont-create-package
                                  Recursively create __init__.py files under `--python-out`  [default: dont-create-package]
  -s, --module-suffixes TEXT      Suffixes of Python/mypy modules to process  [default: _pb2.py, _pb2.pyi, _pb2_grpc.py, _pb2_grpc.pyi]
  --exclude-google-imports / --dont-exclude-google-imports
                                  Exclude rewriting imports prefixed with google/protobuf
  -e, --exclude-imports-glob TEXT
                                  Exclude imports matching a glob pattern from being rewritten. Multiple values are allowed
  --help                          Show this message and exit.

Commands:
  buf     Use buf to generate the FileDescriptorSet blob
  protoc  Use protoc to generate the FileDescriptorSet blob
  raw     Rewrite imports using FileDescriptorSet bytes from a file or stdin

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

protoletariat-3.2.19.tar.gz (19.7 kB 查看散列)

上传时间

构建分布

protoletariat-3.2.19-py3-none-any.whl (20.4 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面