Skip to content
Snippets Groups Projects
Commit 9eb6726e authored by David Huss's avatar David Huss :speech_balloon:
Browse files

Fix error in projector_connection decorator

parent b070b2e0
No related branches found
No related tags found
No related merge requests found
...@@ -69,6 +69,8 @@ def projector_connection(endpoint: str, purpose: str, method: str = "post"): ...@@ -69,6 +69,8 @@ def projector_connection(endpoint: str, purpose: str, method: str = "post"):
@wraps(func) @wraps(func)
async def async_wrapper(*args, **kwargs): async def async_wrapper(*args, **kwargs):
self = args[0] self = args[0]
g = func.__globals__
g.update(data=None)
try: try:
if method == "post": if method == "post":
request_func = requests.post request_func = requests.post
...@@ -90,21 +92,28 @@ def projector_connection(endpoint: str, purpose: str, method: str = "post"): ...@@ -90,21 +92,28 @@ def projector_connection(endpoint: str, purpose: str, method: str = "post"):
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
self.status["connection"] = ConnectionState.disconnected self.status["connection"] = ConnectionState.disconnected
return Err(f"Request to {purpose} projector: Max tries exceeded") return Err(f"Request to {purpose} projector: Max tries exceeded")
data = response.json() try:
d = response.json()
except requests.exceptions.JSONDecodeError as e:
print(f"When sending a {method}-request to {self.addr}/{endpoint} error just happened:")
print(f" {e}")
print(f" status: {response.status_code}")
print(repr(response))
d = {}
if method == "post": if method == "post":
if "result" not in data: if "result" not in d:
return Err( return Err(
f"Requested to {purpose} projector: No result in response: {data}" f"Requested to {purpose} projector: No result in response: {d}"
) )
elif data["result"] != "ok": elif d["result"] != "ok":
return Err( return Err(
f"Requested to {purpose} projector: projctl responded with Error: {data}" f"Requested to {purpose} projector: projctl responded with Error: {d}"
) )
self.log_info( self.log_info(
f"Got a response, when {purpose} projector: {response.status_code}: {data}" f"Got a response, when {purpose} projector: {response.status_code}: {d}"
) )
g = func.__globals__ g = func.__globals__
g.update(response=response) g.update(data=d)
return await func(*args, **kwargs) return await func(*args, **kwargs)
return async_wrapper return async_wrapper
...@@ -121,7 +130,8 @@ class Projector(mediactl.WithLogger): ...@@ -121,7 +130,8 @@ class Projector(mediactl.WithLogger):
@projector_connection(endpoint="status", purpose="get status", method="get") @projector_connection(endpoint="status", purpose="get status", method="get")
async def update_status(self) -> Result[dict, str]: async def update_status(self) -> Result[dict, str]:
data = response.json() # noqa: F821 variable "response" set by decorator global data
data = data # noqa: F821 variable "data" set by decorator
self.status["connection"] = ConnectionState.connected self.status["connection"] = ConnectionState.connected
self.status["power"] = PowerState(data["power"]["state"]) self.status["power"] = PowerState(data["power"]["state"])
self.status["shutter"] = ShutterState(data["shutter"]["state"]) self.status["shutter"] = ShutterState(data["shutter"]["state"])
...@@ -143,10 +153,10 @@ class Projector(mediactl.WithLogger): ...@@ -143,10 +153,10 @@ class Projector(mediactl.WithLogger):
response = await self.update_status() response = await self.update_status()
if response.is_err(): if response.is_err():
self.log_error(response.err_value) self.log_error(response.err_value)
# Return previous status on error
return self.status return self.status
else: else:
return response.unwrap() return response.unwrap()
return self.status
@projector_connection(endpoint="power-on", purpose="power on") @projector_connection(endpoint="power-on", purpose="power on")
async def power_on(self) -> Result[None, str]: async def power_on(self) -> Result[None, str]:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment