]> kaliko git repositories - sid.git/blobdiff - sid/bts.py
bugs: intercepts bug id in URLs as well (closes #1)
[sid.git] / sid / bts.py
index b39197ce7a46060db3ec09205894b5f554793d85..03eef515ea078797cbcdd7cb978df6b95f60d0f7 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 # Copyright (C) 2010, 2011 AnaĆ«l Verrier <elghinn@free.fr>
-# Copyright (C) 2015, 2020 kaliko <kaliko@azylum.org>
+# Copyright (C) 2015, 2021 kaliko <kaliko@azylum.org>
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -25,21 +25,28 @@ from .plugin import Plugin, botcmd
 
 class Bugs(Plugin):
     """Gets bugs info from the BTS
+
+    .. note::
+      This plugin depends on external module: **python-debianbts**
     """
-    re_bugs = re_compile(r'(?<=#)(\d{6,7})')
+    #: Bug id regexp, intercepts bug id in strings : "#629234", "bugs.debian.org/629234" and "bugreport.cgi?bug=629234"
+    re_bugs = re_compile(r'(?:(?<=#)|(?<=bugreport\.cgi\?bug=)|(?<=bugs\.debian\.org/))(\d{6,7})')
+    #: Package name regexp
     re_pkg = re_compile(r'(?P<package>[0-9a-z.+-]+)$')
 
     def __init__(self, bot):
         Plugin.__init__(self, bot)
-        bot.add_event_handler("muc::%s::message" % self.bot.room, self.muc_message)
+        bot.add_event_handler("muc::%s::message" %
+                              self.bot.room, self.muc_message)
 
     def muc_message(self, msg):
-        """Handler method dealing with MUC incoming messages"""
+        """Handler method dealing with MUC incoming messages.
+
+        Intercepts bugs number in MUC messages (as #629234), replies a bug
+        summary."""
         # Does not reply to myself
         if msg['mucnick'] == self.bot.nick:
             return
-        if '#' not in msg['body']:
-            return
         bugs = list()
         for bug_id in set(Bugs.re_bugs.findall(msg['body'].strip())):
             self.log.debug('got bug id: %s', bug_id)
@@ -65,8 +72,9 @@ class Bugs(Plugin):
 
     @botcmd
     def bugs(self, rcv, args):
-        """Intercepts bugs number in messages (as #629234), reply a bug summary.
-        !bugs pkg-name : Returns latest bug reports if any
+        """Gets bugs info from the BTS
+
+        ``!bugs pkg-name`` : Returns latest bug reports if any
         """
         if not args:
             return
@@ -83,11 +91,9 @@ class Bugs(Plugin):
             return
         reports = debianbts.get_status(reports_ids)
         reports = sorted(reports, key=lambda r: r.date)
-        rprt_nb = len(reports)
-        msg = ['Open reports for {1} (total {0})'.format(rprt_nb, pkg.string)]
+        msg = ['Latest reports for {1} (total {0})'.format(len(reports), pkg.string)]
         # Reverse and take last reports
         for rep in reports[::-1][:4]:
             msg.append('{r.bug_num}: {r.date:%Y-%m-%d} {r.subject}'.format(r=rep))
         message = {'mbody': '\n'.join(msg)}
         self.reply(rcv, message)
-