New command tracker
authorFred <fmcell@gmail.com>
Mon, 18 Mar 2013 16:02:48 +0000 (00:02 +0800)
committerFred <fmcell@gmail.com>
Mon, 18 Mar 2013 16:04:18 +0000 (00:04 +0800)
lib/commands/__init__.py
lib/commands/tracker.py [new file with mode: 0644]

index 5ca2d87..d42d781 100644 (file)
@@ -47,6 +47,7 @@ commandsList = [
     'rebase',
     'remove',
     'run',
+    'tracker',
     'update',
     'upgrade'
 ]
diff --git a/lib/commands/tracker.py b/lib/commands/tracker.py
new file mode 100644 (file)
index 0000000..937a91a
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+Moodle Development Kit
+
+Copyright (c) 2013 Frédéric Massart - FMCorz.net
+
+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
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+http://github.com/FMCorz/mdk
+"""
+
+from datetime import datetime
+import textwrap
+import re
+from lib.command import Command
+from lib.jira import Jira
+
+
+class TrackerCommand(Command):
+
+    _arguments = [
+        (
+            ['-t', '--testing'],
+            {
+                'action': 'store_true',
+                'help': 'include testing instructions'
+            }
+        ),
+        (
+            ['issue'],
+            {
+                'help': 'MDL issue number'
+            }
+        )
+    ]
+    _description = 'Retrieve information from the tracker'
+
+    Jira = None
+    mdl = None
+
+    def run(self, args):
+        self.Jira = Jira()
+        self.mdl = 'MDL-' + re.sub(r'(MDL|mdl)(-|_)?', '', args.issue)
+        self.info(args)
+
+    def info(self, args):
+        """Display classic information about an issue"""
+        issue = self.Jira.getIssue(self.mdl)
+
+        title = u'%s: %s' % (issue['key'], issue['fields']['summary'])
+        created = datetime.strftime(Jira.parseDate(issue['fields'].get('created')), '%Y-%m-%d %H:%M')
+        resolution = u'' if issue['fields']['resolution'] == None else u'(%s)' % (issue['fields']['resolution']['name'])
+        resolutiondate = u''
+        if issue['fields'].get('resolutiondate') != None:
+            resolutiondate = datetime.strftime(Jira.parseDate(issue['fields'].get('resolutiondate')), '%Y-%m-%d %H:%M')
+        print u'-' * 72
+        for l in textwrap.wrap(title, 68, initial_indent='  ', subsequent_indent='    '):
+            print l
+        print u'  {0} - {1} - {2}'.format(issue['fields']['issuetype']['name'], issue['fields']['priority']['name'], u'https://tracker.moodle.org/browse/' + issue['key'])
+        status = u'{0} {1} {2}'.format(issue['fields']['status']['name'], resolution, resolutiondate).strip()
+        print u'  {0}'.format(status)
+        vw = u'[ V: %d - W: %d ]' % (issue['fields']['votes']['votes'], issue['fields']['watches']['watchCount'])
+        print '{0:->70}--'.format(vw)
+        print u'{0:<20}: {1} ({2}) on {3}'.format('Reporter', issue['fields']['reporter']['displayName'], issue['fields']['reporter']['name'], created)
+
+        print u'{0:<20}: {1} ({2})'.format('Assignee', issue['fields']['assignee']['displayName'], issue['fields']['assignee']['name'])
+        if issue['named'].get('Peer reviewer'):
+            print u'{0:<20}: {1} ({2})'.format('Peer reviewer', issue['named']['Peer reviewer']['displayName'], issue['named']['Peer reviewer']['name'])
+        if issue['named'].get('Integrator'):
+            print u'{0:<20}: {1} ({2})'.format('Integrator', issue['named']['Integrator']['displayName'], issue['named']['Integrator']['name'])
+        if issue['named'].get('Tester'):
+            print u'{0:<20}: {1} ({2})'.format('Tester', issue['named']['Tester']['displayName'], issue['named']['Tester']['name'])
+
+        if args.testing and issue['named'].get('Testing Instructions'):
+            print u'-' * 72
+            print u'Testing instructions:'
+            for l in issue['named'].get('Testing Instructions').split('\r\n'):
+                print '  ' + l
+
+        print u'-' * 72