• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# gRPC Bazel BUILD file.
2#
3# Copyright 2020 The gRPC authors.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17load("@rules_proto//proto:defs.bzl", "proto_library")
18load(
19    "@com_github_grpc_grpc//bazel:python_rules.bzl",
20    "py_grpc_library",
21    "py_proto_library",
22)
23
24_IMPORT_PREFIX = "foo/bar"
25
26_STRIP_PREFIX = "/%s" % package_name()
27
28proto_library(
29    name = "import_no_strip_proto",
30    srcs = ["namespaced_example.proto"],
31    import_prefix = _IMPORT_PREFIX,
32    strip_import_prefix = None,
33)
34
35proto_library(
36    name = "import_strip_proto",
37    srcs = ["namespaced_example.proto"],
38    import_prefix = _IMPORT_PREFIX,
39    strip_import_prefix = _STRIP_PREFIX,
40)
41
42proto_library(
43    name = "no_import_no_strip_proto",
44    srcs = ["namespaced_example.proto"],
45    import_prefix = None,
46    strip_import_prefix = None,
47)
48
49proto_library(
50    name = "no_import_strip_proto",
51    srcs = ["namespaced_example.proto"],
52    import_prefix = None,
53    strip_import_prefix = _STRIP_PREFIX,
54)
55
56py_proto_library(
57    name = "import_no_strip_py_pb2",
58    deps = ["import_no_strip_proto"],
59)
60
61py_grpc_library(
62    name = "import_no_strip_py_pb2_grpc",
63    srcs = ["import_no_strip_proto"],
64    deps = ["import_no_strip_py_pb2"],
65)
66
67py_proto_library(
68    name = "import_strip_py_pb2",
69    deps = ["import_strip_proto"],
70)
71
72py_grpc_library(
73    name = "import_strip_py_pb2_grpc",
74    srcs = ["import_strip_proto"],
75    deps = ["import_strip_py_pb2"],
76)
77
78py_proto_library(
79    name = "no_import_no_strip_py_pb2",
80    deps = ["no_import_no_strip_proto"],
81)
82
83py_grpc_library(
84    name = "no_import_no_strip_py_pb2_grpc",
85    srcs = ["no_import_no_strip_proto"],
86    deps = ["no_import_no_strip_py_pb2"],
87)
88
89py_proto_library(
90    name = "no_import_strip_py_pb2",
91    deps = ["no_import_strip_proto"],
92)
93
94py_grpc_library(
95    name = "no_import_strip_py_pb2_grpc",
96    srcs = ["no_import_strip_proto"],
97    deps = ["no_import_strip_py_pb2"],
98)
99
100#################
101# Namespace Tests
102#################
103
104# Most examples with protos have all proto packages rooted at the workspace root. i.e. google/api has
105# a directory structure:
106# - WORKSPACE
107# - /google
108#   - /api
109#     - files.proto
110#
111# But if you can't anchor the protos at the root, you have to use strip and import prefixes. This results
112# in the following directory layout for python, which needs to properly be added to the imports.
113#
114# No Import or Strip (Can't compile if there are any proto dependencies)
115# bazel-bin/namespaced/upper/example/namespaced_example_pb2.py
116#
117# No import Prefix (Can't compile if there are any proto dependencies)
118# bazel-bin/namespaced/upper/example/_virtual_imports/namespaced_example_proto/namespaced_example_pb2.py
119#
120# No strip prefix (Can't compile if there are any proto dependencies)
121# bazel-bin/namespaced/upper/example/_virtual_imports/namespaced_example_proto/upper/example/namespaced/upper/example/namespaced_example_pb2.py
122#
123# Both Import and Strip
124# bazel-bin/namespaced/upper/example/_virtual_imports/namespaced_example_proto/upper/example/namespaced_example_pb2.py
125
126py_test(
127    name = "import_no_strip_test",
128    srcs = ["import_no_strip_test.py"],
129    main = "import_no_strip_test.py",
130    python_version = "PY3",
131    deps = [
132        ":import_no_strip_py_pb2",
133        ":import_no_strip_py_pb2_grpc",
134    ],
135)
136
137py_test(
138    name = "import_strip_test",
139    srcs = ["import_strip_test.py"],
140    main = "import_strip_test.py",
141    python_version = "PY3",
142    deps = [
143        ":import_strip_py_pb2",
144        ":import_strip_py_pb2_grpc",
145    ],
146)
147
148py_test(
149    name = "no_import_no_strip_test",
150    srcs = ["no_import_no_strip_test.py"],
151    main = "no_import_no_strip_test.py",
152    python_version = "PY3",
153    deps = [
154        ":no_import_no_strip_py_pb2",
155        ":no_import_no_strip_py_pb2_grpc",
156    ],
157)
158
159py_test(
160    name = "no_import_strip_test",
161    srcs = ["no_import_strip_test.py"],
162    main = "no_import_strip_test.py",
163    python_version = "PY3",
164    deps = [
165        ":no_import_strip_py_pb2",
166        ":no_import_strip_py_pb2_grpc",
167    ],
168)
169