From 8d1a60fd33754402a39698f35133fbf4a1a184be Mon Sep 17 00:00:00 2001 From: Dhanush Sridhar Date: Tue, 23 Dec 2025 17:41:43 +0100 Subject: [PATCH] bug fix test failed --- frigate/models.py | 22 +++++++++++----------- frigate/test/http_api/test_http_review.py | 8 ++++++-- frigate/track/object_processing.py | 14 +++++++------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/frigate/models.py b/frigate/models.py index 93f6cb54f..a78d9be02 100644 --- a/frigate/models.py +++ b/frigate/models.py @@ -13,7 +13,7 @@ from peewee import ( from playhouse.sqlite_ext import JSONField -class Event(Model): +class Event(Model): # type: ignore[misc] id = CharField(null=False, primary_key=True, max_length=30) label = CharField(index=True, max_length=20) sub_label = CharField(max_length=100, null=True) @@ -51,7 +51,7 @@ class Event(Model): data = JSONField() # ex: tracked object box, region, etc. -class Timeline(Model): +class Timeline(Model): # type: ignore[misc] timestamp = DateTimeField() camera = CharField(index=True, max_length=20) source = CharField(index=True, max_length=20) # ex: tracked object, audio, external @@ -60,13 +60,13 @@ class Timeline(Model): data = JSONField() # ex: tracked object id, region, box, etc. -class Regions(Model): +class Regions(Model): # type: ignore[misc] camera = CharField(null=False, primary_key=True, max_length=20) grid = JSONField() # json blob of grid last_update = DateTimeField() -class Recordings(Model): +class Recordings(Model): # type: ignore[misc] id = CharField(null=False, primary_key=True, max_length=30) camera = CharField(index=True, max_length=20) path = CharField(unique=True) @@ -80,7 +80,7 @@ class Recordings(Model): regions = IntegerField(null=True) -class Export(Model): +class Export(Model): # type: ignore[misc] id = CharField(null=False, primary_key=True, max_length=30) camera = CharField(index=True, max_length=20) name = CharField(index=True, max_length=100) @@ -90,7 +90,7 @@ class Export(Model): in_progress = BooleanField() -class ReviewSegment(Model): +class ReviewSegment(Model): # type: ignore[misc] id = CharField(null=False, primary_key=True, max_length=30) camera = CharField(index=True, max_length=20) start_time = DateTimeField() @@ -100,7 +100,7 @@ class ReviewSegment(Model): data = JSONField() # additional data about detection like list of labels, zone, areas of significant motion -class UserReviewStatus(Model): +class UserReviewStatus(Model): # type: ignore[misc] user_id = CharField(max_length=30) review_segment = ForeignKeyField(ReviewSegment, backref="user_reviews") has_been_reviewed = BooleanField(default=False) @@ -109,7 +109,7 @@ class UserReviewStatus(Model): indexes = ((("user_id", "review_segment"), True),) -class Previews(Model): +class Previews(Model): # type: ignore[misc] id = CharField(null=False, primary_key=True, max_length=30) camera = CharField(index=True, max_length=20) path = CharField(unique=True) @@ -119,14 +119,14 @@ class Previews(Model): # Used for temporary table in record/cleanup.py -class RecordingsToDelete(Model): +class RecordingsToDelete(Model): # type: ignore[misc] id = CharField(null=False, primary_key=False, max_length=30) class Meta: temporary = True -class User(Model): +class User(Model): # type: ignore[misc] username = CharField(null=False, primary_key=True, max_length=30) role = CharField( max_length=20, @@ -149,7 +149,7 @@ class User(Model): return [cam for cam in allowed if cam in all_camera_names] -class Trigger(Model): +class Trigger(Model): # type: ignore[misc] camera = CharField(max_length=20) name = CharField() type = CharField(max_length=10) diff --git a/frigate/test/http_api/test_http_review.py b/frigate/test/http_api/test_http_review.py index 7c6615bac..ae6cda4fb 100644 --- a/frigate/test/http_api/test_http_review.py +++ b/frigate/test/http_api/test_http_review.py @@ -510,8 +510,12 @@ class TestHttpReview(BaseTestHttp): with AuthTestClient(self.app) as client: ids = ["123456.random", "654321.random"] for id in ids: - super().insert_mock_review_segment(id) - super().insert_mock_recording(id) + # Use the same timestamps for both review segment and recording + # to ensure they overlap so the delete endpoint can find the recording + start_time = datetime.now().timestamp() + end_time = start_time + 20 + super().insert_mock_review_segment(id, start_time=start_time, end_time=end_time) + super().insert_mock_recording(id, start_time=start_time, end_time=end_time) review_ids_in_db_before = self._get_reviews(ids) recordings_ids_in_db_before = self._get_recordings(ids) diff --git a/frigate/track/object_processing.py b/frigate/track/object_processing.py index e0ee74228..d6569d689 100644 --- a/frigate/track/object_processing.py +++ b/frigate/track/object_processing.py @@ -382,12 +382,12 @@ class TrackedObjectProcessor(threading.Thread): tracked_obj.obj_data["sub_label"] = (sub_label, score) if event: - event.sub_label = sub_label # type: ignore[assignment] + event.sub_label = sub_label data = event.data if sub_label is None: - data["sub_label_score"] = None # type: ignore[index] + data["sub_label_score"] = None elif score is not None: - data["sub_label_score"] = score # type: ignore[index] + data["sub_label_score"] = score event.data = data event.save() @@ -416,7 +416,7 @@ class TrackedObjectProcessor(threading.Thread): objects_list = [] sub_labels = set() events = Event.select(Event.id, Event.label, Event.sub_label).where( - Event.id.in_(detection_ids) # type: ignore[call-arg, misc] + Event.id.in_(detection_ids) ) for det_event in events: if det_event.sub_label: @@ -482,11 +482,11 @@ class TrackedObjectProcessor(threading.Thread): if event: data = event.data - data[field_name] = field_value # type: ignore[index] + data[field_name] = field_value if field_value is None: - data[f"{field_name}_score"] = None # type: ignore[index] + data[f"{field_name}_score"] = None elif score is not None: - data[f"{field_name}_score"] = score # type: ignore[index] + data[f"{field_name}_score"] = score event.data = data event.save()