Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

resolve ticket 2053. Remove giant try/except KeyError. Instead check for #201

Merged
merged 1 commit into from

2 participants

@bdbaddog
Owner

resolve ticket 2053. Remove giant try/except KeyError. Instead check for existance of all required keys instead of catching their lack of existence.

Not sure how to add tests for this. Point me in the right direction and I'll add one or more.

@bdbaddog bdbaddog resolve ticket 2053. Remove giant try/except KeyError. Instead check …
…for existance of all required keys instead of catching their lack of existence.
a7a4877
@ayust ayust merged commit 7c58b77 into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Aug 4, 2011
  1. @bdbaddog

    resolve ticket 2053. Remove giant try/except KeyError. Instead check …

    bdbaddog authored
    …for existance of all required keys instead of catching their lack of existence.
This page is out of date. Refresh to see the latest.
Showing with 81 additions and 75 deletions.
  1. +81 −75 master/buildbot/master.py
View
156 master/buildbot/master.py
@@ -247,84 +247,90 @@ def do_load(_):
if k not in known_keys:
log.msg("unknown key '%s' defined in config dictionary" % k)
+ required_keys = ('schedulers','builders','slavePortnum')
+ missing_required_keys=[]
+ for k in required_keys:
+ if k not in config.keys():
+ log.err("Missing required key '%s'"%k)
+ missing_required_keys.append(k)
+
+ if missing_required_keys:
+ m='required keys %s are missing from configuration'%" ".join(["'%s'"%rk for rk in missing_required_keys])
+ raise KeyError(m)
+
+
# load known keys into local vars, applying defaults
- try:
- # required
- schedulers = config['schedulers']
- builders = config['builders']
- slavePortnum = config['slavePortnum']
- #slaves = config['slaves']
- #change_source = config['change_source']
-
- # optional
- db_url = config.get("db_url", "sqlite:///state.sqlite")
- db_poll_interval = config.get("db_poll_interval", None)
- debugPassword = config.get('debugPassword')
- manhole = config.get('manhole')
- status = config.get('status', [])
- # projectName/projectURL still supported to avoid
- # breaking legacy configurations
- title = config.get('title', config.get('projectName'))
- titleURL = config.get('titleURL', config.get('projectURL'))
- buildbotURL = config.get('buildbotURL')
- properties = config.get('properties', {})
- buildCacheSize = config.get('buildCacheSize', None)
- changeCacheSize = config.get('changeCacheSize', None)
- eventHorizon = config.get('eventHorizon', 50)
- logHorizon = config.get('logHorizon', None)
- buildHorizon = config.get('buildHorizon', None)
- logCompressionLimit = config.get('logCompressionLimit', 4*1024)
- if logCompressionLimit is not None and not \
- isinstance(logCompressionLimit, int):
- raise ValueError("logCompressionLimit needs to be bool or int")
- logCompressionMethod = config.get('logCompressionMethod', "bz2")
- if logCompressionMethod not in ('bz2', 'gz'):
- raise ValueError("logCompressionMethod needs to be 'bz2', or 'gz'")
- logMaxSize = config.get('logMaxSize')
- if logMaxSize is not None and not \
- isinstance(logMaxSize, int):
- raise ValueError("logMaxSize needs to be None or int")
- logMaxTailSize = config.get('logMaxTailSize')
- if logMaxTailSize is not None and not \
- isinstance(logMaxTailSize, int):
- raise ValueError("logMaxTailSize needs to be None or int")
- mergeRequests = config.get('mergeRequests')
- if (mergeRequests not in (None, True, False)
- and not callable(mergeRequests)):
- raise ValueError("mergeRequests must be a callable or False")
- prioritizeBuilders = config.get('prioritizeBuilders')
- if prioritizeBuilders is not None and not callable(prioritizeBuilders):
- raise ValueError("prioritizeBuilders must be callable")
- changeHorizon = config.get("changeHorizon")
- if changeHorizon is not None and not isinstance(changeHorizon, int):
- raise ValueError("changeHorizon needs to be an int")
-
- multiMaster = config.get("multiMaster", False)
-
- metrics_config = config.get("metrics")
- caches_config = config.get("caches", {})
-
- # load validation, with defaults, and verify no unrecognized
- # keys are included.
- validation_defaults = {
- 'branch' : re.compile(r'^[\w.+/~-]*$'),
- 'revision' : re.compile(r'^[ \w\.\-\/]*$'),
- 'property_name' : re.compile(r'^[\w\.\-\/\~:]*$'),
- 'property_value' : re.compile(r'^[\w\.\-\/\~:]*$'),
+ # required
+ schedulers = config['schedulers']
+ builders = config['builders']
+ slavePortnum = config['slavePortnum']
+ #slaves = config['slaves']
+ #change_source = config['change_source']
+
+ # optional
+ db_url = config.get("db_url", "sqlite:///state.sqlite")
+ db_poll_interval = config.get("db_poll_interval", None)
+ debugPassword = config.get('debugPassword')
+ manhole = config.get('manhole')
+ status = config.get('status', [])
+ # projectName/projectURL still supported to avoid
+ # breaking legacy configurations
+ title = config.get('title', config.get('projectName'))
+ titleURL = config.get('titleURL', config.get('projectURL'))
+ buildbotURL = config.get('buildbotURL')
+ properties = config.get('properties', {})
+ buildCacheSize = config.get('buildCacheSize', None)
+ changeCacheSize = config.get('changeCacheSize', None)
+ eventHorizon = config.get('eventHorizon', 50)
+ logHorizon = config.get('logHorizon', None)
+ buildHorizon = config.get('buildHorizon', None)
+ logCompressionLimit = config.get('logCompressionLimit', 4*1024)
+ if logCompressionLimit is not None and not \
+ isinstance(logCompressionLimit, int):
+ raise ValueError("logCompressionLimit needs to be bool or int")
+ logCompressionMethod = config.get('logCompressionMethod', "bz2")
+ if logCompressionMethod not in ('bz2', 'gz'):
+ raise ValueError("logCompressionMethod needs to be 'bz2', or 'gz'")
+ logMaxSize = config.get('logMaxSize')
+ if logMaxSize is not None and not \
+ isinstance(logMaxSize, int):
+ raise ValueError("logMaxSize needs to be None or int")
+ logMaxTailSize = config.get('logMaxTailSize')
+ if logMaxTailSize is not None and not \
+ isinstance(logMaxTailSize, int):
+ raise ValueError("logMaxTailSize needs to be None or int")
+ mergeRequests = config.get('mergeRequests')
+ if (mergeRequests not in (None, True, False)
+ and not callable(mergeRequests)):
+ raise ValueError("mergeRequests must be a callable or False")
+ prioritizeBuilders = config.get('prioritizeBuilders')
+ if prioritizeBuilders is not None and not callable(prioritizeBuilders):
+ raise ValueError("prioritizeBuilders must be callable")
+ changeHorizon = config.get("changeHorizon")
+ if changeHorizon is not None and not isinstance(changeHorizon, int):
+ raise ValueError("changeHorizon needs to be an int")
+
+ multiMaster = config.get("multiMaster", False)
+
+ metrics_config = config.get("metrics")
+ caches_config = config.get("caches", {})
+
+ # load validation, with defaults, and verify no unrecognized
+ # keys are included.
+ validation_defaults = {
+ 'branch' : re.compile(r'^[\w.+/~-]*$'),
+ 'revision' : re.compile(r'^[ \w\.\-\/]*$'),
+ 'property_name' : re.compile(r'^[\w\.\-\/\~:]*$'),
+ 'property_value' : re.compile(r'^[\w\.\-\/\~:]*$'),
}
- validation_config = validation_defaults.copy()
- validation_config.update(config.get("validation", {}))
- v_config_keys = set(validation_config.keys())
- v_default_keys = set(validation_defaults.keys())
- if v_config_keys > v_default_keys:
- raise ValueError("unrecognized validation key(s): %s" %
- (", ".join(v_config_keys - v_default_keys,)))
-
- except KeyError:
- log.msg("config dictionary is missing a required parameter")
- log.msg("leaving old configuration in place")
- raise
+ validation_config = validation_defaults.copy()
+ validation_config.update(config.get("validation", {}))
+ v_config_keys = set(validation_config.keys())
+ v_default_keys = set(validation_defaults.keys())
+ if v_config_keys > v_default_keys:
+ raise ValueError("unrecognized validation key(s): %s" %
+ (", ".join(v_config_keys - v_default_keys,)))
if "sources" in config:
m = ("c['sources'] is deprecated as of 0.7.6 and is no longer "
Something went wrong with that request. Please try again.