Пример #1
0
    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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
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
Пример #7
0
 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)
Пример #8
0
 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)
Пример #9
0
 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)
Пример #10
0
def get_metrics_provider(config, app_name):
    return import_custom_module('iris.metrics', config['metrics'])(config,
                                                                   app_name)
Пример #11
0
def init_validators(validators):
    for module in validators:
        _registered_validators.append(
            import_custom_module('iris.validators', module)())
Пример #12
0
def get_role_lookup(config):
    return import_custom_module('iris.role_lookup', config['role_lookup'])(config)