From: Mark Wooding Date: Sun, 5 Apr 2015 21:40:15 +0000 (+0100) Subject: chpwd, config.py: Don't fail if there's no configuration file. X-Git-Tag: 1.2.0~17 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/chopwood/commitdiff_plain/9fc9351d43236aeca3910b977eef0cdf355a085e chpwd, config.py: Don't fail if there's no configuration file. Things won't work well, but at least the initial make won't fail. --- diff --git a/chpwd b/chpwd index 07fe830..dc054b4 100755 --- a/chpwd +++ b/chpwd @@ -229,13 +229,13 @@ if __name__ == '__main__': ## `USERV_USER' environment variable. with cli_errors(): - args = parse_options() - if not args or args[0] != 'userv': - raise U.ExpectedError, (500, 'missing userv token') - CONF.loadconfig(OPTS.config) - try: CU.set_user(ENV['USERV_USER']) - except KeyError: raise ExpectedError, (500, 'USERV_USER unset') with OUT.redirect_to(O.FileOutput()): + args = parse_options() + if not args or args[0] != 'userv': + raise U.ExpectedError, (500, 'missing userv token') + CONF.loadconfig(OPTS.config) + try: CU.set_user(ENV['USERV_USER']) + except KeyError: raise ExpectedError, (500, 'USERV_USER unset') OPTPARSE.dispatch('userv', [ENV['USERV_SERVICE']] + args[1:]) elif 'SSH_ORIGINAL_COMMAND' in ENV: @@ -256,9 +256,9 @@ if __name__ == '__main__': ## of telling us that this is a user request, so treat it like Userv. with cli_errors(): - cmd = ssh_setup() - CU.set_user(ENV['CHPWD_SSH_USER']) with OUT.redirect_to(O.FileOutput()): + cmd = ssh_setup() + CU.set_user(ENV['CHPWD_SSH_USER']) OPTPARSE.dispatch('userv', cmd) elif 'CHPWD_SSH_MASTER' in ENV: @@ -268,8 +268,8 @@ if __name__ == '__main__': ## a user. try: - cmd = ssh_setup() with OUT.redirect_to(O.RemoteOutput()): + cmd = ssh_setup() OPTPARSE.dispatch('remote', map(CGI.urldecode, cmd)) except U.ExpectedError, e: print 'ERR', e.code, e.msg @@ -290,20 +290,20 @@ if __name__ == '__main__': ## as we are. with cli_errors(): - args = parse_options() - CONF.loadconfig(OPTS.config) - CGI.SSLP = OPTS.sslp - ctx = OPTS.context - if OPTS.user: - CU.set_user(OPTS.user) - CGI.STATE.kw['user'] = OPTS.user - if ctx is None: ctx = 'userv' - else: - D.opendb() - if ctx is None: - ctx = 'admin' - OPTPARSE.show_global_opts = True with OUT.redirect_to(O.FileOutput()): + args = parse_options() + CONF.loadconfig(OPTS.config) + CGI.SSLP = OPTS.sslp + ctx = OPTS.context + if OPTS.user: + CU.set_user(OPTS.user) + CGI.STATE.kw['user'] = OPTS.user + if ctx is None: ctx = 'userv' + else: + D.opendb() + if ctx is None: + ctx = 'admin' + OPTPARSE.show_global_opts = True OPTPARSE.dispatch(ctx, args) ###----- That's all, folks -------------------------------------------------- diff --git a/config.py b/config.py index 2c13232..bb7b32b 100644 --- a/config.py +++ b/config.py @@ -26,6 +26,7 @@ from __future__ import with_statement import os as OS; ENV = OS.environ +import output as O; OUT = O.OUT import sys as SYS import types as TY @@ -81,8 +82,12 @@ def loadconfig(config): d.update(DEFAULTS) ## And run the configuration code. - with open(config) as f: - exec f in d + try: + with open(config) as f: + exec f in d + except IOError, e: + OUT.warn("couldn't open configuration file `%s': %s" % + (config, e.strerror)) ## Run the hooks. for func in _HOOKS: