]> www.vanbest.org Git - motioneye-debian/commitdiff
added a requirements test
authorCalin Crisan <ccrisan@gmail.com>
Sun, 17 Nov 2013 12:35:17 +0000 (14:35 +0200)
committerCalin Crisan <ccrisan@gmail.com>
Sun, 17 Nov 2013 12:35:17 +0000 (14:35 +0200)
doc/todo.txt
motioneye.py
src/mediafiles.py
src/motionctl.py
src/v4l2ctl.py

index 7abc86df2bccb013008ad4edfa0416bfad418461..0a2425708e98304029dcc49e6bfafd8919fa8169 100644 (file)
@@ -12,5 +12,3 @@
 -> chaining two or more remote motionEye cameras breaks updating configuration
 
 -> browser compatibility test
--> requirements test
-   
\ No newline at end of file
index ad5eb9bd112fa32d1d2bd5b66a3ba22016b15f30..adc8bc06a270beedc83b7c1f7ecc9146ddfd9a88 100755 (executable)
@@ -23,7 +23,6 @@ import os.path
 import re
 import signal
 import sys
-import tornado.ioloop
 
 import settings
 
@@ -32,8 +31,67 @@ sys.path.append(os.path.join(settings.PROJECT_PATH, 'src'))
 VERSION = '0.5'
 
 
+def _test_requirements():
+    import mediafiles
+    import motionctl
+    import v4l2ctl
+    
+    try:
+        import tornado  # @UnusedImport
+        tornado = True
+    
+    except ImportError:
+        tornado = False
+
+    try:
+        import jinja2  # @UnusedImport
+        jinja2 = True
+    
+    except ImportError:
+        jinja2 = False
+
+    try:
+        import PIL.Image  # @UnusedImport
+        pil = True
+    
+    except ImportError:
+        pil = False
+
+    ffmpeg = mediafiles.find_ffmpeg() is not None
+    motion = motionctl.find_motion() is not None
+    v4lutils = v4l2ctl.find_v4l2_ctl() is not None
+    
+    ok = True
+    if not tornado:
+        print('please install tornado (python-tornado)')
+        ok = False
+    
+    if not jinja2:
+        print('please install jinja2 (python-jinja2)')
+        ok = False
+
+    if not pil:
+        print('please install PIL (python-imaging)')
+        ok = False
+
+    if not ffmpeg:
+        print('please install ffmpeg')
+        ok = False
+
+    if not motion:
+        print('please install motion')
+        ok = False
+
+    if not v4lutils:
+        print('please install v4l-utils')
+        ok = False
+
+    return ok
+
+        
 def _configure_signals():
     def bye_handler(signal, frame):
+        import tornado.ioloop
         import motionctl
         
         logging.info('interrupt signal received, shutting down...')
@@ -174,6 +232,7 @@ def _do_thumbnails():
 
 
 def _start_server():
+    import tornado.ioloop
     import server
 
     server.application.listen(settings.PORT, settings.LISTEN)
@@ -183,6 +242,7 @@ def _start_server():
 
 
 def _start_motion():
+    import tornado.ioloop
     import config
     import motionctl
 
@@ -207,6 +267,7 @@ def _start_motion():
 
 
 def _start_cleanup():
+    import tornado.ioloop
     import mediafiles
 
     ioloop = tornado.ioloop.IOLoop.instance()
@@ -229,6 +290,7 @@ def _start_cleanup():
 
 
 def _start_movie_thumbnailer():
+    import tornado.ioloop
     import mediafiles
 
     ioloop = tornado.ioloop.IOLoop.instance()
@@ -250,6 +312,9 @@ def _start_movie_thumbnailer():
 
 
 if __name__ == '__main__':
+    if not _test_requirements():
+        sys.exit(01)
+    
     cmd = _configure_settings()
     _configure_signals()
     _configure_logging()
index d5d73ffc14937b7f0d47297c74963bd0a49e6474..4392d16b9bbbf7361da431284b5219f4c6c41edd 100644 (file)
@@ -84,6 +84,14 @@ def _remove_older_files(dir, moment, exts):
             os.remove(full_path)
 
 
+def find_ffmpeg():
+    try:
+        return subprocess.check_output('which ffmpeg', shell=True).strip()
+    
+    except subprocess.CalledProcessError: # not found
+        return None
+
+
 def cleanup_media(media_type):
     logging.debug('cleaning up %(media_type)ss...' % {'media_type': media_type})
     
index 3cd3f24285137618c2c309c19f14167317c9616a..b7aeb13685c288671846396b2d559a5437da9ee0 100644 (file)
@@ -25,7 +25,7 @@ import config
 import settings
 
 
-def find_program():
+def find_motion():
     try:
         return subprocess.check_output('which motion', shell=True).strip()
     
@@ -37,7 +37,7 @@ def start():
     if running():
         raise Exception('motion is already running')
  
-    program = find_program()
+    program = find_motion()
     if not program:
         raise Exception('motion executable could not be found')
     
index 7671d9e8a52dbbbb9a56e6441246ffa1efc37301..b17a20d826a0fc1a86d47ac9f92fd0fcb0edad79 100644 (file)
@@ -25,6 +25,14 @@ _ctrls_cache = {}
 _ctrl_values_cache = {}
 
 
+def find_v4l2_ctl():
+    try:
+        return subprocess.check_output('which v4l2-ctl', shell=True).strip()
+    
+    except subprocess.CalledProcessError: # not found
+        return None
+
+
 def list_devices():
     global _resolutions_cache