diff options
author | Pieter De Gendt <pieter.degendt@basalte.be> | 2024-05-06 09:09:31 +0200 |
---|---|---|
committer | Petteri Aimonen <jpa@github.mail.kapsi.fi> | 2024-05-06 16:48:23 +0300 |
commit | 63f6d65b4b83ed8f52d7e8c0077e1cde2a9cc13d (patch) | |
tree | 92d9882947a893d0fc47a2a4c07b02cf28659769 | |
parent | 592ff0d07d4cf7349ce3b4b37882632b535d9775 (diff) | |
download | nanopb-c-63f6d65b4b83ed8f52d7e8c0077e1cde2a9cc13d.tar.gz |
Fix possibly unbound variable error
Reaching the error case prints:
UnboundLocalError: cannot access local variable 'nanopb_pb2_mod'
where it is not associated with a value
-rw-r--r-- | generator/proto/__init__.py | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/generator/proto/__init__.py b/generator/proto/__init__.py index a80463e..42c4d0c 100644 --- a/generator/proto/__init__.py +++ b/generator/proto/__init__.py @@ -67,14 +67,11 @@ def load_nanopb_pb2(): # If the value of the $NANOPB_PB2_TEMP_DIR exists as a directory, it is used instead # of system temp folder. - build_error = None - proto_ok = False tmpdir = os.getenv("NANOPB_PB2_TEMP_DIR") temporary_only = (tmpdir is not None) dirname = os.path.dirname(__file__) protosrc = os.path.join(dirname, "nanopb.proto") protodst = os.path.join(dirname, "nanopb_pb2.py") - proto_ok = False if tmpdir is not None and not os.path.isdir(tmpdir): tmpdir = None # Use system-wide temp dir @@ -84,16 +81,14 @@ def load_nanopb_pb2(): # Don't attempt to autogenerate nanopb_pb2.py, external build rules # should have already done so. import nanopb_pb2 as nanopb_pb2_mod - proto_ok = True - elif os.path.isfile(protosrc): + return nanopb_pb2_mod + + if os.path.isfile(protosrc): src_date = os.path.getmtime(protosrc) - if not os.path.isfile(protodst) or os.path.getmtime(protodst) < src_date: - # Outdated, rebuild - proto_ok = False - else: + if os.path.isfile(protodst) and os.path.getmtime(protodst) >= src_date: try: from . import nanopb_pb2 as nanopb_pb2_mod - proto_ok = True + return nanopb_pb2_mod except Exception as e: sys.stderr.write("Failed to import nanopb_pb2.py: " + str(e) + "\n" "Will automatically attempt to rebuild this.\n" @@ -101,34 +96,33 @@ def load_nanopb_pb2(): print_versions() # Try to rebuild into generator/proto directory - if not proto_ok and not temporary_only: - proto_ok = build_nanopb_proto(protosrc, dirname) + if not temporary_only: + build_nanopb_proto(protosrc, dirname) try: from . import nanopb_pb2 as nanopb_pb2_mod + return nanopb_pb2_mod except: sys.stderr.write("Failed to import generator/proto/nanopb_pb2.py:\n") sys.stderr.write(traceback.format_exc() + "\n") # Try to rebuild into temporary directory - if not proto_ok: - with TemporaryDirectory(prefix = 'nanopb-', dir = tmpdir) as protodir: - proto_ok = build_nanopb_proto(protosrc, protodir) + with TemporaryDirectory(prefix = 'nanopb-', dir = tmpdir) as protodir: + build_nanopb_proto(protosrc, protodir) - if protodir not in sys.path: - sys.path.insert(0, protodir) + if protodir not in sys.path: + sys.path.insert(0, protodir) - try: - import nanopb_pb2 as nanopb_pb2_mod - except: - sys.stderr.write("Failed to import %s/nanopb_pb2.py:\n" % protodir) - sys.stderr.write(traceback.format_exc() + "\n") + try: + import nanopb_pb2 as nanopb_pb2_mod + return nanopb_pb2_mod + except: + sys.stderr.write("Failed to import %s/nanopb_pb2.py:\n" % protodir) + sys.stderr.write(traceback.format_exc() + "\n") # If everything fails - if not proto_ok: - sys.stderr.write("\n\nGenerating nanopb_pb2.py failed.\n") - sys.stderr.write("Make sure that a protoc generator is available and matches python-protobuf version.\n") - print_versions() - sys.exit(1) + sys.stderr.write("\n\nGenerating nanopb_pb2.py failed.\n") + sys.stderr.write("Make sure that a protoc generator is available and matches python-protobuf version.\n") + print_versions() + sys.exit(1) - return nanopb_pb2_mod |