def decorate(f): @handler(*channels, **config) def wrapper(self, event, *args, **kwargs): try: if not hasattr(self, "request"): (self.request, self.response), args = args[:2], args[2:] self.request.args = args self.request.kwargs = kwargs self.cookie = self.request.cookie if hasattr(self.request, "session"): self.session = self.request.session if not getattr(f, "event", False): return f(self, *args, **kwargs) else: return f(self, event, *args, **kwargs) finally: if hasattr(self, "request"): del self.request del self.response del self.cookie if hasattr(self, "session"): del self.session wrapper.args, wrapper.varargs, wrapper.varkw, wrapper.defaults = \ getargspec(f) if wrapper.args and wrapper.args[0] == "self": del wrapper.args[0] if wrapper.args and wrapper.args[0] == "event": f.event = True del wrapper.args[0] wrapper.event = True return update_wrapper(wrapper, f)
def decorate(f): @handler(*channels, **config) def wrapper(self, *args, **kwargs): try: if not hasattr(self, "request"): self.request, self.response = args[:2] args = args[2:] self.cookie = self.request.cookie if hasattr(self.request, "session"): self.session = self.request.session self.response.headers["Content-Type"] = "application/json" result = f(self, *args, **kwargs) if (isinstance(result, httperror) or isinstance(result, Response)): return result else: return json.dumps(result) finally: if hasattr(self, "request"): del self.request del self.response del self.cookie if hasattr(self, "session"): del self.session wrapper.args, wrapper.varargs, wrapper.varkw, wrapper.defaults = \ getargspec(f) if wrapper.args and wrapper.args[0] == "self": del wrapper.args[0] return update_wrapper(wrapper, f)
def processCommand(self, s): # noqa match = CMD_REGEX.match(s) if match is not None: command = match.groupdict()["command"] if not match.groupdict()["args"] == "": tokens = match.groupdict()["args"].split(" ") else: tokens = [] fn = "cmd" + command.upper() if hasattr(self, fn): f = getattr(self, fn) if callable(f): args, vargs, kwargs, default = getargspec(f) args.remove("self") if len(args) == len(tokens): if len(args) == 0: f() else: f(*tokens) else: if len(tokens) > len(args): if vargs is None: if len(args) > 0: factor = len(tokens) - len(args) + 1 f(*back_merge(tokens, factor)) else: self.syntaxError( command, " ".join(tokens), " ".join( x for x in args + [vargs] if x is not None ) ) else: f(*tokens) elif default is not None and \ len(args) == ( len(tokens) + len(default)): f(*(tokens + list(default))) else: self.syntaxError( command, " ".join(tokens), " ".join( x for x in args + [vargs] if x is not None ) ) else: if self.ircchannel is not None: self.lines.append(Text("<%s> %s" % (self.nick, s))) self.fire(PRIVMSG(self.ircchannel, s)) else: self.lines.append(Text( "No channel joined. Try /join #<channel>"))
def wrapper(f): if names and isinstance(names[0], bool) and not names[0]: f.handler = False return f f.handler = True f.names = names f.priority = kwargs.get("priority", 0) f.channel = kwargs.get("channel", None) f.override = kwargs.get("override", False) args = getargspec(f)[0] if args and args[0] == "self": del args[0] f.event = getattr(f, "event", bool(args and args[0] == "event")) return f