Exemplo n.º 1
0
    def __init__(self, options):
        self.options = options
        model_cls = load_class_by_string(options['model'])
        riak_config = {
            'bucket_prefix': options['bucket-prefix'],
        }
        self.manager = self.get_riak_manager(riak_config)
        self.model = self.manager.proxy(model_cls)

        # The default post-migrate-function does nothing and returns True if
        # and only if the object was migrated.
        self.post_migrate_function = lambda obj: obj.was_migrated
        if options['post-migrate-function'] is not None:
            self.post_migrate_function = load_class_by_string(
                options['post-migrate-function'])
Exemplo n.º 2
0
    def __init__(self, options):
        self.options = options
        model_cls = load_class_by_string(options['model'])
        riak_config = {
            'bucket_prefix': options['bucket-prefix'],
        }
        manager = self.get_riak_manager(riak_config)
        self.model = manager.proxy(model_cls)

        # The default post-migrate-function does nothing and returns True if
        # and only if the object was migrated.
        self.post_migrate_function = lambda obj: obj.was_migrated
        if options['post-migrate-function'] is not None:
            self.post_migrate_function = load_class_by_string(
                options['post-migrate-function'])
Exemplo n.º 3
0
 def validate_destination_config(self, config):
     """
     Passes the config to the specified worker class for validation
     """
     worker_class = load_class_by_string(self._worker_class_name)
     return maybeDeferred(
         worker_class.validate_destination_config, self.api, config)
Exemplo n.º 4
0
    def consume_user_message(self, message):
        """
        Dynamically contruct menu based on user input.
        If no session is found self.initial_menu is constructed.
        """
        user_id = message.user()
        session = self.session_manager.load_session(user_id)
        try:
            if not session:
                session = self.session_manager.create_session(user_id)
                menu_class = self.initial_menu
            else:
                if 'class' in session:
                    menu_class = load_class_by_string(session['class'])
                else:
                    menu_class = self.initial_menu

            try:
                menu = menu_class(message, session, int(message['content']))
            except ValueError:
                menu = menu_class(message, session, '')

            self.session_manager.save_session(user_id, session)
            self.reply_to(message, menu.generate_menu(message['content']))

        except Exception, e:
            self.reply_to(message, str(e))
Exemplo n.º 5
0
    def consume_user_message(self, message):
        """
        Dynamically contruct menu based on user input.
        If no session is found self.initial_menu is constructed.
        """
        user_id = message.user()
        session = self.session_manager.load_session(user_id)
        try:
            if not session:
                session = self.session_manager.create_session(user_id)
                menu_class = self.initial_menu
            else:
                if 'class' in session:
                    menu_class = load_class_by_string(session['class'])
                else:
                    menu_class = self.initial_menu

            try:
                menu = menu_class(message, session, int(message['content']))
            except ValueError:
                menu = menu_class(message, session, '')

            self.session_manager.save_session(user_id, session)
            self.reply_to(message, menu.generate_menu(message['content']))

        except Exception, e:
            self.reply_to(message, str(e))
Exemplo n.º 6
0
 def validate_config(self):
     # FIXME: The name of this method is a vicious lie.
     #        It does not validate configs. It constructs resources objects.
     #        Fixing that is beyond the scope of this commit, however.
     for name, config in self.config.iteritems():
         cls = load_class_by_string(config.pop('cls'))
         self.resources[name] = cls(name, self.app_worker, config)
Exemplo n.º 7
0
    def setup(self, redis=None, message_sender=None):
        if redis is None:
            redis = yield TxRedisManager.from_config(self.redis_config)

        if message_sender is None:
            message_sender = MessageSender(
                'amqp-spec-0-8.xml', self.amqp_config)

        self.redis = redis
        self.message_sender = message_sender
        self.message_sender.setServiceParent(self.service)

        self.inbounds = InboundMessageStore(
            self.redis, self.config.inbound_message_ttl)

        self.outbounds = OutboundMessageStore(
            self.redis, self.config.outbound_message_ttl)

        self.message_rate = MessageRateStore(self.redis)

        self.plugins = []
        for plugin_config in self.config.plugins:
            cls = load_class_by_string(plugin_config['type'])
            plugin = cls()
            yield plugin.start_plugin(plugin_config, self.config)
            self.plugins.append(plugin)

        yield Channel.start_all_channels(
            self.redis, self.config, self.service, self.plugins)
