mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-09-29 03:16:51 +03:00
CI / AMD64 Build (push) Canceled after 0s
CI / ARM Build (push) Canceled after 0s
CI / Jetson Jetpack 6 (push) Canceled after 0s
CI / AMD64 Extra Build (push) Canceled after 0s
CI / ARM Extra Build (push) Canceled after 0s
CI / Synaptics Build (push) Canceled after 0s
CI / Assemble and push default build (push) Canceled after 0s
* Categorize manual events as alerts when their label is an alert label * tweak docs
155 lines
3.8 KiB
Python
155 lines
3.8 KiB
Python
"""Tests for manual event severity categorization.
|
|
|
|
Regression coverage for manual events created via the events API being
|
|
categorized as detections when their label appears in both the alerts and
|
|
detections label lists. Alert labels must win, matching how tracked objects
|
|
are categorized, and labels in neither list must default to alerts so the
|
|
historical behavior of the API is preserved.
|
|
"""
|
|
|
|
import unittest
|
|
|
|
from frigate.config import FrigateConfig
|
|
from frigate.review.maintainer import ReviewSegmentMaintainer
|
|
from frigate.review.types import SeverityEnum
|
|
|
|
BASE_CONFIG = """
|
|
mqtt:
|
|
enabled: False
|
|
cameras:
|
|
front_door:
|
|
ffmpeg:
|
|
inputs:
|
|
- path: rtsp://10.0.0.1:554/video
|
|
roles:
|
|
- detect
|
|
detect:
|
|
width: 1920
|
|
height: 1080
|
|
fps: 5
|
|
%s
|
|
"""
|
|
|
|
|
|
class TestManualEventSeverity(unittest.TestCase):
|
|
def _make_maintainer(self, review_config: str = "") -> ReviewSegmentMaintainer:
|
|
"""Build a maintainer without invoking __init__ (avoids needing ZMQ
|
|
sockets, shared memory, and clip dirs). Only the config is read when
|
|
categorizing a manual event label."""
|
|
maintainer = ReviewSegmentMaintainer.__new__(ReviewSegmentMaintainer)
|
|
maintainer.config = FrigateConfig.parse_yaml(BASE_CONFIG % review_config)
|
|
return maintainer
|
|
|
|
def test_defaults_to_alert(self) -> None:
|
|
maintainer = self._make_maintainer()
|
|
|
|
self.assertEqual(
|
|
maintainer.get_manual_event_severity("front_door", "person"),
|
|
SeverityEnum.alert,
|
|
)
|
|
|
|
def test_unlisted_label_defaults_to_alert(self) -> None:
|
|
maintainer = self._make_maintainer(
|
|
"""
|
|
review:
|
|
detections:
|
|
labels:
|
|
- dog
|
|
"""
|
|
)
|
|
|
|
self.assertEqual(
|
|
maintainer.get_manual_event_severity("front_door", "pir_sensor"),
|
|
SeverityEnum.alert,
|
|
)
|
|
|
|
def test_detection_label_is_detection(self) -> None:
|
|
maintainer = self._make_maintainer(
|
|
"""
|
|
review:
|
|
alerts:
|
|
labels:
|
|
- person
|
|
detections:
|
|
labels:
|
|
- pir_sensor
|
|
"""
|
|
)
|
|
|
|
self.assertEqual(
|
|
maintainer.get_manual_event_severity("front_door", "pir_sensor"),
|
|
SeverityEnum.detection,
|
|
)
|
|
|
|
def test_alert_label_wins_over_detection_label(self) -> None:
|
|
maintainer = self._make_maintainer(
|
|
"""
|
|
review:
|
|
alerts:
|
|
labels:
|
|
- person
|
|
detections:
|
|
labels:
|
|
- person
|
|
- dog
|
|
"""
|
|
)
|
|
|
|
self.assertEqual(
|
|
maintainer.get_manual_event_severity("front_door", "person"),
|
|
SeverityEnum.alert,
|
|
)
|
|
|
|
def test_sub_label_is_stripped_before_categorizing(self) -> None:
|
|
maintainer = self._make_maintainer(
|
|
"""
|
|
review:
|
|
alerts:
|
|
labels:
|
|
- person
|
|
detections:
|
|
labels:
|
|
- person
|
|
"""
|
|
)
|
|
|
|
self.assertEqual(
|
|
maintainer.get_manual_event_severity("front_door", "person: Bob"),
|
|
SeverityEnum.alert,
|
|
)
|
|
|
|
def test_alert_label_is_detection_when_alerts_disabled(self) -> None:
|
|
maintainer = self._make_maintainer(
|
|
"""
|
|
review:
|
|
alerts:
|
|
enabled: False
|
|
labels:
|
|
- person
|
|
detections:
|
|
labels:
|
|
- person
|
|
"""
|
|
)
|
|
|
|
self.assertEqual(
|
|
maintainer.get_manual_event_severity("front_door", "person"),
|
|
SeverityEnum.detection,
|
|
)
|
|
|
|
def test_no_severity_when_alerts_disabled_and_label_not_a_detection(self) -> None:
|
|
maintainer = self._make_maintainer(
|
|
"""
|
|
review:
|
|
alerts:
|
|
enabled: False
|
|
detections:
|
|
labels:
|
|
- dog
|
|
"""
|
|
)
|
|
|
|
self.assertIsNone(
|
|
maintainer.get_manual_event_severity("front_door", "pir_sensor")
|
|
)
|