From 278c839b5501b84cc695844ba93eda97cce4e400 Mon Sep 17 00:00:00 2001
From: Mattias Andrée <maandree@operamail.com>
Date: Wed, 2 Apr 2014 23:20:12 +0200
Subject: ability to function without argparser
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Mattias Andrée <maandree@operamail.com>
---
 src/__main__.py | 129 +++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 77 insertions(+), 52 deletions(-)

(limited to 'src')

diff --git a/src/__main__.py b/src/__main__.py
index 22b4569..1e029a3 100755
--- a/src/__main__.py
+++ b/src/__main__.py
@@ -22,7 +22,14 @@ import signal
 import datetime
 import threading
 
-from argparser import *
+have_argparser = True
+try:
+    from argparser import *
+except:
+    sys.stderr.buffer.write('Warning: failed to load module \'argparser\',\n'.encode('utf-8'))
+    sys.stderr.buffer.write('         command line options will not be parsed.\n'.encode('utf-8'))
+    sys.stderr.buffer.flush()
+    have_argparser = False
 
 
 
@@ -522,57 +529,75 @@ def continuous_run():
 
 
 ## Read command line arguments
-# Create parser
-parser = ArgParser('Colour temperature controller',
-                   sys.argv[0] + ' [options] [-- configuration-options]',
-                   'Blueshift adjusts the colour temperature of your\n'
-                   'monitor according to brightness outside to reduce\n'
-                   'eye strain and make it easier to fall asleep when\n'
-                   'going to bed. It can also be used to increase the\n'
-                   'colour temperature and make the monitor bluer,\n'
-                   'this helps you focus on your work.',
-                   None, True, ArgParser.standard_abbreviations())
-
-# Populate parser with possible options
-dn = '\nUse twice or daytime and nighttime respectively'
-parser.add_argumented(['-c', '--configurations'], 0, 'FILE', 'Select configuration file')
-parser.add_argumentless(['-p', '--panic-gate', '--panicgate'], 0, 'Skip transition into initial settings')
-parser.add_argumented(['-g', '--gamma'], 0, 'RGB|R:G:B', 'Set gamma correction' + dn)
-parser.add_argumented(['-b', '--brightness'], 0, 'RGB|R:G:B', 'Set brightness using sRGB' + dn)
-parser.add_argumented(['+b', '++brightness'], 0, 'Y', 'Set brightness using CIE xyY' + dn)
-parser.add_argumented(['-t', '--temperature'], 0, 'TEMP', 'Set colour temperature' + dn)
-parser.add_argumented(['+t', '++temperature'], 0, 'TEMP', 'Set colour temperature using CIE xyY' + dn)
-parser.add_argumented(['-l', '--location'], 0, 'LAT:LON', 'Select your GPS location\n'
-                                                          'Measured in degrees, negative for south or west')
-parser.add_argumentless(['-r', '--reset'], 0, 'Reset to default settings')
-parser.add_argumented(['-o', '--output', '--crtc'], 0, 'CRTCS',
-                      'Select CRTC to apply changes to\nComma separated or multiple options\n'
-                      'It is best to start one instance per monitor with colour calibration')
-parser.add_argumentless(['-h', '-?', '--help'], 0, 'Print this help information')
-parser.add_argumentless(['-C', '--copying', '--copyright'], 0, 'Print copyright information')
-parser.add_argumentless(['-W', '--warranty'], 0, 'Print non-warranty information')
-parser.add_argumentless(['-v', '--version'], 0, 'Print program name and version')
-
-# Parse options
-parser.parse()
-parser.support_alternatives()
-
-# Check for no-action options
-if parser.opts['--help'] is not None:
-    parser.help()
-    sys.exit(0)
-elif parser.opts['--copyright'] is not None:
-    print(copyright[1 : -1])
-    sys.exit(0)
-elif parser.opts['--warranty'] is not None:
-    print('This program is distributed in the hope that it will be useful,')
-    print('but WITHOUT ANY WARRANTY; without even the implied warranty of')
-    print('MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the')
-    print('GNU Affero General Public License for more details.')
-    sys.exit(0)
-elif parser.opts['--version'] is not None:
-    print('%s %s' % (PROGRAM_NAME, PROGRAM_VERSION))
-    sys.exit(0)
+parser = None
+if have_argparser:
+    # Create parser
+    parser = ArgParser('Colour temperature controller',
+                       sys.argv[0] + ' [options] [-- configuration-options]',
+                       'Blueshift adjusts the colour temperature of your\n'
+                       'monitor according to brightness outside to reduce\n'
+                       'eye strain and make it easier to fall asleep when\n'
+                       'going to bed. It can also be used to increase the\n'
+                       'colour temperature and make the monitor bluer,\n'
+                       'this helps you focus on your work.',
+                       None, True, ArgParser.standard_abbreviations())
+    
+    # Populate parser with possible options
+    dn = '\nUse twice or daytime and nighttime respectively'
+    parser.add_argumented(['-c', '--configurations'], 0, 'FILE', 'Select configuration file')
+    parser.add_argumentless(['-p', '--panic-gate', '--panicgate'], 0, 'Skip transition into initial settings')
+    parser.add_argumented(['-g', '--gamma'], 0, 'RGB|R:G:B', 'Set gamma correction' + dn)
+    parser.add_argumented(['-b', '--brightness'], 0, 'RGB|R:G:B', 'Set brightness using sRGB' + dn)
+    parser.add_argumented(['+b', '++brightness'], 0, 'Y', 'Set brightness using CIE xyY' + dn)
+    parser.add_argumented(['-t', '--temperature'], 0, 'TEMP', 'Set colour temperature' + dn)
+    parser.add_argumented(['+t', '++temperature'], 0, 'TEMP', 'Set colour temperature using CIE xyY' + dn)
+    parser.add_argumented(['-l', '--location'], 0, 'LAT:LON', 'Select your GPS location\n'
+                                                              'Measured in degrees, negative for south or west')
+    parser.add_argumentless(['-r', '--reset'], 0, 'Reset to default settings')
+    parser.add_argumented(['-o', '--output', '--crtc'], 0, 'CRTCS',
+                          'Select CRTC to apply changes to\nComma separated or multiple options\n'
+                          'It is best to start one instance per monitor with colour calibration')
+    parser.add_argumentless(['-h', '-?', '--help'], 0, 'Print this help information')
+    parser.add_argumentless(['-C', '--copying', '--copyright'], 0, 'Print copyright information')
+    parser.add_argumentless(['-W', '--warranty'], 0, 'Print non-warranty information')
+    parser.add_argumentless(['-v', '--version'], 0, 'Print program name and version')
+    
+    # Parse options
+    parser.parse()
+    parser.support_alternatives()
+
+    # Check for no-action options
+    if parser.opts['--help'] is not None:
+        parser.help()
+        sys.exit(0)
+    elif parser.opts['--copyright'] is not None:
+        print(copyright[1 : -1])
+        sys.exit(0)
+    elif parser.opts['--warranty'] is not None:
+        print('This program is distributed in the hope that it will be useful,')
+        print('but WITHOUT ANY WARRANTY; without even the implied warranty of')
+        print('MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the')
+        print('GNU Affero General Public License for more details.')
+        sys.exit(0)
+    elif parser.opts['--version'] is not None:
+        print('%s %s' % (PROGRAM_NAME, PROGRAM_VERSION))
+        sys.exit(0)
+else:
+    # Argparser was not available
+    class FauxParser:
+        '''
+        Just a pretend-instance of an argparser parser
+        '''
+        def __init__(self):
+            '''
+            Constructor
+            '''
+            self.opts = {}
+            self.files = []
+            for o in ('--configurations', '--panicgate', '--reset', '--location', '--gamma',
+                      '--brightness', '++brightness', '--temperature', '++temperature', '--output'):
+                self.opts[o] = None
+    parser = FauxParser()
 
 # Get used options
 a = lambda opt : opt[0] if opt is not None else None
-- 
cgit v1.2.3-70-g09d2