Exemplo n.º 8
0
    def setup(self, redis=None, message_sender=None):
        if redis is None:
            redis = yield TxRedisManager.from_config(self.redis_config)

        if message_sender is None:
            message_sender = MessageSender('amqp-spec-0-8.xml',
                                           self.amqp_config)

        self.redis = redis
        self.message_sender = message_sender
        self.message_sender.setServiceParent(self.service)

        self.inbounds = InboundMessageStore(self.redis,
                                            self.config.inbound_message_ttl)

        self.outbounds = OutboundMessageStore(self.redis,
                                              self.config.outbound_message_ttl)

        self.message_rate = MessageRateStore(self.redis)

        self.plugins = []
        for plugin_config in self.config.plugins:
            cls = load_class_by_string(plugin_config['type'])
            plugin = cls()
            yield plugin.start_plugin(plugin_config, self.config)
            self.plugins.append(plugin)

        yield Channel.start_all_channels(self.redis, self.config, self.service,
                                         self.plugins)
Exemplo n.º 9
0
 def __init__(self, options):
     self.options = options
     model_cls = load_class_by_string(options['model'])
     riak_config = {
         'bucket_prefix': options['bucket-prefix'],
     }
     self.manager = self.get_riak_manager(riak_config)
     self.model = self.manager.proxy(model_cls)
Exemplo n.º 10
0
 def do_worker_help(self):
     """Print out a usage message for the worker-class and exit"""
     worker_class = load_class_by_string(self.worker_class)
     self.emit(worker_class.__doc__)
     config_class = getattr(worker_class, 'CONFIG_CLASS', None)
     if config_class is not None:
         self.emit(config_class.__doc__)
     self.emit("")
     self.exit()
Exemplo n.º 11
0
 def do_worker_help(self):
     """Print out a usage message for the worker-class and exit"""
     worker_class = load_class_by_string(self.worker_class)
     self.emit(worker_class.__doc__)
     config_class = getattr(worker_class, 'CONFIG_CLASS', None)
     if config_class is not None:
         self.emit(config_class.__doc__)
     self.emit("")
     self.exit()
Exemplo n.º 12
0
    def create_worker(self, worker_class, config, timeout=30, bindAddress=None):
        """
        Create a worker factory, connect to AMQP and return the factory.

        Return value is the AmqpFactory instance containing the worker.
        """
        return self.create_worker_by_class(
            load_class_by_string(worker_class), config, timeout=timeout, bindAddress=bindAddress
        )
Exemplo n.º 13
0
    def create_worker(self, worker_class, config, timeout=30,
                      bindAddress=None):
        """
        Create a worker factory, connect to AMQP and return the factory.

        Return value is the AmqpFactory instance containing the worker.
        """
        return self.create_worker_by_class(
            load_class_by_string(worker_class), config, timeout=timeout,
            bindAddress=bindAddress)
Exemplo n.º 14
0
 def opt_worker_help(self):
     worker_class_name = self.opts.pop('worker-class')
     if worker_class_name is None:
         # fallback to deprecated --worker_class option
         worker_class_name = self.opts.pop('worker_class')
     if worker_class_name is None:
         print "--worker-help requires --worker-class to be set too"
     else:
         worker_class = load_class_by_string(worker_class_name)
         print worker_class.__doc__
     sys.exit(0)
Exemplo n.º 15
0
    def setup_application(self):
        self.handlers = {}

        self.api_command_publisher = yield self.start_publisher(
            ApiCommandPublisher)
        self.vumi_api = yield VumiApi.from_config_async(
            self.config, self.api_command_publisher)
        self.account_config = {}

        for name, handler_class in self.handler_config.items():
            cls = load_class_by_string(handler_class)
            self.handlers[name] = cls(self, self.config.get(name, {}))
            yield self.handlers[name].setup_handler()

        self.api_event_consumer = yield self.consume(
            ApiEventPublisher.routing_key, self.consume_api_event,
            message_class=VumiApiEvent)
Exemplo n.º 16
0
    def setup_application(self):
        self.handlers = {}

        self.api_command_publisher = yield self.start_publisher(
            ApiCommandPublisher)
        self.vumi_api = yield VumiApi.from_config_async(
            self.config, self.api_command_publisher)
        self.account_config = {}

        for name, handler_class in self.handler_config.items():
            cls = load_class_by_string(handler_class)
            self.handlers[name] = cls(self, self.config.get(name, {}))
            yield self.handlers[name].setup_handler()

        self.api_event_consumer = yield self.consume(
            ApiEventPublisher.routing_key,
            self.consume_api_event,
            message_class=VumiApiEvent)
