From 29cdcc8fcc1ceb4cb121c4142b3abd09445a39ab Mon Sep 17 00:00:00 2001 From: "Javier G. Sogo" Date: Mon, 10 Feb 2020 11:25:15 +0100 Subject: [PATCH] Check python environment (#49) * check python environment * fix protobuf test * list files * try if pip * ensure pip * activate env * exec activate * same in win * source it * print diff * decode output * install in venv * typo * copy things to env * copy the env * use sys.executable * uninstall protobuf after the example * uninstall non interactive * same strategy for Windows --- .ci/run.py | 23 ++++++++++++++++++++-- libraries/protobuf/serialization/build.bat | 8 +++----- libraries/protobuf/serialization/build.sh | 8 +++----- libraries/protobuf/serialization/main.py | 19 +++++++++--------- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/.ci/run.py b/.ci/run.py index c8c74359..bc30be06 100644 --- a/.ci/run.py +++ b/.ci/run.py @@ -122,6 +122,24 @@ def ensure_cache_preserved(): raise Exception("Example modifies cache!") +@contextmanager +def ensure_python_environment_preserved(): + freeze = subprocess.check_output("{} -m pip freeze".format(sys.executable), stderr=subprocess.STDOUT, shell=True).decode() + try: + yield + finally: + freeze_after = subprocess.check_output("{} -m pip freeze".format(sys.executable), stderr=subprocess.STDOUT, shell=True).decode() + if freeze != freeze_after: + writeln_console(">>> " + colorama.Fore.RED + "This example modifies the Python dependencies!") + removed = set(freeze.splitlines()) - set(freeze_after.splitlines()) + added = set(freeze_after.splitlines()) - set(freeze.splitlines()) + for it in removed: + writeln_console("- " + it) + for it in added: + writeln_console("+ " + it) + raise Exception("Example modifies Python environment!") + + def run_scripts(scripts): results = OrderedDict.fromkeys(scripts, '') for script in scripts: @@ -140,8 +158,9 @@ def run_scripts(scripts): except: pass - with ensure_cache_preserved(): - result = subprocess.call(build_script, env=env) + with ensure_python_environment_preserved(): + with ensure_cache_preserved(): + result = subprocess.call(build_script, env=env) results[script] = result if result != 0 and FAIL_FAST: diff --git a/libraries/protobuf/serialization/build.bat b/libraries/protobuf/serialization/build.bat index 71ef47d2..c96334c9 100644 --- a/libraries/protobuf/serialization/build.bat +++ b/libraries/protobuf/serialization/build.bat @@ -1,7 +1,5 @@ @ECHO ON -pip install -U protobuf - RMDIR /Q /S build MKDIR build PUSHD build @@ -11,7 +9,7 @@ cmake .. -G "%CMAKE_GENERATOR%" cmake --build . --config Release bin\sensor.exe -ECHO. 2>__init__.py -POPD -python main.py \ No newline at end of file +pip install protobuf +python ../main.py +pip uninstall -y protobuf diff --git a/libraries/protobuf/serialization/build.sh b/libraries/protobuf/serialization/build.sh index a3b8fc05..c4b20ab5 100755 --- a/libraries/protobuf/serialization/build.sh +++ b/libraries/protobuf/serialization/build.sh @@ -3,8 +3,6 @@ set -e set -x -pip install -U protobuf - rm -rf build mkdir build pushd build @@ -14,7 +12,7 @@ cmake .. -DCMAKE_BUILD_TYPE=Release cmake --build . bin/sensor -touch __init__.py -popd -python main.py +pip install protobuf +python ../main.py +pip uninstall -y protobuf diff --git a/libraries/protobuf/serialization/main.py b/libraries/protobuf/serialization/main.py index bdf1e2fa..936c1cb0 100644 --- a/libraries/protobuf/serialization/main.py +++ b/libraries/protobuf/serialization/main.py @@ -2,13 +2,14 @@ from build.sensor_pb2 import Sensor if __name__ == "__main__": - with open(os.path.join("build", "sensor.data"), 'rb') as file: + with open("sensor.data", 'rb') as file: content = file.read() - print("Retrieve Sensor object from sensor.data") - sensor = Sensor() - sensor.ParseFromString(content) - door = "Open" if sensor.door else "Closed" - print(f"Sensor name: {sensor.name}") - print(f"Sensor temperature: {sensor.temperature}") - print(f"Sensor humidity: {sensor.humidity}") - print(f"Sensor door: {door}") + + print("Retrieve Sensor object from sensor.data") + sensor = Sensor() + sensor.ParseFromString(content) + door = "Open" if sensor.door else "Closed" + print(f"Sensor name: {sensor.name}") + print(f"Sensor temperature: {sensor.temperature}") + print(f"Sensor humidity: {sensor.humidity}") + print(f"Sensor door: {door}")