ensure zones dont have the same name as a camera

This commit is contained in:
Blake Blackshear 2020-11-29 19:00:46 -06:00
parent d62aec7287
commit 117569830d
2 changed files with 41 additions and 2 deletions

View File

@ -144,7 +144,14 @@ CAMERA_FFMPEG_SCHEMA = vol.Schema(
} }
) )
CAMERAS_SCHEMA = vol.Schema( def ensure_zones_and_cameras_have_different_names(cameras):
zones = [zone for camera in cameras.values() for zone in camera['zones'].keys()]
for zone in zones:
if zone in cameras.keys():
raise ValueError
return cameras
CAMERAS_SCHEMA = vol.Schema(vol.All(
{ {
str: { str: {
vol.Required('ffmpeg'): CAMERA_FFMPEG_SCHEMA, vol.Required('ffmpeg'): CAMERA_FFMPEG_SCHEMA,
@ -177,7 +184,7 @@ CAMERAS_SCHEMA = vol.Schema(
}, },
'objects': OBJECTS_SCHEMA 'objects': OBJECTS_SCHEMA
} }
} }, vol.Msg(ensure_zones_and_cameras_have_different_names, msg='Zones cannot share names with cameras'))
) )
FRIGATE_CONFIG_SCHEMA = vol.Schema( FRIGATE_CONFIG_SCHEMA = vol.Schema(

View File

@ -247,5 +247,37 @@ class TestConfig(TestCase):
} }
self.assertRaises(vol.MultipleInvalid, lambda: FrigateConfig(config=config)) self.assertRaises(vol.MultipleInvalid, lambda: FrigateConfig(config=config))
def test_zone_matching_camera_name_throws_error(self):
config = {
'mqtt': {
'host': 'mqtt'
},
'save_clips': {
'retain': {
'default': 20,
'objects': {
'person': 30
}
}
},
'cameras': {
'back': {
'ffmpeg': {
'inputs': [
{ 'path': 'rtsp://10.0.0.1:554/video', 'roles': ['detect'] }
]
},
'height': 1080,
'width': 1920,
'zones': {
'back': {
'coordinates': '1,1,1,1,1,1'
}
}
}
}
}
self.assertRaises(vol.MultipleInvalid, lambda: FrigateConfig(config=config))
if __name__ == '__main__': if __name__ == '__main__':
main(verbosity=2) main(verbosity=2)