|
|
|
# Protobuf Python runtime
|
|
|
|
#
|
|
|
|
# See also code generation logic under /src/google/protobuf/compiler/python.
|
|
|
|
#
|
|
|
|
# Most users should depend upon public aliases in the root:
|
|
|
|
# //:protobuf_python
|
|
|
|
# //:well_known_types_py_pb2
|
|
|
|
|
|
|
|
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
|
|
|
|
load("@rules_python//python:defs.bzl", "py_library")
|
|
|
|
load("@pip_deps//:requirements.bzl", "requirement")
|
|
|
|
load("//:protobuf.bzl", "internal_py_proto_library")
|
|
|
|
load("//build_defs:cpp_opts.bzl", "COPTS")
|
|
|
|
load("//conformance:defs.bzl", "conformance_test")
|
|
|
|
load(":internal.bzl", "internal_copy_files")
|
|
|
|
|
|
|
|
py_library(
|
|
|
|
name = "protobuf_python",
|
|
|
|
data = select({
|
|
|
|
"//conditions:default": [],
|
|
|
|
":use_fast_cpp_protos": [
|
|
|
|
":google/protobuf/internal/_api_implementation.so",
|
|
|
|
":google/protobuf/pyext/_message.so",
|
|
|
|
],
|
|
|
|
}),
|
|
|
|
visibility = ["//:__pkg__"],
|
|
|
|
deps = [
|
|
|
|
":python_srcs",
|
|
|
|
":well_known_types_py_pb2",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
config_setting(
|
|
|
|
name = "use_fast_cpp_protos",
|
|
|
|
values = {
|
|
|
|
"define": "use_fast_cpp_protos=true",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_py_proto_library(
|
|
|
|
name = "well_known_types_py_pb2",
|
|
|
|
srcs = [":copied_wkt_proto_files"],
|
|
|
|
include = ".",
|
|
|
|
default_runtime = "",
|
|
|
|
protoc = "//:protoc",
|
|
|
|
srcs_version = "PY2AND3",
|
|
|
|
visibility = [
|
|
|
|
"//:__pkg__",
|
|
|
|
"@upb//:__subpackages__",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_copy_files(
|
|
|
|
name = "copied_wkt_proto_files",
|
|
|
|
srcs = [
|
|
|
|
"//:well_known_type_protos",
|
|
|
|
"//src/google/protobuf:descriptor_proto_srcs",
|
|
|
|
],
|
|
|
|
strip_prefix = "src",
|
|
|
|
)
|
|
|
|
|
|
|
|
cc_binary(
|
|
|
|
name = "google/protobuf/internal/_api_implementation.so",
|
|
|
|
srcs = ["google/protobuf/internal/api_implementation.cc"],
|
|
|
|
copts = COPTS + [
|
|
|
|
"-DPYTHON_PROTO2_CPP_IMPL_V2",
|
|
|
|
],
|
|
|
|
linkshared = 1,
|
|
|
|
linkstatic = 1,
|
|
|
|
tags = [
|
|
|
|
# Exclude this target from wildcard expansion (//...) because it may
|
|
|
|
# not even be buildable. It will be built if it is needed according
|
|
|
|
# to :use_fast_cpp_protos.
|
|
|
|
# https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes
|
|
|
|
"manual",
|
|
|
|
],
|
|
|
|
deps = select({
|
|
|
|
"//conditions:default": [],
|
|
|
|
":use_fast_cpp_protos": ["//external:python_headers"],
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
|
|
|
|
config_setting(
|
|
|
|
name = "allow_oversize_protos",
|
|
|
|
values = {
|
|
|
|
"define": "allow_oversize_protos=true",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
cc_binary(
|
|
|
|
name = "google/protobuf/pyext/_message.so",
|
|
|
|
srcs = glob([
|
|
|
|
"google/protobuf/pyext/*.cc",
|
|
|
|
"google/protobuf/pyext/*.h",
|
|
|
|
]),
|
|
|
|
copts = COPTS + [
|
|
|
|
"-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
|
|
|
|
] + select({
|
|
|
|
"//conditions:default": [],
|
|
|
|
":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"],
|
|
|
|
}),
|
|
|
|
includes = ["."],
|
|
|
|
linkshared = 1,
|
|
|
|
linkstatic = 1,
|
|
|
|
tags = [
|
|
|
|
# Exclude this target from wildcard expansion (//...) because it may
|
|
|
|
# not even be buildable. It will be built if it is needed according
|
|
|
|
# to :use_fast_cpp_protos.
|
|
|
|
# https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes
|
|
|
|
"manual",
|
|
|
|
],
|
|
|
|
deps = [
|
|
|
|
":proto_api",
|
|
|
|
"//:protobuf",
|
|
|
|
] + select({
|
|
|
|
"//conditions:default": [],
|
|
|
|
":use_fast_cpp_protos": ["//external:python_headers"],
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
|
|
|
|
py_library(
|
|
|
|
name = "python_srcs",
|
|
|
|
srcs = glob(
|
|
|
|
[
|
|
|
|
"google/protobuf/**/*.py",
|
|
|
|
],
|
|
|
|
exclude = [
|
|
|
|
"google/protobuf/internal/*_test.py",
|
|
|
|
"google/protobuf/internal/test_util.py",
|
|
|
|
"google/protobuf/internal/import_test_package/__init__.py",
|
|
|
|
],
|
|
|
|
),
|
|
|
|
imports = ["python"],
|
|
|
|
srcs_version = "PY2AND3",
|
|
|
|
visibility = [
|
|
|
|
"//:__pkg__",
|
|
|
|
"@upb//:__subpackages__",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_library(
|
|
|
|
name = "python_test_srcs",
|
|
|
|
srcs = glob([
|
|
|
|
"google/protobuf/internal/*_test.py",
|
|
|
|
]) + [
|
|
|
|
"google/protobuf/internal/test_util.py",
|
|
|
|
"google/protobuf/internal/import_test_package/__init__.py",
|
|
|
|
],
|
|
|
|
imports = ["python"],
|
|
|
|
srcs_version = "PY3",
|
|
|
|
visibility = [
|
|
|
|
"//:__pkg__",
|
|
|
|
"@upb//:__subpackages__",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Tests
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
internal_copy_files(
|
|
|
|
name = "copied_test_proto_files",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [
|
|
|
|
"//:test_proto_srcs",
|
|
|
|
"//src/google/protobuf/util:test_proto_srcs",
|
|
|
|
],
|
|
|
|
strip_prefix = "src",
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_copy_files(
|
|
|
|
name = "copied_test_messages_proto2_files",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [
|
|
|
|
"//src/google/protobuf:test_messages_proto2.proto",
|
|
|
|
],
|
|
|
|
strip_prefix = "src",
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_copy_files(
|
|
|
|
name = "copied_test_messages_proto3_files",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [
|
|
|
|
"//src/google/protobuf:test_messages_proto3.proto",
|
|
|
|
],
|
|
|
|
strip_prefix = "src",
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_py_proto_library(
|
|
|
|
name = "python_common_test_protos",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [":copied_test_proto_files"],
|
|
|
|
include = ".",
|
|
|
|
default_runtime = "",
|
|
|
|
protoc = "//:protoc",
|
|
|
|
srcs_version = "PY2AND3",
|
|
|
|
visibility = ["//:__pkg__"],
|
|
|
|
deps = [":well_known_types_py_pb2"],
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_py_proto_library(
|
|
|
|
name = "python_specific_test_protos",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = glob([
|
|
|
|
"google/protobuf/internal/*.proto",
|
|
|
|
"google/protobuf/internal/import_test_package/*.proto",
|
|
|
|
]),
|
|
|
|
include = ".",
|
|
|
|
default_runtime = ":protobuf_python",
|
|
|
|
protoc = "//:protoc",
|
|
|
|
srcs_version = "PY2AND3",
|
|
|
|
visibility = ["//:__pkg__"],
|
|
|
|
deps = [":python_common_test_protos"],
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_py_proto_library(
|
|
|
|
name = "test_messages_proto2_py_proto",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [":copied_test_messages_proto2_files"],
|
|
|
|
include = ".",
|
|
|
|
default_runtime = "//:protobuf_python",
|
|
|
|
protoc = "//:protoc",
|
|
|
|
visibility = [
|
|
|
|
"//conformance:__pkg__",
|
|
|
|
"//python:__subpackages__",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
internal_py_proto_library(
|
|
|
|
name = "test_messages_proto3_py_proto",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [":copied_test_messages_proto3_files"],
|
|
|
|
include = ".",
|
|
|
|
default_runtime = "//:protobuf_python",
|
|
|
|
protoc = "//:protoc",
|
|
|
|
visibility = [
|
|
|
|
"//conformance:__pkg__",
|
|
|
|
"//python:__subpackages__",
|
|
|
|
],
|
|
|
|
deps = [":well_known_types_py_pb2"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_library(
|
|
|
|
name = "python_test_lib",
|
|
|
|
testonly = 1,
|
|
|
|
srcs = [
|
|
|
|
"google/protobuf/internal/import_test_package/__init__.py",
|
|
|
|
"google/protobuf/internal/test_util.py",
|
|
|
|
],
|
|
|
|
imports = ["python"],
|
|
|
|
srcs_version = "PY2AND3",
|
|
|
|
deps = [
|
|
|
|
":protobuf_python",
|
|
|
|
":python_common_test_protos",
|
|
|
|
":python_specific_test_protos",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "descriptor_database_test",
|
|
|
|
srcs = ["google/protobuf/internal/descriptor_database_test.py"],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "descriptor_pool_test",
|
|
|
|
srcs = ["google/protobuf/internal/descriptor_pool_test.py"],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "descriptor_test",
|
|
|
|
srcs = ["google/protobuf/internal/descriptor_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "generator_test",
|
|
|
|
srcs = ["google/protobuf/internal/generator_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "import_test",
|
|
|
|
srcs = ["google/protobuf/internal/import_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "json_format_test",
|
|
|
|
srcs = ["google/protobuf/internal/json_format_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "keywords_test",
|
|
|
|
srcs = ["google/protobuf/internal/keywords_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "message_factory_test",
|
|
|
|
srcs = ["google/protobuf/internal/message_factory_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "message_test",
|
|
|
|
srcs = ["google/protobuf/internal/message_test.py"],
|
|
|
|
data = glob(["testdata/golden_pickle_*"]) + [
|
|
|
|
"//src/google/protobuf:testdata",
|
|
|
|
],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "numpy_test",
|
|
|
|
srcs = ["google/protobuf/internal/numpy_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [
|
|
|
|
":python_test_lib",
|
|
|
|
requirement("numpy"),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "proto_builder_test",
|
|
|
|
srcs = ["google/protobuf/internal/proto_builder_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "reflection_test",
|
|
|
|
srcs = ["google/protobuf/internal/reflection_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "service_reflection_test",
|
|
|
|
srcs = ["google/protobuf/internal/service_reflection_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "symbol_database_test",
|
|
|
|
srcs = ["google/protobuf/internal/symbol_database_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "text_encoding_test",
|
|
|
|
srcs = ["google/protobuf/internal/text_encoding_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "text_format_test",
|
|
|
|
srcs = ["google/protobuf/internal/text_format_test.py"],
|
|
|
|
data = ["//src/google/protobuf:testdata"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "unknown_fields_test",
|
|
|
|
srcs = ["google/protobuf/internal/unknown_fields_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "well_known_types_test",
|
|
|
|
srcs = ["google/protobuf/internal/well_known_types_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "wire_format_test",
|
|
|
|
srcs = ["google/protobuf/internal/wire_format_test.py"],
|
|
|
|
imports = ["."],
|
|
|
|
deps = [":python_test_lib"],
|
|
|
|
)
|
|
|
|
|
|
|
|
cc_library(
|
|
|
|
name = "proto_api",
|
|
|
|
hdrs = ["google/protobuf/proto_api.h"],
|
|
|
|
visibility = ["//visibility:public"],
|
|
|
|
deps = [
|
|
|
|
"//external:python_headers",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
py_test(
|
|
|
|
name = "python_version",
|
|
|
|
srcs = ["python_version.py"],
|
|
|
|
)
|
|
|
|
|
|
|
|
conformance_test(
|
|
|
|
name = "conformance_test",
|
|
|
|
env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "python"},
|
|
|
|
failure_list = "//conformance:failure_list_python.txt",
|
|
|
|
target_compatible_with = select({
|
|
|
|
":use_fast_cpp_protos": ["@platforms//:incompatible"],
|
|
|
|
"//conditions:default": [],
|
|
|
|
}),
|
|
|
|
testee = "//conformance:conformance_python",
|
|
|
|
text_format_failure_list = "//conformance:text_format_failure_list_python.txt",
|
|
|
|
)
|
|
|
|
|
|
|
|
# Note: this requires --define=use_fast_cpp_protos=true
|
|
|
|
conformance_test(
|
|
|
|
name = "conformance_test_cpp",
|
|
|
|
env = {"PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": "cpp"},
|
|
|
|
failure_list = "//conformance:failure_list_python.txt",
|
|
|
|
target_compatible_with = select({
|
|
|
|
":use_fast_cpp_protos": [],
|
|
|
|
"//conditions:default": ["@platforms//:incompatible"],
|
|
|
|
}),
|
|
|
|
testee = "//conformance:conformance_python",
|
|
|
|
text_format_failure_list = "//conformance:text_format_failure_list_python_cpp.txt",
|
|
|
|
)
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Distribution files
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
pkg_files(
|
|
|
|
name = "dist_files",
|
|
|
|
srcs = glob([
|
|
|
|
"google/**/*.proto",
|
|
|
|
"google/**/*.py",
|
|
|
|
"google/protobuf/internal/*.cc",
|
|
|
|
"google/protobuf/pyext/*.cc",
|
|
|
|
"google/protobuf/pyext/*.h",
|
|
|
|
]) + [
|
|
|
|
"BUILD.bazel",
|
|
|
|
"MANIFEST.in",
|
|
|
|
"README.md",
|
|
|
|
"google/protobuf/proto_api.h",
|
|
|
|
"google/protobuf/pyext/README",
|
|
|
|
"google/protobuf/python_protobuf.h",
|
|
|
|
"internal.bzl",
|
|
|
|
"mox.py",
|
|
|
|
"python_version.py",
|
|
|
|
"release.sh",
|
|
|
|
"setup.cfg",
|
|
|
|
"setup.py",
|
|
|
|
"stubout.py",
|
|
|
|
"tox.ini",
|
|
|
|
],
|
|
|
|
strip_prefix = strip_prefix.from_root(""),
|
|
|
|
visibility = ["//pkg:__pkg__"],
|
|
|
|
)
|