| # gRPC Bazel BUILD file. |
| # |
| # Copyright 2019 The gRPC authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| load("@rules_proto//proto:defs.bzl", "proto_library") |
| load( |
| "@com_github_grpc_grpc//bazel:python_rules.bzl", |
| "py_grpc_library", |
| "py_proto_library", |
| ) |
| load("//:python_rules_test.bzl", "python_rules_test_suite") |
| |
| package( |
| default_testonly = 1, |
| ) |
| |
| proto_library( |
| name = "helloworld_proto", |
| srcs = ["helloworld.proto"], |
| deps = [ |
| ":hello_dep_proto", |
| "@com_google_protobuf//:duration_proto", |
| "@com_google_protobuf//:timestamp_proto", |
| ], |
| ) |
| |
| # Test that .proto files can be located in strict subdiretories of the package. |
| proto_library( |
| name = "hello_dep_proto", |
| srcs = ["subdir/hello_dep.proto"], |
| ) |
| |
| py_proto_library( |
| name = "helloworld_py_pb2", |
| deps = [":helloworld_proto"], |
| ) |
| |
| py_grpc_library( |
| name = "helloworld_py_pb2_grpc", |
| srcs = [":helloworld_proto"], |
| deps = [":helloworld_py_pb2"], |
| ) |
| |
| py_proto_library( |
| name = "duration_py_pb2", |
| deps = ["@com_google_protobuf//:duration_proto"], |
| ) |
| |
| py_proto_library( |
| name = "timestamp_py_pb2", |
| deps = ["@com_google_protobuf//:timestamp_proto"], |
| ) |
| |
| py_test( |
| name = "import_test", |
| srcs = ["helloworld.py"], |
| main = "helloworld.py", |
| python_version = "PY3", |
| deps = [ |
| ":duration_py_pb2", |
| ":helloworld_py_pb2", |
| ":helloworld_py_pb2_grpc", |
| ":timestamp_py_pb2", |
| ], |
| ) |
| |
| # Test compatibility of py_proto_library and py_grpc_library rules with |
| # proto_library targets as deps when the latter use import_prefix and/or |
| # strip_import_prefix arguments |
| # |
| # See namespaced/upper/example for more encompassing tests. |
| proto_library( |
| name = "helloworld_moved_proto", |
| srcs = ["helloworld.proto"], |
| import_prefix = "google/cloud", |
| strip_import_prefix = "", |
| deps = [ |
| ":hello_dep_proto", |
| "@com_google_protobuf//:duration_proto", |
| "@com_google_protobuf//:timestamp_proto", |
| ], |
| ) |
| |
| py_proto_library( |
| name = "helloworld_moved_py_pb2", |
| deps = [":helloworld_moved_proto"], |
| ) |
| |
| py_grpc_library( |
| name = "helloworld_moved_py_pb2_grpc", |
| srcs = [":helloworld_moved_proto"], |
| deps = [":helloworld_moved_py_pb2"], |
| ) |
| |
| py_test( |
| name = "import_moved_test", |
| srcs = ["helloworld_moved.py"], |
| main = "helloworld_moved.py", |
| python_version = "PY3", |
| deps = [ |
| ":duration_py_pb2", |
| ":helloworld_moved_py_pb2", |
| ":helloworld_moved_py_pb2_grpc", |
| ":timestamp_py_pb2", |
| ], |
| ) |
| |
| # Test that a py_proto_library wrapping a proto_library in another package can |
| # be imported from the package that contains the py_proto_library *AND* from |
| # the package that contains the proto_library. |
| py_proto_library( |
| name = "subpackage_py_pb2", |
| deps = ["//in_subpackage:subpackage_proto"], |
| ) |
| |
| py_test( |
| name = "import_from_this_package_subpackage_test", |
| srcs = ["import_from_this_package.py"], |
| main = "import_from_this_package.py", |
| python_version = "PY3", |
| deps = [ |
| ":subpackage_py_pb2", |
| ], |
| ) |
| |
| py_test( |
| name = "import_from_proto_library_package_test", |
| srcs = ["import_from_proto_library_package.py"], |
| main = "import_from_proto_library_package.py", |
| python_version = "PY3", |
| deps = [ |
| ":subpackage_py_pb2", |
| ], |
| ) |
| |
| py_test( |
| name = "import_from_grpcio_reflection_test", |
| srcs = ["import_from_grpcio_reflection.py"], |
| main = "import_from_grpcio_reflection.py", |
| python_version = "PY3", |
| deps = [ |
| "@com_github_grpc_grpc//src/python/grpcio_reflection/grpc_reflection/v1alpha:grpc_reflection", |
| ], |
| ) |
| |
| # Test that a py_proto_library can be successfully imported without requiring |
| # explicit dependencies on unused dependencies of the generated code. |
| py_test( |
| name = "transitive_proto_dep_test", |
| srcs = ["transitive_proto_dep.py"], |
| main = "transitive_proto_dep.py", |
| python_version = "PY3", |
| deps = [ |
| ":helloworld_py_pb2", |
| ], |
| ) |
| |
| python_rules_test_suite( |
| name = "python_rules_test", |
| ) |
| |
| # Test that grpc_library attribute replaces grpcio dependency on |
| # py_grpc_library targets |
| |
| py_library( |
| name = "grpc_library_replacement", |
| srcs = ["grpc_library_replacement.py"], |
| ) |
| |
| py_grpc_library( |
| name = "helloworld_py_pb2_grpc_library_changed", |
| srcs = [":helloworld_proto"], |
| grpc_library = ":grpc_library_replacement", |
| deps = [":helloworld_py_pb2"], |
| ) |
| |
| py_test( |
| name = "grpc_library_replacement_test", |
| srcs = ["grpc_library_replacement_test.py"], |
| main = "grpc_library_replacement_test.py", |
| python_version = "PY3", |
| deps = [ |
| ":helloworld_py_pb2_grpc_library_changed", |
| ], |
| ) |