mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-01 04:16:50 +03:00
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
CI / Jetson Jetpack 6 (push) Waiting to run
* Pin ruff * Add python upgrade fixes This enables python upgrade checks in ruff to look for deprecated types and patterns. This namely fixes: - usage of deprecated `Typing` which is now built in - some specific exceptions which are caught and have new aliases Some specific UP checks were also ignored as they are stylistic / unimportant and likely to cause bugs * Remove async blocking calls Use asyncio.to_thread on two remaining blocking calls to fix hanging event thread loop. Enable this specific rule to block it in the future. * Use proper logging mechanism * Correctly format logs * Raise with context When raising an exception include the from context to improve debugging * Cleanup
86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
"""Mask configuration for motion and object masks."""
|
|
|
|
from typing import Any
|
|
|
|
from pydantic import Field, field_serializer
|
|
|
|
from ..base import FrigateBaseModel
|
|
|
|
__all__ = ["MotionMaskConfig", "ObjectMaskConfig"]
|
|
|
|
|
|
class MotionMaskConfig(FrigateBaseModel):
|
|
"""Configuration for a single motion mask."""
|
|
|
|
friendly_name: str | None = Field(
|
|
default=None,
|
|
title="Friendly name",
|
|
description="A friendly name for this motion mask used in the Frigate UI",
|
|
)
|
|
enabled: bool = Field(
|
|
default=True,
|
|
title="Enabled",
|
|
description="Enable or disable this motion mask",
|
|
)
|
|
coordinates: str | list[str] = Field(
|
|
default="",
|
|
title="Coordinates",
|
|
description="Ordered x,y coordinates defining the motion mask polygon used to include/exclude areas.",
|
|
)
|
|
raw_coordinates: str | list[str] = ""
|
|
enabled_in_config: bool | None = Field(
|
|
default=None, title="Keep track of original state of motion mask."
|
|
)
|
|
|
|
def get_formatted_name(self, mask_id: str) -> str:
|
|
"""Return the friendly name if set, otherwise return a formatted version of the mask ID."""
|
|
if self.friendly_name:
|
|
return self.friendly_name
|
|
return mask_id.replace("_", " ").title()
|
|
|
|
@field_serializer("coordinates", when_used="json")
|
|
def serialize_coordinates(self, value: Any, info):
|
|
return self.raw_coordinates if self.raw_coordinates else value
|
|
|
|
@field_serializer("raw_coordinates", when_used="json")
|
|
def serialize_raw_coordinates(self, value: Any, info):
|
|
return None
|
|
|
|
|
|
class ObjectMaskConfig(FrigateBaseModel):
|
|
"""Configuration for a single object mask."""
|
|
|
|
friendly_name: str | None = Field(
|
|
default=None,
|
|
title="Friendly name",
|
|
description="A friendly name for this object mask used in the Frigate UI",
|
|
)
|
|
enabled: bool = Field(
|
|
default=True,
|
|
title="Enabled",
|
|
description="Enable or disable this object mask",
|
|
)
|
|
coordinates: str | list[str] = Field(
|
|
default="",
|
|
title="Coordinates",
|
|
description="Ordered x,y coordinates defining the object mask polygon used to include/exclude areas.",
|
|
)
|
|
raw_coordinates: str | list[str] = ""
|
|
enabled_in_config: bool | None = Field(
|
|
default=None, title="Keep track of original state of object mask."
|
|
)
|
|
|
|
@field_serializer("coordinates", when_used="json")
|
|
def serialize_coordinates(self, value: Any, info):
|
|
return self.raw_coordinates if self.raw_coordinates else value
|
|
|
|
@field_serializer("raw_coordinates", when_used="json")
|
|
def serialize_raw_coordinates(self, value: Any, info):
|
|
return None
|
|
|
|
def get_formatted_name(self, mask_id: str) -> str:
|
|
"""Return the friendly name if set, otherwise return a formatted version of the mask ID."""
|
|
if self.friendly_name:
|
|
return self.friendly_name
|
|
return mask_id.replace("_", " ").title()
|