|
|
@ -67,55 +67,6 @@ class GatherProto(setuptools.Command): |
|
|
|
open(path, 'a').close() |
|
|
|
open(path, 'a').close() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BuildProtoModules(setuptools.Command): |
|
|
|
|
|
|
|
"""Command to generate project *_pb2.py modules from proto files.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
description = 'build protobuf modules' |
|
|
|
|
|
|
|
user_options = [ |
|
|
|
|
|
|
|
('include=', None, 'path patterns to include in protobuf generation'), |
|
|
|
|
|
|
|
('exclude=', None, 'path patterns to exclude from protobuf generation') |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initialize_options(self): |
|
|
|
|
|
|
|
self.exclude = None |
|
|
|
|
|
|
|
self.include = r'.*\.proto$' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def finalize_options(self): |
|
|
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run(self): |
|
|
|
|
|
|
|
import grpc_tools.protoc as protoc |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
include_regex = re.compile(self.include) |
|
|
|
|
|
|
|
exclude_regex = re.compile(self.exclude) if self.exclude else None |
|
|
|
|
|
|
|
paths = [] |
|
|
|
|
|
|
|
for walk_root, directories, filenames in os.walk(PROTO_STEM): |
|
|
|
|
|
|
|
for filename in filenames: |
|
|
|
|
|
|
|
path = os.path.join(walk_root, filename) |
|
|
|
|
|
|
|
if include_regex.match(path) and not ( |
|
|
|
|
|
|
|
exclude_regex and exclude_regex.match(path)): |
|
|
|
|
|
|
|
paths.append(path) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO(kpayson): It would be nice to do this in a batch command, |
|
|
|
|
|
|
|
# but we currently have name conflicts in src/proto |
|
|
|
|
|
|
|
for path in paths: |
|
|
|
|
|
|
|
command = [ |
|
|
|
|
|
|
|
'grpc_tools.protoc', |
|
|
|
|
|
|
|
'-I {}'.format(PROTO_STEM), |
|
|
|
|
|
|
|
'--python_out={}'.format(PROTO_STEM), |
|
|
|
|
|
|
|
'--grpc_python_out={}'.format(PROTO_STEM), |
|
|
|
|
|
|
|
] + [path] |
|
|
|
|
|
|
|
if protoc.main(command) != 0: |
|
|
|
|
|
|
|
sys.stderr.write( |
|
|
|
|
|
|
|
'warning: Command:\n{}\nFailed'.format(command)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Generated proto directories dont include __init__.py, but |
|
|
|
|
|
|
|
# these are needed for python package resolution |
|
|
|
|
|
|
|
for walk_root, _, _ in os.walk(PROTO_STEM): |
|
|
|
|
|
|
|
path = os.path.join(walk_root, '__init__.py') |
|
|
|
|
|
|
|
open(path, 'a').close() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BuildPy(build_py.build_py): |
|
|
|
class BuildPy(build_py.build_py): |
|
|
|
"""Custom project build command.""" |
|
|
|
"""Custom project build command.""" |
|
|
|
|
|
|
|
|
|
|
|