def __init__(self, vendors, application_vendors): self.max_tries_per_message = 5 self.vendors_iter = {} self.app_specific_vendors_iter = defaultdict(dict) self.all_vendor_instances = [] applications = {} for application in application_vendors: try: application_cls = import_custom_module('iris.applications', application) except ImportError: logger.exception('Failed importing application %s', application) continue try: applications[application_cls.name] = application_cls except AttributeError: logger.exception( 'Failed loading name of custom application %s', application) continue vendor_instances = defaultdict(list) app_vendor_instances = defaultdict(lambda: defaultdict(list)) for vendor_config in vendors: vendor_cls = import_custom_module('iris.vendors', vendor_config['type']) for mode in vendor_cls.supports: vendor_instance = vendor_cls(copy.deepcopy(vendor_config)) vendor_instances[mode].append(vendor_instance) for application_name, application_cls in applications.items(): app_vendor_instances[application_name][mode].append( application_cls(vendor_instance)) for mode, instances in vendor_instances.items(): random.shuffle(instances) self.all_vendor_instances += instances self.vendors_iter[mode] = itertools.cycle(instances) for application_name, modes in app_vendor_instances.items(): for mode_name, instances in modes.items(): random.shuffle(instances) self.app_specific_vendors_iter[application_name][ mode_name] = itertools.cycle(instances)
def init_vendors(vendors, application_vendors): applications = {application_cls.name: application_cls for application_cls in (import_custom_module('iris.applications', application) for application in application_vendors)} vendor_instances = defaultdict(list) app_vendor_instances = defaultdict(lambda: defaultdict(list)) for vendor_config in vendors: vendor_cls = import_custom_module('iris.vendors', vendor_config['type']) for mode in vendor_cls.supports: vendor_instances[mode].append(vendor_cls(copy.deepcopy(vendor_config))) for application_name, application_cls in applications.iteritems(): app_vendor_instances[application_name][mode].append(application_cls(vendor_cls(copy.deepcopy(vendor_config)))) for mode, instances in vendor_instances.iteritems(): random.shuffle(instances) _vendors_iter[mode] = itertools.cycle(instances) for application_name, modes in app_vendor_instances.iteritems(): for mode_name, instances in modes.iteritems(): random.shuffle(instances) _app_specific_vendors_iter[application_name][mode_name] = itertools.cycle(instances) logger.info('Initialized application %s', application_name)
def init_vendors(vendors, application_vendors): applications = {} for application in application_vendors: try: application_cls = import_custom_module('iris.applications', application) except ImportError: logger.exception('Failed importing application %s', application) continue try: applications[application_cls.name] = application_cls except AttributeError: logger.exception('Failed loading name of custom application %s', application) continue vendor_instances = defaultdict(list) app_vendor_instances = defaultdict(lambda: defaultdict(list)) for vendor_config in vendors: vendor_cls = import_custom_module('iris.vendors', vendor_config['type']) for mode in vendor_cls.supports: vendor_instances[mode].append( vendor_cls(copy.deepcopy(vendor_config))) for application_name, application_cls in applications.iteritems(): app_vendor_instances[application_name][mode].append( application_cls(vendor_cls(copy.deepcopy(vendor_config)))) for mode, instances in vendor_instances.iteritems(): random.shuffle(instances) _vendors_iter[mode] = itertools.cycle(instances) for application_name, modes in app_vendor_instances.iteritems(): for mode_name, instances in modes.iteritems(): random.shuffle(instances) _app_specific_vendors_iter[application_name][ mode_name] = itertools.cycle(instances) logger.info('Initialized application %s', application_name)
def __init__(self, config): self.config = config if 'proxy' in self.config: Connection.set_proxy_info(self.config['proxy']['host'], self.config['proxy']['port'], proxy_rdns=True) self.modes = { SMS_SUPPORT: self.send_sms, CALL_SUPPORT: self.send_call, } push_config = config.get('push_notification', {}) self.push_active = push_config.get('activated', False) if self.push_active: self.notifier = import_custom_module('iris.push', push_config['type'])(push_config)
def __init__(self, config): self.config = config self.http_client = TwilioHTTP(self.config.get('timeout', 10)) if 'proxy' in self.config: proxy = '%s:%s' % (self.config['proxy']['host'], self.config['proxy']['port']) self.http_client.session.proxies = {'https': proxy, 'http': proxy} self.modes = { SMS_SUPPORT: self.send_sms, CALL_SUPPORT: self.send_call, } self.say_endpoint = config.get('say_endpoint', '/api/v0/twilio/calls/say') self.gather_endpoint = config.get('gather_endpoint', '/api/v0/twilio/calls/gather') push_config = config.get('push_notification', {}) self.push_active = push_config.get('activated', False) if self.push_active: self.notifier = import_custom_module('iris.push', push_config['type'])(push_config)
def get_role_lookups(config): modules = config.get('role_lookups', []) # default to only support user and mailing_list. if not modules: modules = ['user', 'mailing_list'] imported_modules = [] for m in modules: try: imported_modules.append( import_custom_module('iris.role_lookup', m)(config)) logger.info('Loaded lookup modules: %s', m) except: logger.exception('Failed to load role lookup module: %s', m) return imported_modules
def __init__(self, config): self.config = config # For now slack has only IM mode but we can expand it to send msg to a # channel instead of a user self.modes = {SLACK_SUPPORT: self.send_message} self.proxy = None if 'proxy' in self.config: host = self.config['proxy']['host'] port = self.config['proxy']['port'] self.proxy = { 'http': 'http://%s:%s' % (host, port), 'https': 'https://%s:%s' % (host, port) } self.message_attachments = self.config.get('message_attachments', {}) push_config = config.get('push_notification', {}) self.push_active = push_config.get('activated', False) if self.push_active: self.notifier = import_custom_module( 'iris.push', push_config['type'])(push_config)
def __init__(self, config): self.config = config self.proxy = None if 'proxy' in self.config: host = self.config['proxy']['host'] port = self.config['proxy']['port'] self.proxy = { 'http': 'http://%s:%s' % (host, port), 'https': 'https://%s:%s' % (host, port) } self.modes = { CALL_SUPPORT: self.send_call, } self.timeout = config.get('timeout', 10) push_config = config.get('push_notification', {}) self.push_active = push_config.get('activated', False) if self.push_active: self.notifier = import_custom_module( 'iris.push', push_config['type'])(push_config)
def __init__(self, config): self.config = config if 'proxy' in self.config: Connection.set_proxy_info(self.config['proxy']['host'], self.config['proxy']['port'], proxy_rdns=True) self.modes = { SMS_SUPPORT: self.send_sms, CALL_SUPPORT: self.send_call, } self.timeout = config.get('timeout', 10) self.say_endpoint = config.get('say_endpoint', '/api/v0/twilio/calls/say') self.gather_endpoint = config.get('gather_endpoint', '/api/v0/twilio/calls/gather') push_config = config.get('push_notification', {}) self.push_active = push_config.get('activated', False) if self.push_active: self.notifier = import_custom_module( 'iris.push', push_config['type'])(push_config)
def get_metrics_provider(config, app_name): return import_custom_module('iris.metrics', config['metrics'])(config, app_name)
def init_validators(validators): for module in validators: _registered_validators.append( import_custom_module('iris.validators', module)())
def get_role_lookup(config): return import_custom_module('iris.role_lookup', config['role_lookup'])(config)