remove side effects from password substitution

This commit is contained in:
Jason Hunter 2021-06-24 16:53:01 -04:00 committed by Blake Blackshear
parent 8d01cc4807
commit ab93cae4c0

View File

@ -58,7 +58,7 @@ class MqttConfig(BaseModel):
def validate_password(cls, v, values): def validate_password(cls, v, values):
if (v is None) != (values["user"] is None): if (v is None) != (values["user"] is None):
raise ValueError("Password must be provided with username.") raise ValueError("Password must be provided with username.")
return v if v is None else v.format(**FRIGATE_ENV_VARS) return v
class RetainConfig(BaseModel): class RetainConfig(BaseModel):
@ -328,10 +328,6 @@ class CameraInput(BaseModel):
default_factory=list, title="FFmpeg input arguments." default_factory=list, title="FFmpeg input arguments."
) )
@validator("path")
def sub_env_vars(cls, v):
return v.format(**FRIGATE_ENV_VARS)
class CameraFfmpegConfig(FfmpegConfig): class CameraFfmpegConfig(FfmpegConfig):
inputs: List[CameraInput] = Field(title="Camera inputs.") inputs: List[CameraInput] = Field(title="Camera inputs.")
@ -665,6 +661,12 @@ class FrigateConfig(BaseModel):
def runtime_config(self) -> FrigateConfig: def runtime_config(self) -> FrigateConfig:
"""Merge camera config with globals.""" """Merge camera config with globals."""
config = self.copy(deep=True) config = self.copy(deep=True)
# MQTT password substitution
if config.mqtt.password:
config.mqtt.password = config.mqtt.password.format(**FRIGATE_ENV_VARS)
# Global config to propegate down to camera level
global_config = config.dict( global_config = config.dict(
include={ include={
"clips": {"retain"}, "clips": {"retain"},
@ -682,6 +684,10 @@ class FrigateConfig(BaseModel):
merged_config = deep_merge(camera.dict(exclude_unset=True), global_config) merged_config = deep_merge(camera.dict(exclude_unset=True), global_config)
camera_config = CameraConfig.parse_obj({"name": name, **merged_config}) camera_config = CameraConfig.parse_obj({"name": name, **merged_config})
# FFMPEG input substitution
for input in camera_config.ffmpeg.inputs:
input.path = input.path.format(**FRIGATE_ENV_VARS)
# Add default filters # Add default filters
object_keys = camera_config.objects.track object_keys = camera_config.objects.track
if camera_config.objects.filters is None: if camera_config.objects.filters is None: