aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter De Gendt <pieter.degendt@basalte.be>2024-05-06 09:09:31 +0200
committerPetteri Aimonen <jpa@github.mail.kapsi.fi>2024-05-06 16:48:23 +0300
commit63f6d65b4b83ed8f52d7e8c0077e1cde2a9cc13d (patch)
tree92d9882947a893d0fc47a2a4c07b02cf28659769
parent592ff0d07d4cf7349ce3b4b37882632b535d9775 (diff)
downloadnanopb-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__.py50
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