"""Setup file for netsim-grpc. Use setup.cfg to configure your project. This file was generated with PyScaffold 4.3. PyScaffold helps you to put up the scaffold of your new Python project. Learn more under: https://pyscaffold.org/ """ import os from os import path import subprocess import sys from setuptools import setup from setuptools.command.build_py import build_py class ProtoBuild(build_py): """This command automatically compiles all netsim .proto files with `protoc` compiler and places generated files under src/netsim_grpc/proto/ """ def run(self): here = path.abspath(path.dirname(__file__)) root_dir = path.dirname(path.dirname(here)) aosp_dir = path.dirname(path.dirname(root_dir)) proto_root_dir = path.join(root_dir, "proto") proto_dir = path.join(proto_root_dir, "netsim") rootcanal_proto_root_dir = path.join( aosp_dir, "packages", "modules", "Bluetooth", "tools", "rootcanal", "proto", ) rootcanal_proto_dir = path.join(rootcanal_proto_root_dir, "rootcanal") out_dir = path.join(here, "src", "netsim_grpc", "proto") # Rootcanal Protobufs for proto_file in filter( lambda x: x.endswith(".proto"), os.listdir(rootcanal_proto_dir) ): source = path.join(rootcanal_proto_dir, proto_file) output = path.join(out_dir, "rootcanal", proto_file).replace( ".proto", "_pb2.py" ) if not path.exists(output) or ( path.getmtime(source) > path.getmtime(output) ): sys.stderr.write(f"Protobuf-compiling {source}\n") subprocess.check_call([ sys.executable, "-m", "grpc_tools.protoc", f"-I{proto_root_dir}", f"-I{rootcanal_proto_root_dir}", f"--python_out={out_dir}", f"--grpc_python_out={out_dir}", source, ]) # Netsim Protobufs for proto_file in filter( lambda x: x.endswith(".proto"), os.listdir(proto_dir) ): source = path.join(proto_dir, proto_file) output = path.join(out_dir, "netsim", proto_file).replace( ".proto", "_pb2.py" ) if not path.exists(output) or ( path.getmtime(source) > path.getmtime(output) ): sys.stderr.write(f"Protobuf-compiling {source}\n") subprocess.check_call([ sys.executable, "-m", "grpc_tools.protoc", f"-I{proto_root_dir}", f"-I{rootcanal_proto_root_dir}", f"--python_out={out_dir}", f"--grpc_python_out={out_dir}", source, ]) super().run() if __name__ == "__main__": try: setup( # use_scm_version={"version_scheme": "no-guess-dev", "root": "../../../"}, cmdclass={"build_py": ProtoBuild}, ) except: # noqa print( "\n\nAn error occurred while building the project, " "please ensure you have the most updated version of setuptools, " "setuptools_scm and wheel with:\n" " pip install -U setuptools setuptools_scm wheel\n\n" ) raise