89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
|
|
"""Deletes the existing bindings, then rebuild using the source .proto file."""
|
||
|
|
|
||
|
|
import os
|
||
|
|
from shutil import copyfile
|
||
|
|
|
||
|
|
UP = '../'
|
||
|
|
PROTO_PATH = 'src/config/proto/chromiumos/config/api/test/tls/'
|
||
|
|
PROTO_NAME = 'commontls.proto'
|
||
|
|
DEST_PROTO_NAME = 'autotest_common.proto'
|
||
|
|
DEP_PROTO_RELATIVE_PATH = 'dependencies/longrunning/'
|
||
|
|
DEP_PROTO_NAME = 'operations.proto'
|
||
|
|
|
||
|
|
BUILD_CMD = (
|
||
|
|
'python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. {} {}'
|
||
|
|
.format(DEST_PROTO_NAME,
|
||
|
|
os.path.join(DEP_PROTO_RELATIVE_PATH, DEP_PROTO_NAME)))
|
||
|
|
|
||
|
|
|
||
|
|
def delete_old_protos():
|
||
|
|
"""Delete any existing protos or built proto bindings."""
|
||
|
|
for file in os.listdir('.'):
|
||
|
|
if 'autotest_common' in file:
|
||
|
|
os.remove(file)
|
||
|
|
|
||
|
|
for file in os.listdir(DEP_PROTO_RELATIVE_PATH):
|
||
|
|
if 'operations' in file:
|
||
|
|
os.remove(os.path.join(DEP_PROTO_RELATIVE_PATH, file))
|
||
|
|
|
||
|
|
|
||
|
|
def copy_proto_from_src():
|
||
|
|
"""Copy the proto from the src dirs to the local dir."""
|
||
|
|
copy_list = [(get_proto_path(), DEST_PROTO_NAME),
|
||
|
|
(get_proto_deps_dir(),
|
||
|
|
os.path.join(DEP_PROTO_RELATIVE_PATH, DEP_PROTO_NAME))]
|
||
|
|
|
||
|
|
for src, dest in copy_list:
|
||
|
|
if os.path.isfile(src):
|
||
|
|
copyfile(src, dest)
|
||
|
|
else:
|
||
|
|
raise Exception('Proto missing at %s' % src)
|
||
|
|
|
||
|
|
|
||
|
|
def get_proto_path():
|
||
|
|
"""Return the full path of the commontls.proto from TLS."""
|
||
|
|
return os.path.join(UP * get_current_depth(), PROTO_PATH, PROTO_NAME)
|
||
|
|
|
||
|
|
|
||
|
|
def get_proto_deps_dir():
|
||
|
|
"""Return the full path of the operations.proto from TLS."""
|
||
|
|
return os.path.join(UP * get_current_depth(), PROTO_PATH,
|
||
|
|
DEP_PROTO_RELATIVE_PATH, DEP_PROTO_NAME)
|
||
|
|
|
||
|
|
|
||
|
|
def get_current_depth():
|
||
|
|
"""Return the current depth off /src/ within the file structure."""
|
||
|
|
dirs = os.getcwd().split('/')
|
||
|
|
src_level = dirs.index('src')
|
||
|
|
return len(dirs) - src_level
|
||
|
|
|
||
|
|
|
||
|
|
def modify_proto():
|
||
|
|
"""Change the full path for the dependencies for a local one."""
|
||
|
|
# This is likely a dirty hack, but compiling with the full src in autotest
|
||
|
|
# doesn't work. Open to suggestions for alternatives.
|
||
|
|
|
||
|
|
#TODO (dbeckett@) b/183220746, work on a better thats not a hack...
|
||
|
|
with open(DEST_PROTO_NAME, 'r+') as f:
|
||
|
|
original = f.read()
|
||
|
|
new = original.replace(
|
||
|
|
'import "chromiumos/config/api/test/tls/dependencies/longrunning/operations.proto";',
|
||
|
|
'import "dependencies/longrunning/operations.proto";')
|
||
|
|
with open(DEST_PROTO_NAME, 'w') as wf:
|
||
|
|
wf.write(new)
|
||
|
|
|
||
|
|
|
||
|
|
def create_bindings():
|
||
|
|
os.system(BUILD_CMD)
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
delete_old_protos()
|
||
|
|
copy_proto_from_src()
|
||
|
|
modify_proto()
|
||
|
|
create_bindings()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
main()
|