You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/08/20 19:45:51 UTC
[21/22] git commit: [#6464] Handle non-linked Google users in tracker
import
[#6464] Handle non-linked Google users in tracker import
Signed-off-by: Cory Johns <cj...@slashdotmedia.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/a013355d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/a013355d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/a013355d
Branch: refs/heads/cj/6464
Commit: a013355df0cc75711cecd6dfe7f97119701d55ae
Parents: 5cd1709
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Fri Aug 16 20:02:17 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Tue Aug 20 17:34:14 2013 +0000
----------------------------------------------------------------------
.../forgeimporters/google/__init__.py | 19 +++++++++----
ForgeImporters/forgeimporters/google/tracker.py | 4 +--
.../tests/data/google/empty-issue.html | 2 +-
.../tests/google/functional/test_tracker.py | 2 +-
.../tests/google/test_extractor.py | 29 +++++++++++++++-----
.../forgeimporters/tests/google/test_tracker.py | 11 ++------
6 files changed, 43 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a013355d/ForgeImporters/forgeimporters/google/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/__init__.py b/ForgeImporters/forgeimporters/google/__init__.py
index 7234dc8..22be7c2 100644
--- a/ForgeImporters/forgeimporters/google/__init__.py
+++ b/ForgeImporters/forgeimporters/google/__init__.py
@@ -198,7 +198,7 @@ class GoogleCodeProjectExtractor(ProjectExtractor):
return self.get_issue_created_date()
def get_issue_creator(self):
- a = self.page.find(id='hc0').find('a', 'userlink')
+ a = self.page.find(id='hc0').find(True, 'userlink')
return UserLink(a)
def get_issue_status(self):
@@ -209,7 +209,7 @@ class GoogleCodeProjectExtractor(ProjectExtractor):
return ''
def get_issue_owner(self):
- tag = self.page.find(id='issuemeta').find('th', text=re.compile('Owner:')).findNext().a
+ tag = self.page.find(id='issuemeta').find('th', text=re.compile('Owner:')).findNext().find(True, 'userlink')
if tag:
return UserLink(tag)
else:
@@ -233,11 +233,20 @@ class GoogleCodeProjectExtractor(ProjectExtractor):
class UserLink(object):
def __init__(self, tag):
self.name = tag.string.strip()
- self.link = urljoin(GoogleCodeProjectExtractor.BASE_URL, tag.get('href'))
+ if 'href' in tag.attrMap:
+ self.url = urljoin(GoogleCodeProjectExtractor.BASE_URL, tag.attrMap['href'])
+ else:
+ self.url = None
+
+ def __str__(self):
+ if self.url:
+ return '[{name}]({url})'.format(name = self.name, url = self.url)
+ else:
+ return self.name
class Comment(object):
def __init__(self, tag):
- self.author = UserLink(tag.find('span', 'author').find('a', 'userlink'))
+ self.author = UserLink(tag.find('span', 'author').find(True, 'userlink'))
self.created_date = tag.find('span', 'date').get('title')
self.body = _as_text(tag.find('pre')).strip()
self._get_updates(tag)
@@ -262,7 +271,7 @@ class Comment(object):
@property
def annotated_text(self):
text = (
- u'*Originally posted by:* [{author.name}]({author.link})\n'
+ u'*Originally posted by:* {author}\n'
u'\n'
u'{body}\n'
u'\n'
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a013355d/ForgeImporters/forgeimporters/google/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/tracker.py b/ForgeImporters/forgeimporters/google/tracker.py
index 3257c5a..3d9843c 100644
--- a/ForgeImporters/forgeimporters/google/tracker.py
+++ b/ForgeImporters/forgeimporters/google/tracker.py
@@ -86,11 +86,11 @@ class GoogleCodeTrackerImporter(ToolImporter):
ticket.mod_date = datetime.strptime(issue.get_issue_mod_date(), '%c')
owner = issue.get_issue_owner()
if owner:
- owner_line = '*Originally owned by:* [{owner.name}]({owner.link})\n'.format(owner=owner)
+ owner_line = '*Originally owned by:* {owner}\n'.format(owner=owner)
else:
owner_line = ''
ticket.description = (
- u'*Originally created by:* [{creator.name}]({creator.link})\n'
+ u'*Originally created by:* {creator}\n'
u'{owner}'
u'\n'
u'{body}').format(
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a013355d/ForgeImporters/forgeimporters/tests/data/google/empty-issue.html
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/data/google/empty-issue.html b/ForgeImporters/forgeimporters/tests/data/google/empty-issue.html
index a8fb1d5..b2eef20 100644
--- a/ForgeImporters/forgeimporters/tests/data/google/empty-issue.html
+++ b/ForgeImporters/forgeimporters/tests/data/google/empty-issue.html
@@ -240,7 +240,7 @@ contributes to open source, such as <a href="http://www.firefox.com">Firefox</a>
Reported by
- <a class="userlink" href="/u/101557263855536553789/">john...@gmail.com</a>,
+ <span class="userlink">john...@gmail.com</span>,
<span class="date" title="Thu Aug 8 14:56:23 2013">Today (15 minutes ago)</span>
</div>
<pre>
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a013355d/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py b/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
index 62c4453..80a8747 100644
--- a/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/google/functional/test_tracker.py
@@ -70,7 +70,7 @@ class TestGCTrackerImporter(TestCase):
def test_empty_issue(self):
ticket = self._make_ticket(self.empty_issue)
self.assertEqual(ticket.summary, 'Empty Issue')
- self.assertEqual(ticket.description, '*Originally created by:* [john...@gmail.com](http://code.google.com/u/101557263855536553789/)\n\nEmpty')
+ self.assertEqual(ticket.description, '*Originally created by:* john...@gmail.com\n\nEmpty')
self.assertEqual(ticket.status, '')
self.assertEqual(ticket.milestone, '')
self.assertEqual(ticket.custom_fields, {})
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a013355d/ForgeImporters/forgeimporters/tests/google/test_extractor.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/google/test_extractor.py b/ForgeImporters/forgeimporters/tests/google/test_extractor.py
index 7a485d6..4157c98 100644
--- a/ForgeImporters/forgeimporters/tests/google/test_extractor.py
+++ b/ForgeImporters/forgeimporters/tests/google/test_extractor.py
@@ -152,9 +152,9 @@ class TestGoogleCodeProjectExtractor(TestCase):
test_issue = open(pkg_resources.resource_filename('forgeimporters', 'tests/data/google/test-issue.html')).read()
gpe = self._make_extractor(test_issue)
self.assertEqual(gpe.get_issue_creator().name, 'john...@gmail.com')
- self.assertEqual(gpe.get_issue_creator().link, 'http://code.google.com/u/101557263855536553789/')
+ self.assertEqual(gpe.get_issue_creator().url, 'http://code.google.com/u/101557263855536553789/')
self.assertEqual(gpe.get_issue_owner().name, 'john...@gmail.com')
- self.assertEqual(gpe.get_issue_owner().link, 'http://code.google.com/u/101557263855536553789/')
+ self.assertEqual(gpe.get_issue_owner().url, 'http://code.google.com/u/101557263855536553789/')
self.assertEqual(gpe.get_issue_status(), 'Started')
self.assertEqual(gpe.get_issue_summary(), 'Test Issue')
self.assertEqual(gpe.get_issue_description(),
@@ -217,7 +217,7 @@ class TestGoogleCodeProjectExtractor(TestCase):
expected = [
{
'author.name': 'john...@gmail.com',
- 'author.link': 'http://code.google.com/u/101557263855536553789/',
+ 'author.url': 'http://code.google.com/u/101557263855536553789/',
'created_date': 'Thu Aug 8 15:35:15 2013',
'body': 'Test *comment* is a comment',
'updates': {'Status:': 'Started', 'Labels:': '-OpSys-Linux OpSys-Windows'},
@@ -225,7 +225,7 @@ class TestGoogleCodeProjectExtractor(TestCase):
},
{
'author.name': 'john...@gmail.com',
- 'author.link': 'http://code.google.com/u/101557263855536553789/',
+ 'author.url': 'http://code.google.com/u/101557263855536553789/',
'created_date': 'Thu Aug 8 15:35:34 2013',
'body': 'Another comment',
'updates': {},
@@ -233,7 +233,7 @@ class TestGoogleCodeProjectExtractor(TestCase):
},
{
'author.name': 'john...@gmail.com',
- 'author.link': 'http://code.google.com/u/101557263855536553789/',
+ 'author.url': 'http://code.google.com/u/101557263855536553789/',
'created_date': 'Thu Aug 8 15:36:39 2013',
'body': 'Last comment',
'updates': {},
@@ -241,7 +241,7 @@ class TestGoogleCodeProjectExtractor(TestCase):
},
{
'author.name': 'john...@gmail.com',
- 'author.link': 'http://code.google.com/u/101557263855536553789/',
+ 'author.url': 'http://code.google.com/u/101557263855536553789/',
'created_date': 'Thu Aug 8 15:36:57 2013',
'body': 'Oh, I forgot one',
'updates': {'Labels:': 'OpSys-OSX'},
@@ -250,8 +250,23 @@ class TestGoogleCodeProjectExtractor(TestCase):
]
for actual, expected in zip(comments, expected):
self.assertEqual(actual.author.name, expected['author.name'])
- self.assertEqual(actual.author.link, expected['author.link'])
+ self.assertEqual(actual.author.url, expected['author.url'])
self.assertEqual(actual.created_date, expected['created_date'])
self.assertEqual(actual.body, expected['body'])
self.assertEqual(actual.updates, expected['updates'])
self.assertEqual([a.filename for a in actual.attachments], expected['attachments'])
+
+class TestUserLink(TestCase):
+ def test_plain(self):
+ tag = mock.Mock()
+ tag.string.strip.return_value = 'name'
+ tag.attrMap = {}
+ link = google.UserLink(tag)
+ self.assertEqual(str(link), 'name')
+
+ def test_linked(self):
+ tag = mock.Mock()
+ tag.string.strip.return_value = 'name'
+ tag.attrMap = {'href': '/p/project'}
+ link = google.UserLink(tag)
+ self.assertEqual(str(link), '[name](http://code.google.com/p/project)')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a013355d/ForgeImporters/forgeimporters/tests/google/test_tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/google/test_tracker.py b/ForgeImporters/forgeimporters/tests/google/test_tracker.py
index 15b8f33..01d9f8e 100644
--- a/ForgeImporters/forgeimporters/tests/google/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/google/test_tracker.py
@@ -112,26 +112,21 @@ class TestTrackerImporter(TestCase):
def test_process_fields(self):
ticket = mock.Mock()
- def _user(l):
- u = mock.Mock()
- u.name = '%sname' % l
- u.link = '%slink' % l
- return u
issue = mock.Mock(
get_issue_summary=lambda:'summary',
get_issue_description=lambda:'my *description* fool',
get_issue_status=lambda:'status',
get_issue_created_date=lambda:'created_date',
get_issue_mod_date=lambda:'mod_date',
- get_issue_creator=lambda:_user('c'),
- get_issue_owner=lambda:_user('o'),
+ get_issue_creator=lambda:'creator',
+ get_issue_owner=lambda:'owner',
)
importer = tracker.GoogleCodeTrackerImporter()
with mock.patch.object(tracker, 'datetime') as dt:
dt.strptime.side_effect = lambda s,f: s
importer.process_fields(ticket, issue)
self.assertEqual(ticket.summary, 'summary')
- self.assertEqual(ticket.description, '*Originally created by:* [cname](clink)\n*Originally owned by:* [oname](olink)\n\nmy \*description\* fool')
+ self.assertEqual(ticket.description, '*Originally created by:* creator\n*Originally owned by:* owner\n\nmy \*description\* fool')
self.assertEqual(ticket.status, 'status')
self.assertEqual(ticket.created_date, 'created_date')
self.assertEqual(ticket.mod_date, 'mod_date')