def validate_config(config, main_section): if not config.has_section(main_section): die("No [%s] section found." % main_section) twiggy.quickSetup( name2level(config.get(main_section, 'log.level')), config.get(main_section, 'log.file') ) if not config.has_option(main_section, 'targets'): die("No targets= item in [%s] found." % main_section) targets = config.get(main_section, 'targets') targets = filter(lambda t: len(t), [t.strip() for t in targets.split(",")]) if not targets: die("Empty targets= item in [%s]." % main_section) for target in targets: if target not in config.sections(): die("No [%s] section found." % target) # Validate each target one by one. for target in targets: service = config.get(target, 'service') if not service: die("No 'service' in [%s]" % target) if not get_service(service): die("'%s' in [%s] is not a valid service." % (service, target)) # Call the service-specific validator get_service(service).validate_config(config, target)
def build_key_list(targets): from bugwarrior.services import get_service keys = {} for target in targets: keys[target] = get_service(target).ISSUE_CLASS.UNIQUE_KEY return keys
def validate_config(config, main_section): if not config.has_section(main_section): die("No [%s] section found." % main_section) logging.basicConfig( level=getattr(logging, config.get(main_section, 'log.level')), filename=config.get(main_section, 'log.file'), ) # In general, its nice to log "everything", but some of the loggers from # our dependencies are very very spammy. Here, we silence most of their # noise: spammers = [ 'bugzilla.base', 'bugzilla.bug', 'requests.packages.urllib3.connectionpool', ] for spammer in spammers: logging.getLogger(spammer).setLevel(logging.WARN) if not config.has_option(main_section, 'targets'): die("No targets= item in [%s] found." % main_section) targets = aslist(config.get(main_section, 'targets')) targets = [t for t in targets if len(t)] if not targets: die("Empty targets= item in [%s]." % main_section) for target in targets: if target not in config.sections(): die("No [%s] section found." % target) # Validate each target one by one. for target in targets: service = config.get(target, 'service') if not service: die("No 'service' in [%s]" % target) if not get_service(service): die("'%s' in [%s] is not a valid service." % (service, target)) # Call the service-specific validator service = get_service(service) service_config = ServiceConfig(service.CONFIG_PREFIX, config, target) service.validate_config(service_config, target)
def targets(): config = load_config('general') for section in config.sections(): if section in ['general', 'notifications'] or \ section.startswith('flavor.'): continue service_name = config.get(section, 'service') service_class = get_service(service_name) for option in config.options(section): value = config.get(section, option) if not value: continue if '@oracle:use_keyring' in value: yield service_class.get_keyring_service(config, section)
def build_uda_config_overrides(targets): """ Returns a list of UDAs defined by given targets For all targets in `targets`, build a dictionary of configuration overrides representing the UDAs defined by the passed-in services (`targets`). Given a hypothetical situation in which you have two services, the first of which defining a UDA named 'serviceAid' ("Service A ID", string) and a second service defining two UDAs named 'serviceBproject' ("Service B Project", string) and 'serviceBnumber' ("Service B Number", numeric), this would return the following structure:: { 'uda': { 'serviceAid': { 'label': 'Service A ID', 'type': 'string', }, 'serviceBproject': { 'label': 'Service B Project', 'type': 'string', }, 'serviceBnumber': { 'label': 'Service B Number', 'type': 'numeric', } } } """ from bugwarrior.services import get_service targets_udas = {} for target in targets: targets_udas.update(get_service(target).ISSUE_CLASS.UDAS) return { 'uda': targets_udas }