# 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", ], )