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('')
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()
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)