Andrew Bogott has submitted this change and it was merged. Change subject: Convert all tabs to 4 spaces, and other minor PEP8 fixes. All PEP8 tests should pass now. ......................................................................
Convert all tabs to 4 spaces, and other minor PEP8 fixes. All PEP8 tests should pass now. Change-Id: I809435155799c089e1103962e1aa8b86026cf509 --- M adminlogbot.py M config.py M statusnet.py 3 files changed, 500 insertions(+), 445 deletions(-) Approvals: Andrew Bogott: Verified; Looks good to me, approved jenkins-bot: Checked diff --git a/adminlogbot.py b/adminlogbot.py index 3bea8a5..a620025 100755 --- a/adminlogbot.py +++ b/adminlogbot.py @@ -14,324 +14,363 @@ import traceback + class logbot(): + def __init__(self, name, conf): + self.name = name + self.config = conf + self.irc = irclib.IRC() - def __init__(self, name, conf): - self.name = name - self.config = conf - self.irc = irclib.IRC() + def on_connect(self, con, event): + try: + con.privmsg(self.config.nickserv, + "identify " + self.config.nick + " " + + self.config.nick_password) + except irclib.ServerNotConnectedError, e: + logging.debug("Error identifying user") + logging.debug("'%s' registering with nick '%s'." % + (self.name, self.config.nick)) + time.sleep(1) + for target in self.config.targets: + logging.debug("'%s' joining '%s'." % (self.name, target)) + con.join(target) + if con.get_nickname() != self.config.nick: + try: + con.privmsg('nickserv', 'ghost %s %s' % + (self.config.nick, + self.config.nick_password)) + except irclib.ServerNotConnectedError, e: + logging.debug("Error ghosting user") - def on_connect(self, con, event): - try: - con.privmsg(self.config.nickserv, - "identify " + self.config.nick + " " + self.config.nick_password) - except irclib.ServerNotConnectedError, e: - logging.debug("Error identifying user") - logging.debug("'%s' registering with nick '%s'." % - (self.name, self.config.nick)) - time.sleep(1) - for target in self.config.targets: - logging.debug("'%s' joining '%s'." % (self.name, target)) - con.join(target) - if con.get_nickname() != self.config.nick: - try: - con.privmsg('nickserv', 'ghost %s %s' % - (self.config.nick, self.config.nick_password)) - except irclib.ServerNotConnectedError, e: - logging.debug("Error ghosting user") + def on_quit(self, con, event): + source = irclib.nm_to_n(event.source()) + if source == self.config.nick: + con.nick(self.config.nick) - def on_quit(self, con, event): - source = irclib.nm_to_n(event.source()) - if source == self.config.nick: - con.nick(self.config.nick) + def switch_nick(self, con, event): + con.nick(con.get_nickname() + "_") + logging.debug("'%s' switching nick." % self.name) + try: + con.privmsg('nickserv', 'ghost %s %s' % + (self.config.nick, + self.config.nick_password)) + except irclib.ServerNotConnectedError, e: + logging.debug("Error ghosting user") - def switch_nick(self, con, event): - con.nick(con.get_nickname() + "_") - logging.debug("'%s' switching nick." % self.name) - try: - con.privmsg('nickserv', 'ghost %s %s' % - (self.config.nick, self.config.nick_password)) - except irclib.ServerNotConnectedError, e: - logging.debug("Error ghosting user") + def get_cloak(self, source): + if re.search("/", source) and re.search("@", source): + return source.split("@")[1] - def get_cloak(self, source): - if re.search("/", source) and re.search("@", source): - return source.split("@")[1] + def ask_encode(self, query): + matches = {'[': '-5B', ']': '-5D', + ' ': '-20', '|': '/', + '=': '%3D', '?': '-3F', + '\n': '%0A', '\r': '%0D'} + for match, replace in matches.iteritems(): + query = query.replace(match, replace) + return query - def ask_encode(self, query): - matches = {'[': '-5B', ']': '-5D', - ' ': '-20', '|': '/', - '=': '%3D', '?': '-3F', - '\n': '%0A', '\r': '%0D'} - for match, replace in matches.iteritems(): - query = query.replace(match, replace) - return query + def get_query(self, query): + if not query: + return {} + query = self.ask_encode(query) + url = "%s://%s%s%s", (self.config.wiki_connection[0], + self.config.wiki_connection[1], + self.config.wiki_query_path, query) + return self.get_json_from_url(url) - def get_query(self, query): - if not query: - return {} - query = self.ask_encode(query) - url = "%s://%s%s%s", (self.config.wiki_connection[0], - self.config.wiki_connection[1], - self.config.wiki_query_path, query) - return self.get_json_from_url(url) + def get_json_from_url(self, url): + if not url: + return {} + f = urllib.urlopen(url) + results = f.read() + return json.loads(results) - def get_json_from_url(self, url): - if not url: - return {} - f = urllib.urlopen(url) - results = f.read() - return json.loads(results) + def find_user(self, author, cloak, user_json): + for result in user_json['items']: + username = result["label"] + usernick = result["irc_nick"][0] + usercloak = result["irc_cloak"][0] + if author == usernick or cloak == usercloak: + return username + return '' - def find_user(self, author, cloak, user_json): - for result in user_json['items']: - username = result["label"] - usernick = result["irc_nick"][0] - usercloak = result["irc_cloak"][0] - if author == usernick or cloak == usercloak: - return username - return '' + def is_stale(self, cache_filename): + if os.path.exists(cache_filename): + stat = os.stat(cache_filename) + now = time.time() + mtime = stat.st_mtime + if mtime > now - 300: + return False + else: + return True + else: + return True - def is_stale(self, cache_filename): - if (os.path.exists(cache_filename)): - stat = os.stat(cache_filename) - now = time.time() - mtime = stat.st_mtime - if mtime > now - 300: - return False - else: - return True - else: - return True + def on_msg(self, con, event): + if event.target() not in self.config.targets: + return + author, rest = event.source().split('!') + cloak = self.get_cloak(event.source()) + if author in self.config.author_map: + author = self.config.author_map[author] + line = event.arguments()[0].decode("utf8") - def on_msg(self, con, event): - if event.target() not in self.config.targets: - return - author, rest = event.source().split('!') - cloak = self.get_cloak(event.source()) - if author in self.config.author_map: - author = self.config.author_map[author] - line = event.arguments()[0].decode("utf8") + if (line.startswith(self.config.nick) or + line.startswith("!%s" % self.config.nick) or + line.lower() == "!log help"): + logging.debug("'%s' got '%s'; displaying help message." % + (self.name, line)) + try: + self.server.privmsg(event.target(), + "I am a logbot running on %s." % + gethostname()) + self.server.privmsg(event.target(), + "Messages are logged to %s." % + self.config.log_url) + self.server.privmsg(event.target(), + "To log a message, type !log <msg>.") + except Exception: + try: + self.server.privmsg(event.target(), + "To log a message, type !log <msg>.") + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error " + "when sending message") + elif line.lower().startswith("!log "): + logging.debug("'%s' got '%s'; Attempting to log." % + (self.name, line)) + if self.config.check_users: + try: + cache_filename = '%s/%s-users_json.cache' %\ + (self.config.cachedir, self.name) + except AttributeError: + cache_filename = '/var/lib/adminbot/%s-users_json.cache' %\ + self.name - if (line.startswith(self.config.nick) or - line.startswith("!%s" % self.config.nick) or - line.lower() == "!log help"): - logging.debug("'%s' got '%s'; displaying help message." % (self.name, line)) - try: - self.server.privmsg(event.target(), - "I am a logbot running on %s." % gethostname()) - self.server.privmsg(event.target(), - "Messages are logged to %s." % self.config.log_url) - self.server.privmsg(event.target(), - "To log a message, type !log <msg>.") - except Exception: - try: - self.server.privmsg(event.target(), - "To log a message, type !log <msg>.") - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - elif line.lower().startswith("!log "): - logging.debug("'%s' got '%s'; Attempting to log." % (self.name, line)) - if self.config.check_users: - try: - cache_filename = '%s/%s-users_json.cache' % (self.config.cachedir, self.name) - except AttributeError: - cache_filename = '/var/lib/adminbot/%s-users_json.cache' % self.name + cache_stale = self.is_stale(cache_filename) + if cache_stale: + user_json = '' + user_json_cache_file = open(cache_filename, 'w+') + if self.config.user_query: + user_json = self.get_query(self.config.user_query) + elif self.config.user_url: + user_json = self.get_json_from_url( + self.config.user_url) + user_json_cache_file.write(json.dumps(user_json)) + else: + user_json_cache_file = open(cache_filename, 'r') + user_json = user_json_cache_file.read() + if user_json: + user_json = json.loads(user_json) + user_json_cache_file.close() + username = self.find_user(author, cloak, user_json) + if username: + author = "[[" + username + "]]" + else: + try: + if self.config.required_users_mode == "warn": + self.server.privmsg(event.target(), + "Not a trusted nick or cloak." + " This is just a warning," + " for now." + " Please add your nick" + " or cloak added" + " to the trust list" + " or your user page.") + if self.config.required_users_mode == "error": + self.server.privmsg(event.target(), + "Not a trusted nick" + " or cloak. Not logging." + " Please add your nick" + " or cloak added" + " to the trust list" + " or your user page.") + return + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error" + " when sending message") + if self.config.enable_projects: + arr = line.split(" ", 2) + try: + if len(arr) < 2: + self.server.privmsg(event.target(), + "Project not found, O.o. Try !log" + " <project> <message> next time.") + return + if len(arr) < 3: + self.server.privmsg(event.target(), + "Message missing. Nothing logged.") + return + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error" + " when sending message") + project = arr[1] + try: + cache_filename = '%s/%s-users_json.cache' %\ + (self.config.cachedir, self.name) + except AttributeError: + cache_filename = '/var/lib/adminbot/%s-project.cache' %\ + self.name + cache_stale = self.is_stale(cache_filename) + if not cache_stale: + project_cache_file = open(cache_filename, + 'r') + project_cache = project_cache_file.read() + project_cache_file.close() + projects = project_cache.split(',') + if cache_stale: + project_cache_file = open(cache_filename, 'w+') + ldapSupportLib = ldapsupportlib.LDAPSupportLib() + base = ldapSupportLib.getBase() + ds = ldapSupportLib.connect() + try: + projects = [] + projectdata = ds.search_s(self.config.project_rdn + + "," + base, + ldap.SCOPE_SUBTREE, + "(objectclass=groupofnames)") + if not projectdata: + self.server.privmsg(event.target(), + "Can't contact LDAP" + " for project list.") + for obj in projectdata: + projects.append(obj[1]["cn"][0]) + project_cache_file.write(','.join(projects)) + except Exception: + try: + self.server.privmsg(event.target(), + "Error reading project" + " list from LDAP.") + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error" + " when sending message") + if project not in projects: + try: + self.server.privmsg(event.target(), + project + + " is not a valid project.") + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error" + " when sending message") + return + message = arr[2] + else: + arr = line.split(" ", 1) + if len(arr) < 2: + try: + self.server.privmsg(event.target(), + "Message missing. Nothing logged.") + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error" + " when sending message") + return + project = "" + message = arr[1] + try: + adminlog.log(self.config, message, project, author) + if author in self.config.title_map: + title = self.config.title_map[author] + else: + title = "Master" + try: + self.server.privmsg(event.target(), + "Logged the message, %s" % title) + except irclib.ServerNotConnectedError, e: + logging.debug("Server connection error" + " when sending message") + except Exception: + traceback.print_exc() + logging.warning(sys.exc_info) - cache_stale = self.is_stale(cache_filename) - if cache_stale: - user_json = '' - user_json_cache_file = open(cache_filename, 'w+') - if self.config.user_query: - user_json = self.get_query(self.config.user_query) - elif self.config.user_url: - user_json = self.get_json_from_url(self.config.user_url) - user_json_cache_file.write(json.dumps(user_json)) - else: - user_json_cache_file = open(cache_filename, 'r') - user_json = user_json_cache_file.read() - if user_json: - user_json = json.loads(user_json) - user_json_cache_file.close() - username = self.find_user(author, cloak, user_json) - if username: - author = "[[" + username + "]]" - else: - try: - if self.config.required_users_mode == "warn": - self.server.privmsg(event.target(), - "Not a trusted nick or cloak. This is just a warning, for now." - " Please add your nick or cloak added" - " to the trust list or your user page.") - if self.config.required_users_mode == "error": - self.server.privmsg(event.target(), - "Not a trusted nick or cloak. Not logging." - " Please add your nick or cloak added" - " to the trust list or your user page.") - return - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - if self.config.enable_projects: - arr = line.split(" ", 2) - try: - if len(arr) < 2: - self.server.privmsg(event.target(), - "Project not found, O.o. Try !log <project> <message> next time.") - return - if len(arr) < 3: - self.server.privmsg(event.target(), - "Message missing. Nothing logged.") - return - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - project = arr[1] - try: - cache_filename = '%s/%s-users_json.cache' % (self.config.cachedir, self.name) - except AttributeError: - cache_filename = '/var/lib/adminbot/%s-project.cache' % self.name - cache_stale = self.is_stale(cache_filename) - if not cache_stale: - project_cache_file = open(cache_filename, - 'r') - project_cache = project_cache_file.read() - project_cache_file.close() - projects = project_cache.split(',') - if cache_stale: - project_cache_file = open(cache_filename, 'w+') - ldapSupportLib = ldapsupportlib.LDAPSupportLib() - base = ldapSupportLib.getBase() - ds = ldapSupportLib.connect() - try: - projects = [] - projectdata = ds.search_s(self.config.project_rdn + "," + base, - ldap.SCOPE_SUBTREE, "(objectclass=groupofnames)") - if not projectdata: - self.server.privmsg(event.target(), - "Can't contact LDAP for project list.") - for obj in projectdata: - projects.append(obj[1]["cn"][0]) - project_cache_file.write(','.join(projects)) - except Exception: - try: - self.server.privmsg(event.target(), - "Error reading project list from LDAP.") - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - if project not in projects: - try: - self.server.privmsg(event.target(), - project + " is not a valid project.") - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - return - message = arr[2] - else: - arr = line.split(" ", 1) - if len(arr) < 2: - try: - self.server.privmsg(event.target(), "Message missing. Nothing logged.") - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - return - project = "" - message = arr[1] - try: - adminlog.log(self.config, message, project, author) - if author in self.config.title_map: - title = self.config.title_map[author] - else: - title = "Master" - try: - self.server.privmsg(event.target(), "Logged the message, %s" % title) - except irclib.ServerNotConnectedError, e: - logging.debug("Server connection error when sending message") - except Exception: - traceback.print_exc() - logging.warning(sys.exc_info) + def connect(self): + self.server = self.irc.server() + self.server.add_global_handler("welcome", self.on_connect) + self.server.add_global_handler("pubmsg", self.on_msg) + self.server.add_global_handler("nicknameinuse", self.switch_nick) + self.server.add_global_handler("nickcollision", self.switch_nick) + self.server.add_global_handler("unavailresource", self.switch_nick) + self.server.add_global_handler("part", self.on_quit) + self.server.add_global_handler("kick", self.on_quit) + self.server.add_global_handler("disconnect", self.on_quit) + self.server.add_global_handler("quit", self.on_quit) - def connect(self): - self.server = self.irc.server() - self.server.add_global_handler("welcome", self.on_connect) - self.server.add_global_handler("pubmsg", self.on_msg) - self.server.add_global_handler("nicknameinuse", self.switch_nick) - self.server.add_global_handler("nickcollision", self.switch_nick) - self.server.add_global_handler("unavailresource", self.switch_nick) - self.server.add_global_handler("part", self.on_quit) - self.server.add_global_handler("kick", self.on_quit) - self.server.add_global_handler("disconnect", self.on_quit) - self.server.add_global_handler("quit", self.on_quit) - - self.server.connect(self.config.network, - self.config.port, - self.config.nick) + self.server.connect(self.config.network, + self.config.port, + self.config.nick) parser = argparse.ArgumentParser(description='IRC log bot.', - epilog='When run without args it will enumerate bot configs in /etc/adminbot.') -parser.add_argument('--config', dest='confarg', type=str, help='config file that describes a single logbot') + epilog='When run without args it will' + ' enumerate bot configs' + ' in /etc/adminbot.') +parser.add_argument('--config', dest='confarg', type=str, + help='config file that describes a single logbot') args = parser.parse_args() bots = [] enable_projects = False if 'confarg' in args: - # Use the one config the user requested. - confdir = os.path.dirname(args.confarg) - fname = os.path.basename(args.confarg) - split = os.path.splitext(fname) - module = split[0] - conf = imp.load_source(module, confdir + "/" + fname) + # Use the one config the user requested. + confdir = os.path.dirname(args.confarg) + fname = os.path.basename(args.confarg) + split = os.path.splitext(fname) + module = split[0] + conf = imp.load_source(module, confdir + "/" + fname) - # discard if this isn't actually a bot config file - if not 'targets' in conf.__dict__: - logging.error("%s does not appear to be a valid bot config." % args.confarg) - exit(1) + # discard if this isn't actually a bot config file + if not 'targets' in conf.__dict__: + logging.error("%s does not appear to be a valid bot config." % + args.confarg) + exit(1) - if ('enable_projects' in conf.__dict__) and conf.enable_projects: - enable_projects = True + if ('enable_projects' in conf.__dict__) and conf.enable_projects: + enable_projects = True - bots.append(logbot(module, conf)) - logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) + bots.append(logbot(module, conf)) + logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) else: - # Enumerate bot configs in /etc/adminbot; - # Create a logbot object for each. - sys.path.append('/etc/adminbot') - confdir = '/etc/adminbot' - configfiles = os.listdir(confdir) - for fname in configfiles: - split = os.path.splitext(fname) - if split[1] == ".py": - module = split[0] - conf = imp.load_source(module, confdir + "/" + fname) + # Enumerate bot configs in /etc/adminbot; + # Create a logbot object for each. + sys.path.append('/etc/adminbot') + confdir = '/etc/adminbot' + configfiles = os.listdir(confdir) + for fname in configfiles: + split = os.path.splitext(fname) + if split[1] == ".py": + module = split[0] + conf = imp.load_source(module, confdir + "/" + fname) - # discard if this isn't actually a bot config file - if not 'targets' in conf.__dict__: - continue + # discard if this isn't actually a bot config file + if not 'targets' in conf.__dict__: + continue - bots.append(logbot(module, conf)) + bots.append(logbot(module, conf)) - if ('enable_projects' in conf.__dict__) and conf.enable_projects: - enable_projects = True - logging.basicConfig(filename="/var/log/adminbot.log", level=logging.DEBUG) + if ('enable_projects' in conf.__dict__) and conf.enable_projects: + enable_projects = True + logging.basicConfig(filename="/var/log/adminbot.log", level=logging.DEBUG) if not bots: - logging.error("No config files found, so nothing to do.") - sys.exit(1) + logging.error("No config files found, so nothing to do.") + sys.exit(1) if enable_projects: - import os - import ldap - sys.path.append('/usr/local/sbin/') - import ldapsupportlib + import os + import ldap + + sys.path.append('/usr/local/sbin/') + import ldapsupportlib for bot in bots: - logging.debug("'%s' starting" % bot.name) - bot.connect() + logging.debug("'%s' starting" % bot.name) + bot.connect() while True: - time.sleep(.1) - for bot in bots: - try: - bot.irc.process_once() - except: - traceback.print_exc() - logging.warning(sys.exc_info) + time.sleep(.1) + for bot in bots: + try: + bot.irc.process_once() + except: + traceback.print_exc() + logging.warning(sys.exc_info) diff --git a/config.py b/config.py index edd93f6..41eae68 100644 --- a/config.py +++ b/config.py @@ -72,7 +72,8 @@ check_users = False # A semantic query to use to search the wiki for a trust list; example: -# user_query = "[[IRC Nick::+]] or [[IRC Cloak::+]]|?IRC Nick|?IRC Cloak|limit=500|format=json" +# user_query = ("[[IRC Nick::+]] or [[IRC Cloak::+]]|?IRC Nick|?IRC Cloak +# "|limit=500|format=json") user_query = "" # The query path URL; example: diff --git a/statusnet.py b/statusnet.py index bcf5147..34628c6 100644 --- a/statusnet.py +++ b/statusnet.py @@ -6,212 +6,227 @@ from sys import version_info if version_info[0] < 3: - from urllib import urlencode + from urllib import urlencode else: - from urllib.parse import urlencode + from urllib.parse import urlencode + def p_ready(p): - if p.poll() is not None or len(select([p.stdout], [], [], 0)[0]) > 0: - return True - else: - return False + if p.poll() is not None or len(select([p.stdout], [], [], 0)[0]) > 0: + return True + else: + return False + def success(data): - if 'error' in data: - return False - else: - return True + if 'error' in data: + return False + else: + return True + def to_json(data): - try: - data = json.loads(str(data.decode('utf8'))) - return data - except: - errstr = "<div class='error'>" + try: + data = json.loads(str(data.decode('utf8'))) + return data + except: + errstr = "<div class='error'>" - if version_info[0] == 3: - errstr = bytes(errstr, 'utf8') + if version_info[0] == 3: + errstr = bytes(errstr, 'utf8') - if errstr in data: - error = data.replace(errstr, '')[:-6] - return {'error':error} - else: - return {'error':"unknown error"} + if errstr in data: + error = data.replace(errstr, '')[:-6] + return {'error': error} + else: + return {'error': "unknown error"} + class StatusNet: - def __init__(self, acc): - if type(acc) is dict: - self.acc = acc - else: - return None - self.source = 'python-statusnet' - self.ext = '.json' + def __init__(self, acc): + if type(acc) is dict: + self.acc = acc + else: + return None + self.source = 'python-statusnet' + self.ext = '.json' - def _request(self, path, params=None, post=None): - auth_str = ':'.join( (self.acc['user'], self.acc['passwd']) ) + def _request(self, path, params=None, post=None): + auth_str = ':'.join((self.acc['user'], self.acc['passwd'])) - url = os.path.join(self.acc['api'], path) - url += self.ext - if params is not None: - url += "?"+urlencode(params) + url = os.path.join(self.acc['api'], path) + url += self.ext + if params is not None: + url += "?" + urlencode(params) - cmd = ['curl', '-s', '-u', auth_str, url] + cmd = ['curl', '-s', '-u', auth_str, url] - if post is not None and type(post) is dict: - cmd.append('-d') - cmd.append(urlencode(post)) + if post is not None and type(post) is dict: + cmd.append('-d') + cmd.append(urlencode(post)) - return Popen(cmd, stdout=PIPE) + return Popen(cmd, stdout=PIPE) - # account verification - def verify_creds(self): - return self._request("account/verify_credentials") + # account verification + def verify_creds(self): + return self._request("account/verify_credentials") - # notices - def get(self, notice_id): - return self._request("statuses/show/"+str(notice_id)) + # notices + def get(self, notice_id): + return self._request("statuses/show/" + str(notice_id)) - def update(self, status, replyid=None): - data = { 'status': status, - 'in_reply_to_status_id': replyid, - 'source': self.source } - if replyid is not None: - data['in_reply_to_status_id'] = replyid - return self._request("statuses/update", post=data) + def update(self, status, replyid=None): + data = {'status': status, + 'in_reply_to_status_id': replyid, + 'source': self.source, + } + if replyid is not None: + data['in_reply_to_status_id'] = replyid + return self._request("statuses/update", post=data) - def repeat(self, nid): - data = {'source': self.source} - return self._request("statuses/retweet/{0}".format(nid), post=data) + def repeat(self, nid): + data = {'source': self.source} + return self._request("statuses/retweet/{0}".format(nid), post=data) - def delete(self, notice_id): - data = { 'id': notice_id } - return self._request("statuses/destroy/{0}".format(notice_id), post=data) + def delete(self, notice_id): + data = {'id': notice_id} + return self._request("statuses/destroy/{0}".format(notice_id), + post=data) - # direct messages - def direct(self, user, msg): - data = { 'screen_name': user - , 'text': msg } - return self._request("direct_messages/new", post=data) + # direct messages + def direct(self, user, msg): + data = {'screen_name': user, + 'text': msg, + } + return self._request("direct_messages/new", post=data) # def delete_direct(self, acc, id): -# return self._request(acc, "direct_messages/destroy/"+str(id)) +# return self._request(acc, "direct_messages/destroy/"+str(id)) - # timelines - def home(self, page=1, count=20): - data = { 'page': page - , 'count': count } - return self._request("statuses/friends_timeline", data) + # timelines + def home(self, page=1, count=20): + data = {'page': page, 'count': count, + } + return self._request("statuses/friends_timeline", data) - def mentions(self, page=1, count=20, show_repeats=0): - data = { 'page': page - , 'count': count - , 'include_rts': show_repeats } - return self._request("statuses/mentions", data) + def mentions(self, page=1, count=20, show_repeats=0): + data = {'page': page, + 'count': count, + 'include_rts': show_repeats, + } + return self._request("statuses/mentions", data) - def user_tl(self, user, page=1, count=20, show_repeats=0): - data = { 'screen_name': user - , 'page': page - , 'count': count - , 'include_rts': show_repeats } - return self._request("statuses/user_timeline", data) + def user_tl(self, user, page=1, count=20, show_repeats=0): + data = {'screen_name': user, + 'page': page, + 'count': count, + 'include_rts': show_repeats, + } + return self._request("statuses/user_timeline", data) - def inbox(self, page=1, count=20): - data = { 'page': page - , 'count': count } - return self._request("direct_messages", data) + def inbox(self, page=1, count=20): + data = {'page': page, + 'count': count, + } + return self._request("direct_messages", data) - def outbox(self, page=1, count=20): - data = { 'page': page - , 'count': count } - return self._request("direct_messages/sent", data) + def outbox(self, page=1, count=20): + data = {'page': page, + 'count': count, + } + return self._request("direct_messages/sent", data) - def public(self, page=1, count=20): - data = { 'page': page - , 'count': count } - return self._request("statuses/public_timeline", data) + def public(self, page=1, count=20): + data = {'page': page, + 'count': count, + } + return self._request("statuses/public_timeline", data) - # friends + followers - def friends(self, user): - data = { 'screen_name': user } - return self._request("statuses/friends", data) + # friends + followers + def friends(self, user): + data = {'screen_name': user} + return self._request("statuses/friends", data) - def followers(self, user): - data = { 'screen_name': user } - return self._request("statuses/followers", data) + def followers(self, user): + data = {'screen_name': user} + return self._request("statuses/followers", data) - # groups - def groups(self, user=None, page=1): - data = { 'page': page } - if user is not None: - data['screen_name'] = user - else: - data['screen_name'] = self.acc['user'] - return self._request("statusnet/groups/list", data) + # groups + def groups(self, user=None, page=1): + data = {'page': page} + if user is not None: + data['screen_name'] = user + else: + data['screen_name'] = self.acc['user'] + return self._request("statusnet/groups/list", data) - def group_tl(self, group, page=1, count=20): - data = { 'page': page - , 'count': count } - return self._request("statusnet/groups/timeline/"+group, data) + def group_tl(self, group, page=1, count=20): + data = {'page': page, + 'count': count, + } + return self._request("statusnet/groups/timeline/" + group, data) - def group_join(self, group): - return self._request("statusnet/groups/join/"+group) + def group_join(self, group): + return self._request("statusnet/groups/join/" + group) - def group_leave(self, group): - return self._request("statusnet/groups/leave/"+group) + def group_leave(self, group): + return self._request("statusnet/groups/leave/" + group) - # subscriptions - def follow(self, user_id): - data = { 'user_id': user_id } - return self._request("friendships/create", post=data) + # subscriptions + def follow(self, user_id): + data = {'user_id': user_id} + return self._request("friendships/create", post=data) - def unfollow(self, user_id): - data = { 'user_id': user_id } - return self._request("friendships/destroy", post=data) + def unfollow(self, user_id): + data = {'user_id': user_id} + return self._request("friendships/destroy", post=data) - # favorites - def favorites(self, user=None, page=1): - data = { 'page': page } - if user is not None: - return self._request("favorites/"+user, data) - else: - return self._request("favorites", data) + # favorites + def favorites(self, user=None, page=1): + data = {'page': page} + if user is not None: + return self._request("favorites/" + user, data) + else: + return self._request("favorites", data) - def favorite(self, notice_id): - data = { 'id': notice_id } - return self._request("favorites/create/"+str(notice_id), post=data) + def favorite(self, notice_id): + data = {'id': notice_id} + return self._request("favorites/create/" + str(notice_id), post=data) - def unfavorite(self, notice_id): - data = { 'id': notice_id } - return self._request("favorites/destroy/"+str(notice_id), post=data) + def unfavorite(self, notice_id): + data = {'id': notice_id} + return self._request("favorites/destroy/" + str(notice_id), post=data) - # blocks - def block(self, user_id): - data = { 'user_id': user_id } - return self._request("blocks/create", post=data) + # blocks + def block(self, user_id): + data = {'user_id': user_id} + return self._request("blocks/create", post=data) - def unblock(self, user_id): - data = { 'user_id': user_id } - return self._request("blocks/destroy", post=data) + def unblock(self, user_id): + data = {'user_id': user_id} + return self._request("blocks/destroy", post=data) -# def get_blocks(self, page=1): -# data = { "page": page } -# return self._request("blocks/blocking", data) + # def get_blocks(self, page=1): + # data = { "page": page} + # return self._request("blocks/blocking", data) - # searches - def search(self, query, page=1, count=20): - data = { 'q': query - , 'page': page - , 'count': count } - return self._request("search", data) + # searches + def search(self, query, page=1, count=20): + data = {'q': query, + 'page': page, + 'count': count, + } + return self._request("search", data) - def tag_tl(self, tag, page=1, count=20): - data = { 'page': page - , 'count': count } - return self._request("statusnet/tags/timeline/"+tag, data) + def tag_tl(self, tag, page=1, count=20): + data = {'page': page, + 'count': count, + } + return self._request("statusnet/tags/timeline/" + tag, data) - # profile / config - def update_profile(self, data): - return self._request("account/update_profile", data) + # profile / config + def update_profile(self, data): + return self._request("account/update_profile", data) - def config(self): - return self._request("statusnet/config") + def config(self): + return self._request("statusnet/config") -- To view, visit https://gerrit.wikimedia.org/r/59371 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I809435155799c089e1103962e1aa8b86026cf509 Gerrit-PatchSet: 2 Gerrit-Project: operations/debs/adminbot Gerrit-Branch: master Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com> Gerrit-Reviewer: Andrew Bogott <abog...@wikimedia.org> Gerrit-Reviewer: MZMcBride <w...@mzmcbride.com> Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits