def _execute_resp_body(self, response, rule, request, globs): if rule.type == 'check_type': self._check_type(rule.value, response.body, rule[2]) elif rule.type == 'alter': alterator = resolve_runner(rule.value) response.body = alterator(globs, request, response.body) else: raise NotImplementedError(str(rule))
def _resolve_def(self, value, *args, **kw): if not isinstance(value, str): return value prefixed = value.split(':', 1) if prefixed[0] not in get_runner_names(): return value res = resolve_runner(value, self.root)(*args, **kw) if value == res: raise ImportError(value) else: value = res return value
def _execute_req_headers(self, request, rule, globs): if rule[0] == 'validates_with': header = rule[1] validator = resolve_runner(rule[2]) code = rule[3] def _failed(e): err = HTTPError() err.status_int = code body = StringIO() pprint(str(e), body) body.seek(0) err.body = body.read() raise err value = request.headers.get(header) try: validator(globs, request, value) except Exception, e: _failed(e)
def _ds(func): doc = resolve_runner(func).__doc__ if doc is None: return func return '%r (%s)' % (func, doc)
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)