You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2013/09/19 17:31:55 UTC
[13/23] git commit: [#6535] ticket:424 Import events
[#6535] ticket:424 Import events
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/ae6b9e1f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/ae6b9e1f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/ae6b9e1f
Branch: refs/heads/master
Commit: ae6b9e1f0811a0f21541cb1fd6d093c66f9b793c
Parents: 2c831e3
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 17 14:54:34 2013 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Thu Sep 19 14:46:51 2013 +0000
----------------------------------------------------------------------
ForgeImporters/forgeimporters/github/tracker.py | 30 ++++++++++++++
.../forgeimporters/tests/github/test_tracker.py | 41 +++++++++++++++++++-
2 files changed, 70 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ae6b9e1f/ForgeImporters/forgeimporters/github/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/tracker.py b/ForgeImporters/forgeimporters/github/tracker.py
index 36014be..6c7cf73 100644
--- a/ForgeImporters/forgeimporters/github/tracker.py
+++ b/ForgeImporters/forgeimporters/github/tracker.py
@@ -105,6 +105,7 @@ class GitHubTrackerImporter(ToolImporter):
ticket_num=ticket_num)
self.process_fields(ticket, issue)
self.process_comments(extractor, ticket, issue)
+ self.process_events(extractor, ticket, issue)
self.process_milestones(ticket, issue)
session(ticket).flush(ticket)
session(ticket).expunge(ticket)
@@ -117,6 +118,12 @@ class GitHubTrackerImporter(ToolImporter):
finally:
M.session.artifact_orm_session._get().skip_mod_date = False
+ def parse_datetime(self, datetime_string):
+ return datetime.strptime(datetime_string, '%Y-%m-%dT%H:%M:%SZ')
+
+ def get_user_link(self, user):
+ return u'[{0}](https://github.com/{0})'.format(user)
+
def process_fields(self, ticket, issue):
ticket.summary = issue['title']
ticket.status = issue['state']
@@ -155,6 +162,29 @@ class GitHubTrackerImporter(ToolImporter):
)
p.add_multiple_attachments(attachments)
+ def process_events(self, extractor, ticket, issue):
+ for event in extractor.iter_events(issue):
+ prefix = text = ''
+ if event['event'] in ('reopened', 'closed'):
+ prefix = '*Ticket changed by: {}*\n\n'.format(
+ self.get_user_link(event['actor']['login']))
+ if event['event'] == 'reopened':
+ text = '- **status**: closed --> open'
+ elif event['event'] == 'closed':
+ text = '- **status**: open --> closed'
+ elif event['event'] == 'assigned':
+ text = '- **assigned_to**: {}'.format(
+ self.get_user_link(event['actor']['login']))
+
+ text = prefix + text
+ if not text:
+ continue
+ ticket.discussion_thread.add_post(
+ text = text,
+ ignore_security = True,
+ timestamp = self.parse_datetime(event['created_at'])
+ )
+
def process_milestones(self, ticket, issue):
if issue['milestone']:
title = issue['milestone']['title']
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ae6b9e1f/ForgeImporters/forgeimporters/tests/github/test_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/github/test_tracker.py b/ForgeImporters/forgeimporters/tests/github/test_tracker.py
index 9059a99..1376e55 100644
--- a/ForgeImporters/forgeimporters/tests/github/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/github/test_tracker.py
@@ -130,4 +130,43 @@ class TestTrackerImporter(TestCase):
text='*Originally posted by: [me](https://github.com/me)*\nhello',
timestamp=datetime(2013, 8, 26, 16, 57, 53),
ignore_security=True,
- ))
\ No newline at end of file
+ ))
+
+ def test_process_events(self):
+ ticket = mock.Mock()
+ extractor = mock.Mock()
+ issue = {'events_url': '/events'}
+ extractor.iter_events.return_value = [
+ {
+ 'actor': {'login': 'darth'},
+ 'created_at': '2013-09-12T09:58:49Z',
+ 'event': 'closed',
+ },
+ {
+ 'actor': {'login': 'yoda'},
+ 'created_at': '2013-09-12T10:13:20Z',
+ 'event': 'reopened',
+ },
+ {
+ 'actor': {'login': 'luke'},
+ 'created_at': '2013-09-12T10:14:00Z',
+ 'event': 'assigned',
+ },
+ ]
+ importer = tracker.GitHubTrackerImporter()
+ importer.process_events(extractor, ticket, issue)
+ args = ticket.discussion_thread.add_post.call_args_list
+ self.assertEqual(args[0], mock.call(
+ text='*Ticket changed by: [darth](https://github.com/darth)*\n\n'
+ '- **status**: open --> closed',
+ timestamp=datetime(2013, 9, 12, 9, 58, 49),
+ ignore_security=True))
+ self.assertEqual(args[1], mock.call(
+ text='*Ticket changed by: [yoda](https://github.com/yoda)*\n\n'
+ '- **status**: closed --> open',
+ timestamp=datetime(2013, 9, 12, 10, 13, 20),
+ ignore_security=True))
+ self.assertEqual(args[2], mock.call(
+ text='- **assigned_to**: [luke](https://github.com/luke)',
+ timestamp=datetime(2013, 9, 12, 10, 14, 0),
+ ignore_security=True))