Skip to content

Commit

Permalink
Improve config validation error messages (#11292)
Browse files Browse the repository at this point in the history
  • Loading branch information
hawkeye217 authored May 8, 2024
1 parent 3ed89ec commit 2be15b6
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 28 deletions.
10 changes: 8 additions & 2 deletions frigate/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from peewee_migrate import Router
from playhouse.sqlite_ext import SqliteExtDatabase
from playhouse.sqliteq import SqliteQueueDatabase
from pydantic import ValidationError

from frigate.api.app import create_app
from frigate.comms.config_updater import ConfigPublisher
Expand Down Expand Up @@ -611,8 +612,13 @@ def start(self) -> None:
print("*************************************************************")
print("*** Config Validation Errors ***")
print("*************************************************************")
print(e)
print(traceback.format_exc())
if isinstance(e, ValidationError):
for error in e.errors():
location = ".".join(str(item) for item in error["loc"])
print(f"{location}: {error['msg']}")
else:
print(e)
print(traceback.format_exc())
print("*************************************************************")
print("*** End Config Validation Errors ***")
print("*************************************************************")
Expand Down
62 changes: 36 additions & 26 deletions frigate/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -555,19 +555,24 @@ def generate_contour(self, frame_shape: tuple[int, int]):
# old native resolution coordinates
if isinstance(coordinates, list):
explicit = any(p.split(",")[0] > "1.0" for p in coordinates)
self._contour = np.array(
[
(
[int(p.split(",")[0]), int(p.split(",")[1])]
if explicit
else [
int(float(p.split(",")[0]) * frame_shape[1]),
int(float(p.split(",")[1]) * frame_shape[0]),
]
)
for p in coordinates
]
)
try:
self._contour = np.array(
[
(
[int(p.split(",")[0]), int(p.split(",")[1])]
if explicit
else [
int(float(p.split(",")[0]) * frame_shape[1]),
int(float(p.split(",")[1]) * frame_shape[0]),
]
)
for p in coordinates
]
)
except ValueError:
raise ValueError(
f"Invalid coordinates found in configuration file. Coordinates must be relative (between 0-1): {coordinates}"
)

if explicit:
self.coordinates = ",".join(
Expand All @@ -579,19 +584,24 @@ def generate_contour(self, frame_shape: tuple[int, int]):
elif isinstance(coordinates, str):
points = coordinates.split(",")
explicit = any(p > "1.0" for p in points)
self._contour = np.array(
[
(
[int(points[i]), int(points[i + 1])]
if explicit
else [
int(float(points[i]) * frame_shape[1]),
int(float(points[i + 1]) * frame_shape[0]),
]
)
for i in range(0, len(points), 2)
]
)
try:
self._contour = np.array(
[
(
[int(points[i]), int(points[i + 1])]
if explicit
else [
int(float(points[i]) * frame_shape[1]),
int(float(points[i + 1]) * frame_shape[0]),
]
)
for i in range(0, len(points), 2)
]
)
except ValueError:
raise ValueError(
f"Invalid coordinates found in configuration file. Coordinates must be relative (between 0-1): {coordinates}"
)

if explicit:
self.coordinates = ",".join(
Expand Down

0 comments on commit 2be15b6

Please sign in to comment.