def _create_types(self):
     # reads the types definitions and loads them
     types = {}
     logger.info('Initializing types...')
     for definition in self.ast:
         if definition.type != 'type':
             continue
         name = definition.left
         types[name] = self._resolve_def(definition.right)
     return types
    def _create_globs(self):
        # reads the globs definitions and loads them
        globs = {}
        logger.info('Initializing globs...')
        for definition in self.ast:
            if definition.type != 'global':
                continue

            name = definition.left
            value = definition.right.value
            globs[name] = self._resolve_def(value,
                                            copy.copy(globs))
        return globs
    def generate(self):
        logger.info('Generating the Web App...')
        for definition in self.ast:
            type_ = definition.type
            if type_ == 'meta':
                self.mapper.set_options(definition.value)
                continue
            elif type_ in _NONPATH:
                continue

            name = definition.left
            args = definition.right
            #print name
            #print args
            #if len(definition) > 2:
            #    args = definition[2]
            #else:
            #    args = []
            self.mapper.add(name, args)
        logger.info('...ready')
        logger.info('')
Beispiel #4
0
def _run_server(args):
    logger.info("Serving on port %d..." % args.port)

    # loading the rbr to get the workers/arbiters
    from redbarrel.dsl import build_ast
    from redbarrel.dsl.runners import resolve_runner

    workers = {}
    arbiters = {}

    for path in args.path:
        with open(path) as f:
            ast = build_ast(f.read())

        for definition in ast:
            type_ = definition.type
            if type_ not in ('worker', 'arbiter'):
                continue

            name = definition[1]
            logger.info('Loading %s %r' % (type_, name))
            runner = resolve_runner(definition[2])
            if type_ == 'worker':
                workers[name] = runner
            else:
                arbiters[name] = runner

    # default arbiters and workers
    from redbarrel.server.arbiters import ARBITERS
    arbiters.update(ARBITERS)

    from redbarrel.server.workers import WORKERS
    workers.update(WORKERS)

    # now loading the workers and arbiters, given a config
    specs = []
    from pistil.arbiter import Arbiter

    conf = {"address": ("127.0.0.1", args.port),
            "debug": True,
            "memory": True,
            "num_workers": 1,  #args.workers,
            "path": args.path,
            "timeout": 9000  # XXXX
            }

    for name, num in args.workers:
        # is it an arbiter or a worker ?
        if name in arbiters:
            klass = arbiters[name]
            type_ = 'supervisor'
        elif name in workers:
            klass = workers[name]
            type_ = 'worker'
        else:
            raise ValueError(name)

        timeout = 90000  # XXX to be defined
        specs.append((klass, timeout, type_, {}, name))
        # XXX conf ?
        #

    arbiter = Arbiter(conf, specs)
    arbiter.run()
def _run_server(args):
    logger.info("Serving on port %d..." % args.port)

    # loading the rbr to get the workers/arbiters
    from redbarrel.dsl import build_ast
    from redbarrel.dsl.runners import resolve_runner

    workers = {}
    arbiters = {}

    for path in args.path:
        with open(path) as f:
            ast = build_ast(f.read())

        for definition in ast:
            type_ = definition.type
            if type_ not in ('worker', 'arbiter'):
                continue

            name = definition[1]
            logger.info('Loading %s %r' % (type_, name))
            runner = resolve_runner(definition[2])
            if type_ == 'worker':
                workers[name] = runner
            else:
                arbiters[name] = runner

    # default arbiters and workers
    from redbarrel.server.arbiters import ARBITERS
    arbiters.update(ARBITERS)

    from redbarrel.server.workers import WORKERS
    workers.update(WORKERS)

    # now loading the workers and arbiters, given a config
    specs = []
    from pistil.arbiter import Arbiter

    conf = {
        "address": ("127.0.0.1", args.port),
        "debug": True,
        "memory": True,
        "num_workers": 1,  #args.workers,
        "path": args.path,
        "timeout": 9000  # XXXX
    }

    for name, num in args.workers:
        # is it an arbiter or a worker ?
        if name in arbiters:
            klass = arbiters[name]
            type_ = 'supervisor'
        elif name in workers:
            klass = workers[name]
            type_ = 'worker'
        else:
            raise ValueError(name)

        timeout = 90000  # XXX to be defined
        specs.append((klass, timeout, type_, {}, name))
        # XXX conf ?
        #

    arbiter = Arbiter(conf, specs)
    arbiter.run()
Beispiel #6
0
    def add(self, name, args):
        if name in self._hooks:
            raise NameError("%r already defined." % name)

        params = {}
        for arg in args:
            if arg.type == "assign":
                left = arg.left
                right = arg.right
                if isinstance(left, basestring):  # XXX meh
                    params[left] = right
                else:
                    name_ = left.value
                    if isinstance(right, list):
                        params[name_] = arg.right
                    else:
                        params[name_] = arg.right.value
            else:
                raise NotImplementedError(arg)

        use = params.get("use", "redbarrel.util.dummy")

        if "url" in params:
            url = params.get("url", "/")
            if self.root_path:
                if url != "/":
                    url = self.root_path + url
                else:
                    url = self.root_path

            try:
                function = resolve_runner(use, self.root, url)
            except ImportError:
                # let's try in the context
                # # XXX ugly, need isolation
                function = None

                for lib in self.context.libraries:
                    for callable in lib.dir():
                        name_ = "%s.%s" % (lib.name, callable)
                        if name_ == use:
                            function = lib.namespace[callable]
                            break

                if function is None:
                    logger.info(" => Error on %r" % name)
                    raise

            params["func"] = function

            conditions = {}
            oldname = name
            params["name"] = name

            if "method" in params:
                conditions["method"] = [str(method) for method in params["method"]]
                self.mapper.connect(None, url, action=name, conditions=conditions)

            self._hooks[name] = WebHook(params, self.types)
            logger.info(" => %r hooked for %r" % (oldname, url))

        else:
            logger.info(" => %r incomplete, ignoring" % name)
    def add(self, name, args):
        if name in self._hooks:
            raise NameError('%r already defined.' % name)

        params = {}
        for arg in args:
            if arg.type == 'assign':
                left = arg.left
                right = arg.right
                if isinstance(left, basestring):    # XXX meh
                    params[left] = right
                else:
                    name_ = left.value
                    if isinstance(right, list):
                        params[name_] = arg.right
                    else:
                        params[name_] = arg.right.value
            else:
                raise NotImplementedError(arg)

        use = params.get('use', 'redbarrel.util.dummy')

        if 'url' in params:
            url = params.get('url', '/')
            if self.root_path:
                if url != '/':
                    url = self.root_path + url
                else:
                    url = self.root_path

            try:
                function = resolve_runner(use, self.root, url)
            except ImportError:
                # let's try in the context
                # # XXX ugly, need isolation
                function = None

                for lib in self.context.libraries:
                    for callable in lib.dir():
                        name_ = '%s.%s' % (lib.name, callable)
                        if name_ == use:
                            function = lib.namespace[callable]
                            break

                if function is None:
                    logger.info(" => Error on %r" % name)
                    raise

            params['func'] = function

            conditions = {}
            oldname = name
            params['name'] = name


            if 'method' in params:
                conditions['method'] = [str(method)
                            for method in params['method']]
                self.mapper.connect(None, url, action=name,
                                    conditions=conditions)

            self._hooks[name] = WebHook(params, self.types)
            logger.info(" => %r hooked for %r" % (oldname, url))

        else:
            logger.info(" => %r incomplete, ignoring" % name)