From 5ab54e9f1feb3f3f710eb5e75ce15fff29eb868d Mon Sep 17 00:00:00 2001 From: Jeremy Fleischman Date: Wed, 29 Dec 2021 01:26:27 -0800 Subject: [PATCH] Do not assume that assertions are enabled Trying to access `self._scenes_cache` only works after `self.scenes()` has been invoked. Normally, the previous line of code (`assert scene_name in self.scenes()`) would cause an invocation of `self.scenes()` (and thereby populate `self._scenes_cache`), but that doesn't actually happen if assertions are disabled! Before this change ================== $ PYTHONOPTIMIZE=1 python -c 'import rxv; rxv.RXV("http://receiver/YamahaRemoteControl/ctrl").scene = "BD/DVD"; print("success!")' Traceback (most recent call last): File "", line 1, in File "/home/jeremy/src/github.com/wuub/rxv/rxv/rxv.py", line 457, in scene scene_number = self._scenes_cache.get(scene_name) AttributeError: 'NoneType' object has no attribute 'get' After this change ================= $ PYTHONOPTIMIZE=1 python -c 'import rxv; rxv.RXV("http://receiver/YamahaRemoteControl/ctrl").scene = "BD/DVD"; print("success!")' success! --- rxv/rxv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rxv/rxv.py b/rxv/rxv.py index cc95100..e10051f 100644 --- a/rxv/rxv.py +++ b/rxv/rxv.py @@ -454,7 +454,7 @@ def scene(self): @scene.setter def scene(self, scene_name): assert scene_name in self.scenes() - scene_number = self._scenes_cache.get(scene_name) + scene_number = self.scenes().get(scene_name) request_text = Scene.format(parameter=scene_number) self._request('PUT', request_text)