From 0e87dac6469a6d990100cfe31a4e531b96be64b9 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 29 Feb 2024 07:11:23 -0700 Subject: [PATCH] Fix serialization issues --- frigate/config.py | 16 +++++++++++++++- frigate/http.py | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/frigate/config.py b/frigate/config.py index ca5dd4d12..f4d0dc39e 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -6,7 +6,7 @@ import logging import os from enum import Enum from pathlib import Path -from typing import Dict, List, Optional, Tuple, Union +from typing import Any, Dict, List, Optional, Tuple, Union import matplotlib.pyplot as plt import numpy as np @@ -15,6 +15,7 @@ from pydantic import ( ConfigDict, Field, TypeAdapter, + field_serializer, field_validator, validator, ) @@ -336,7 +337,11 @@ class MotionConfig(FrigateBaseModel): enabled_in_config: Optional[bool] = Field( None, title="Keep track of original state of motion detection." ) + raw_mask: Union[str, List[str]] = "" + @field_serializer("mask", when_used="json") + def serialize_mask(self, value: Any, info): + return self.raw_mask class RuntimeMotionConfig(MotionConfig): raw_mask: Union[str, List[str]] = "" @@ -364,6 +369,10 @@ class RuntimeMotionConfig(MotionConfig): ret.pop("raw_mask") return ret + @field_serializer("mask", when_used="json") + def serialize_mask(self, value: Any, info): + return self.raw_mask + model_config = ConfigDict(arbitrary_types_allowed=True, extra="ignore") @@ -443,6 +452,11 @@ class FilterConfig(FrigateBaseModel): None, title="Detection area polygon mask for this filter configuration.", ) + raw_mask: Union[str, List[str]] = "" + + @field_serializer("mask", when_used="json") + def serialize_mask(self, value: Any, info): + return self.raw_mask class AudioFilterConfig(FrigateBaseModel): diff --git a/frigate/http.py b/frigate/http.py index 0bda412f6..fcf9a4927 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -1384,7 +1384,7 @@ def end_event(event_id): @bp.route("/config") def config(): - config = current_app.frigate_config.model_dump() + config = current_app.frigate_config.model_dump(mode='json') # remove the mqtt password config["mqtt"].pop("password", None)