Skip to content

Commit

Permalink
Fixup calls to internal_error
Browse files Browse the repository at this point in the history
Harden segment handling for our of range, self heal
  • Loading branch information
bigredfrog committed Feb 25, 2024
1 parent 9d74d16 commit 21e8dc1
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 24 deletions.
12 changes: 4 additions & 8 deletions ledfx/api/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,9 @@ async def post(self, request: web.Request) -> web.Response:
try:
config = migrate_config(config)
except Exception as e:
_LOGGER.exception(
f"Failed to migrate import config to the new standard: {e}"
)
return await self.internal_error(
"error",
f"Failed to migrate import config to the new standard: {e}",
)
msg = f"Failed to migrate import config to the new standard: {e}"
_LOGGER.exception(msg)
return await self.internal_error(msg, "error")

# if we got this far, we are happy with and committing to the import config
# so backup the old one
Expand Down Expand Up @@ -171,7 +167,7 @@ async def post(self, request: web.Request) -> web.Response:
except vol.MultipleInvalid as msg:
error_message = f"Error loading config: {msg}"
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

async def put(self, request: web.Request) -> web.Response:
"""
Expand Down
4 changes: 2 additions & 2 deletions ledfx/api/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ async def put(self, device_id, request) -> web.Response:
except (voluptuous.Error, ValueError) as msg:
error_message = f"Error updating device {device_id}: {msg}"
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")
# Update and save the configuration
for device in self._ledfx.config["devices"]:
if device["id"] == device_id:
Expand Down Expand Up @@ -125,7 +125,7 @@ async def post(self, device_id, request) -> web.Response:
except (voluptuous.Error, ValueError) as msg:
error_message = f"Error creating device {device_id}: {msg}"
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

device.activate()
return await self.bare_request_success(response)
Expand Down
2 changes: 1 addition & 1 deletion ledfx/api/find_launchpad.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ async def get(self) -> web.Response:
except Exception as msg:
error_message = f"Error checking for launchpad: {msg}"
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

if found is None:
_LOGGER.warning("No launchpad found")
Expand Down
4 changes: 2 additions & 2 deletions ledfx/api/get_nanoleaf_token.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@ async def post(self, request: web.Request) -> web.Response:
"Nanoleaf did not return a token: is it in pairing mode?"
)
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")
data = response.json()
except requests.exceptions.RequestException as msg:
error_message = (
f"Error getting Nanoleaf token from {ip}:{port}: {msg}"
)
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")
return await self.bare_request_success(data)
4 changes: 2 additions & 2 deletions ledfx/api/virtual.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ async def put(self, virtual_id, request) -> web.Response:
except ValueError as msg:
error_message = f"Unable to set virtual {virtual.id} status: {msg}"
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

# Update ledfx's config
for idx, item in enumerate(self._ledfx.config["virtuals"]):
Expand Down Expand Up @@ -121,7 +121,7 @@ async def post(self, virtual_id, request) -> web.Response:
)
_LOGGER.warning(error_message)
virtual.update_segments(old_segments)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

# Update ledfx's config
for idx, item in enumerate(self._ledfx.config["virtuals"]):
Expand Down
4 changes: 2 additions & 2 deletions ledfx/api/virtual_effects.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ async def put(self, virtual_id, request) -> web.Response:
except (ValueError, RuntimeError) as msg:
error_message = f"Unable to set effect: {msg}"
_LOGGER.warning(error_message)
return await self.internal_error("warning", error_message)
return await self.internal_error(error_message, "warning")

update_effect_config(self._ledfx.config, virtual_id, effect)

Expand Down Expand Up @@ -257,7 +257,7 @@ async def post(self, virtual_id, request) -> web.Response:
f"Unable to set effect {effect} on {virtual_id}: {msg}"
)
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

update_effect_config(self._ledfx.config, virtual_id, effect)

Expand Down
2 changes: 1 addition & 1 deletion ledfx/api/virtual_presets.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ async def put(self, virtual_id, request) -> web.Response:
f"Unable to set effect on virtual {virtual.id}: {msg}"
)
_LOGGER.warning(error_message)
return await self.internal_error("error", error_message)
return await self.internal_error(error_message, "error")

update_effect_config(self._ledfx.config, virtual_id, effect)

Expand Down
24 changes: 18 additions & 6 deletions ledfx/virtuals.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,13 +211,25 @@ def validate_segment(self, segment):
valid = False

if (
(start_pixel < 0)
or (end_pixel < 0)
or (start_pixel > end_pixel)
or (end_pixel >= device.pixel_count)
start_pixel < 0
or end_pixel < 0
or start_pixel > end_pixel
or start_pixel >= device.pixel_count
or end_pixel >= device.pixel_count
):
msg = f"Invalid segment pixels in Virtual '{self.name}': segment('{device.name}' ({start_pixel}, {end_pixel})) valid pixels between (0, {device.pixel_count - 1})"
valid = False
_LOGGER.warning(f"Invalid segment pixels in Virtual '{self.name}': segment('{device.name}' ({start_pixel}, {end_pixel})) valid pixels between (0, {device.pixel_count - 1})")
if start_pixel < 0:
start_pixel = 0
if end_pixel < 0:
end_pixel = 0
if start_pixel > end_pixel:
start_pixel = end_pixel
if start_pixel >= device.pixel_count:
start_pixel = device.pixel_count - 1
if end_pixel >= device.pixel_count:
end_pixel = device.pixel_count - 1
segment = [device_id, start_pixel, end_pixel, invert]
_LOGGER.warning(f"Fixed to {segment}")

if not valid:
_LOGGER.error(msg)
Expand Down

0 comments on commit 21e8dc1

Please sign in to comment.