'''This file automatically rebuilds the proto definitions for Python.''' from __future__ import absolute_import import os.path import sys import pkg_resources from ._utils import has_grpcio_protoc, invoke_protoc, print_versions dirname = os.path.dirname(__file__) protosrc = os.path.join(dirname, "nanopb.proto") protodst = os.path.join(dirname, "nanopb_pb2.py") rebuild = False if os.path.isfile(protosrc): src_date = os.path.getmtime(protosrc) if not os.path.isfile(protodst) or os.path.getmtime(protodst) < src_date: rebuild = True if not rebuild: try: from . import nanopb_pb2 except AttributeError as e: rebuild = True sys.stderr.write("Failed to import nanopb_pb2.py: " + str(e) + "\n" "Will automatically attempt to rebuild this.\n" "Verify that python-protobuf and protoc versions match.\n") print_versions() if rebuild: cmd = [ "protoc", "--python_out={}".format(dirname), protosrc, "-I={}".format(dirname), ] if has_grpcio_protoc(): # grpcio-tools has an extra CLI argument # from grpc.tools.protoc __main__ invocation. _builtin_proto_include = pkg_resources.resource_filename('grpc_tools', '_proto') cmd.append("-I={}".format(_builtin_proto_include)) try: invoke_protoc(argv=cmd) except: sys.stderr.write("Failed to build nanopb_pb2.py: " + ' '.join(cmd) + "\n") raise