Exemplo n.º 17
0
 def __init__(self, message, session, choice=None):
     """
     Initiate menu based on incomming choice from previous menu.
     Options specific session data for given choice is
     added to session data.
     """
     self.message = message
     self.session = session
     if choice:
         options = self.get_options()
         resolved_choice = options[int(choice) - 1]
         session.update(resolved_choice[1])
         session['class'] = resolved_choice[2]
         self.process_response(choice)
         self.response_menu = \
                 load_class_by_string(resolved_choice[2])(message, session)
     else:
         self.response_menu = self
Exemplo n.º 18
0
def create_middlewares_from_config(worker, config):
    """Return a list of middleware objects created from a worker
       configuration.
       """
    middlewares = []
    for item in config.get("middleware", []):
        keys = item.keys()
        if len(keys) != 1:
            raise ConfigError(
                "Middleware items contain only a single key-value pair. The"
                " key should be a name for the middleware. The value should be"
                " the full dotted name of the class implementing the"
                " middleware, or a mapping containing the keys 'class' with a"
                " value of the full dotted class name, 'consume_priority' with"
                " the priority level for consuming, and 'publish_priority'"
                " with the priority level for publishing, both integers.")
        middleware_name = keys[0]
        middleware_config = config.get(middleware_name, {})
        if isinstance(item[middleware_name], basestring):
            cls_name = item[middleware_name]
            middleware_config['consume_priority'] = 0
            middleware_config['publish_priority'] = 0
        elif isinstance(item[middleware_name], dict):
            conf = item[middleware_name]
            cls_name = conf.get('class')
            try:
                middleware_config['consume_priority'] = int(conf.get(
                    'consume_priority', 0))
                middleware_config['publish_priority'] = int(conf.get(
                    'publish_priority', 0))
            except ValueError:
                raise ConfigError(
                    "Middleware priority level must be an integer")
        else:
            raise ConfigError(
                "Middleware item values must either be a string with the",
                " full dotted name of the class implementing the middleware,"
                " or a dictionary with 'class', 'consume_priority', and"
                " 'publish_priority' keys.")
        cls = load_class_by_string(cls_name)
        middleware = cls(middleware_name, middleware_config, worker)
        middlewares.append(middleware)
    return middlewares
Exemplo n.º 19
0
def create_middlewares_from_config(worker, config):
    """Return a list of middleware objects created from a worker
       configuration.
       """
    middlewares = []
    for item in config.get("middleware", []):
        keys = item.keys()
        if len(keys) != 1:
            raise ConfigError(
                "Middleware items contain only a single key-value pair. The"
                " key should be a name for the middleware. The value should be"
                " the full dotted name of the class implementing the"
                " middleware, or a mapping containing the keys 'class' with a"
                " value of the full dotted class name, 'consume_priority' with"
                " the priority level for consuming, and 'publish_priority'"
                " with the priority level for publishing, both integers.")
        middleware_name = keys[0]
        middleware_config = config.get(middleware_name, {})
        if isinstance(item[middleware_name], basestring):
            cls_name = item[middleware_name]
            middleware_config['consume_priority'] = 0
            middleware_config['publish_priority'] = 0
        elif isinstance(item[middleware_name], dict):
            conf = item[middleware_name]
            cls_name = conf.get('class')
            try:
                middleware_config['consume_priority'] = int(
                    conf.get('consume_priority', 0))
                middleware_config['publish_priority'] = int(
                    conf.get('publish_priority', 0))
            except ValueError:
                raise ConfigError(
                    "Middleware priority level must be an integer")
        else:
            raise ConfigError(
                "Middleware item values must either be a string with the",
                " full dotted name of the class implementing the middleware,"
                " or a dictionary with 'class', 'consume_priority', and"
                " 'publish_priority' keys.")
        cls = load_class_by_string(cls_name)
        middleware = cls(middleware_name, middleware_config, worker)
        middlewares.append(middleware)
    return middlewares
Exemplo n.º 20
0
def token_task(request):
    api = request.user_api.api

    token = request.GET.get('token')
    token_data = api.token_manager.verify_get(token)
    if not token_data:
        raise Http404

    params = token_data['extra_params']
    callback_name = params['callback_name']
    callback_args = params['callback_args']
    callback_kwargs = params['callback_kwargs']
    return_to = params['return_to']
    message = params['message']
    message_level = params['message_level']

    callback = load_class_by_string(callback_name)
    callback(*callback_args, **callback_kwargs)
    messages.add_message(request, message_level, message)
    return redirect(return_to)
