浏览代码

ensure zones dont have the same name as a camera

Blake Blackshear 4 年之前
父节点
当前提交
117569830d
共有 2 个文件被更改,包括 41 次插入2 次删除
  1. 9 2
      frigate/config.py
  2. 32 0
      frigate/test/test_config.py

+ 9 - 2
frigate/config.py

@@ -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: {
             vol.Required('ffmpeg'): CAMERA_FFMPEG_SCHEMA,
@@ -177,7 +184,7 @@ CAMERAS_SCHEMA = vol.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(

+ 32 - 0
frigate/test/test_config.py

@@ -246,6 +246,38 @@ class TestConfig(TestCase):
             }
         }
         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__':
     main(verbosity=2)