# add the default camera config
data = OrderedDict()
- name = 'Camera' + str(camera_id)
- data['@name'] = name
+ data['@name'] = 'Camera' + str(camera_id)
data['@proto'] = proto
data['videodevice'] = device
# write the configuration to file
set_camera(camera_id, data)
- return camera_id, name, data
+ return camera_id, data
def rem_camera(camera_id):
def _set_default_motion(data):
- data.setdefault('@general_enabled', True)
+ data.setdefault('@enabled', True)
data.setdefault('@show_advanced', False)
data.setdefault('@admin_username', 'admin')
data.setdefault('@admin_password', '')
class ConfigHandler(BaseHandler):
def get(self, camera_id=None, op=None):
+ if camera_id is not None:
+ camera_id = int(camera_id)
+
if op == 'get':
self.get_config(camera_id)
+
+ elif op == 'list':
+ self.list_cameras()
else:
raise HTTPError(400, 'unknown operation')
def post(self, camera_id=None, op=None):
+ if camera_id is not None:
+ camera_id = int(camera_id)
+
if op == 'set':
self.set_config(camera_id)
raise HTTPError(400, 'unknown operation')
def get_config(self, camera_id):
- general_config = config.get_main()
-
if camera_id:
logging.debug('getting config for camera %(id)s' % {'id': camera_id})
- cameras = general_config.get('cameras', {})
- if camera_id not in cameras:
+ camera_ids = config.get_camera_ids()
+ if camera_id not in camera_ids:
raise HTTPError(404, 'no such camera')
self.finish_json(config.get_camera(camera_id))
else:
- logging.debug('getting general config')
+ logging.debug('getting main config')
- self.finish_json(general_config)
+ self.finish_json(config.get_main())
def set_config(self, camera_id):
- general_config = config.get_main()
-
try:
data = json.loads(self.request.body)
if camera_id:
logging.debug('setting config for camera %(id)s' % {'id': camera_id})
- cameras = general_config.get('cameras', {})
- if camera_id not in cameras:
+ camera_ids = config.get_camera_ids()
+ if camera_id not in camera_ids:
raise HTTPError(404, 'no such camera')
config.set_camera(camera_id, data)
else:
- logging.debug('setting general config')
+ logging.debug('setting main config')
try:
data = json.loads(self.request.body)
raise
- general_config.update(data)
- config.set_main(general_config)
+ config.set_main(data)
+
+ def list_cameras(self):
+ logging.debug('listing cameras')
+
+ cameras = []
+ for camera_id in config.get_camera_ids():
+ data = config.get_camera(camera_id)
+ data['@id'] = camera_id
+ cameras.append(data)
+
+ self.finish_json({'cameras': cameras})
def add_camera(self):
logging.debug('adding new camera')
+
+ device = self.get_argument('device')
+ camera_id, data = config.add_camera(device)
+
+ data['@id'] = camera_id
+
+ self.finish_json(data)
def rem_camera(self, camera_id):
logging.debug('removing camera %(id)s' % {'id': camera_id})
+
+ config.rem_camera(camera_id)
class SnapshotHandler(BaseHandler):
application = Application(
[
(r'^/$', handlers.MainHandler),
- (r'^/config/general/(?P<op>set|get)/?$', handlers.ConfigHandler),
+ (r'^/config/main/(?P<op>set|get)/?$', handlers.ConfigHandler),
(r'^/config/(?P<camera_id>\d+)/(?P<op>get|set|rem)/?$', handlers.ConfigHandler),
- (r'^/config/(?P<op>add)/?$', handlers.ConfigHandler),
+ (r'^/config/(?P<op>add|list)/?$', handlers.ConfigHandler),
(r'^/snapshot/(?P<camera_id>\d+)/(?P<op>current|list)/?$', handlers.SnapshotHandler),
(r'^/snapshot/(?P<camera_id>\d+)/(?P<op>download)/(?P<filename>.+)/?$', handlers.SnapshotHandler),
(r'^/movie/(?P<camera_id>\d+)/(?P<op>list)/?$', handlers.MovieHandler),