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"):
@wraps(func)
async def async_wrapper(*args, **kwargs):
self = args[0]
g = func.__globals__
g.update(data=None)
try:
if method == "post":
request_func = requests.post
......@@ -90,21 +92,28 @@ def projector_connection(endpoint: str, purpose: str, method: str = "post"):
except requests.exceptions.ConnectionError:
self.status["connection"] = ConnectionState.disconnected
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 "result" not in data:
if "result" not in d:
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(
f"Requested to {purpose} projector: projctl responded with Error: {data}"
f"Requested to {purpose} projector: projctl responded with Error: {d}"
)
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.update(response=response)
g.update(data=d)
return await func(*args, **kwargs)
return async_wrapper
......@@ -121,7 +130,8 @@ class Projector(mediactl.WithLogger):
@projector_connection(endpoint="status", purpose="get status", method="get")
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["power"] = PowerState(data["power"]["state"])
self.status["shutter"] = ShutterState(data["shutter"]["state"])
......@@ -143,10 +153,10 @@ class Projector(mediactl.WithLogger):
response = await self.update_status()
if response.is_err():
self.log_error(response.err_value)
# Return previous status on error
return self.status
else:
return response.unwrap()
return self.status
@projector_connection(endpoint="power-on", purpose="power on")
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