Exemplo n.º 21
0
def token_task(request):
    api = request.user_api.api

    token = request.GET.get('token')
    token_data = api.token_manager.verify_get(token)
    if not token_data:
        raise Http404

    params = token_data['extra_params']
    callback_name = params['callback_name']
    callback_args = params['callback_args']
    callback_kwargs = params['callback_kwargs']
    return_to = params['return_to']
    message = params['message']
    message_level = params['message_level']

    callback = load_class_by_string(callback_name)
    callback(*callback_args, **callback_kwargs)
    messages.add_message(request, message_level, message)
    return redirect(return_to)
Exemplo n.º 22
0
def create_middlewares_from_config(worker, config):
    """Return a list of middleware objects created from a worker
       configuration.
       """
    middlewares = []
    for item in config.get("middleware", []):
        keys = item.keys()
        if len(keys) != 1:
            raise ConfigError("Middleware items contain only a single"
                              " key-value pair. The key should be a name"
                              " for the middleware. The value should be"
                              " the full dotted name of the class"
                              " implementing the middleware.")
        middleware_name = keys[0]
        cls_name = item[middleware_name]
        middleware_config = config.get(middleware_name, {})
        cls = load_class_by_string(cls_name)
        middleware = cls(middleware_name, middleware_config, worker)
        middlewares.append(middleware)
    return middlewares
Exemplo n.º 23
0
Arquivo: base.py Projeto: snopoke/vumi
def create_middlewares_from_config(worker, config):
    """Return a list of middleware objects created from a worker
       configuration.
       """
    middlewares = []
    for item in config.get("middleware", []):
        keys = item.keys()
        if len(keys) != 1:
            raise ConfigError("Middleware items contain only a single"
                              " key-value pair. The key should be a name"
                              " for the middleware. The value should be"
                              " the full dotted name of the class"
                              " implementing the middleware.")
        middleware_name = keys[0]
        cls_name = item[middleware_name]
        middleware_config = config.get(middleware_name, {})
        cls = load_class_by_string(cls_name)
        middleware = cls(middleware_name, middleware_config, worker)
        middlewares.append(middleware)
    return middlewares
Exemplo n.º 24
0
 def startService(self):
     log.msg("Starting VumiService")
     host = self.options.pop('hostname')
     port = self.options.pop('port')
     # the worker creator starts workers, give it what class you 
     # want to start and what options you want to pass along
     worker_class_name = self.options.pop("worker_class")
     if not worker_class_name:
         raise VumiError, "please specify --worker_class"
     
     # load the config file if specified
     config_file = self.options.pop('config')
     if config_file:
         with file(config_file, 'r') as stream:
             self.options.update({
                 'config': yaml.load(stream)
             })
     
     worker_class = load_class_by_string(worker_class_name)
     creator = WorkerCreator(worker_class, **self.options)
     # after that you connect it to the AMQP server
     creator.connectTCP(host, port)
Exemplo n.º 25
0
 def clean(self, value):
     try:
         cls = load_class_by_string(value)
     except (ValueError, ImportError), e:
         # ValueError for empty module name
         self.raise_config_error(str(e))
Exemplo n.º 26
0
 def do_worker_help(self):
     """Print out a usage message for the worker-class and exit"""
     worker_class = load_class_by_string(self.worker_class)
     print worker_class.__doc__
     self.exit()
Exemplo n.º 27
0
 def do_worker_help(self):
     """Print out a usage message for the worker-class and exit"""
     worker_class = load_class_by_string(self.worker_class)
     print worker_class.__doc__
     self.exit()
Exemplo n.º 28
0
 def setup_router(self):
     router_cls = load_class_by_string(self.config['router_class'])
     self._router = router_cls(self, self.config)
     return maybeDeferred(self._router.setup_routing)
Exemplo n.º 29
0
 def setup_router(self):
     router_cls = load_class_by_string(self.config['router_class'])
     self._router = router_cls(self, self.config)
     return maybeDeferred(self._router.setup_routing)
Exemplo n.º 30
0
 def setup_router(self):
     router_cls = load_class_by_string(self.config['router_class'])
     self._router = router_cls(self, self.config)
Exemplo n.º 31
0
 def setup_router(self):
     router_cls = load_class_by_string(self.config['router_class'])
     self._router = router_cls(self, self.config)
Exemplo n.º 32
0
 def clean(self, value):
     try:
         cls = load_class_by_string(value)
     except (ValueError, ImportError), e:
         # ValueError for empty module name
         self.raise_config_error(str(e))