You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/08/30 18:49:56 UTC

[2/2] git commit: [#6530] Add error handling to individual tool importers

[#6530] Add error handling to individual tool importers

Signed-off-by: Tim Van Steenburgh <tv...@gmail.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/ea27c57b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/ea27c57b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/ea27c57b

Branch: refs/heads/tv/6530
Commit: ea27c57bd32f2d6e9bc4fe5234706104205438b3
Parents: 149d465
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Fri Aug 30 16:49:24 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Fri Aug 30 16:49:24 2013 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/base.py           |  7 +++---
 ForgeImporters/forgeimporters/google/code.py    | 13 +++++++++-
 ForgeImporters/forgeimporters/google/tracker.py | 13 +++++++++-
 .../forgeimporters/tests/test_base.py           | 26 ++++++++++++--------
 ForgeImporters/forgeimporters/trac/tickets.py   | 13 +++++++++-
 5 files changed, 55 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea27c57b/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index 69db8d6..54f006b 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -76,11 +76,10 @@ def import_tool(importer_name, project_name=None, mount_point=None, mount_label=
         g.post_event('import_tool_task_failed',
                 error=str(e),
                 traceback=traceback.format_exc(),
-                importer_name=importer_name,
+                importer_source=importer.source,
+                importer_tool_label=importer.tool_label,
                 project_name=project_name,
-                mount_point=mount_point,
-                mount_label=mount_label,
-                **kw)
+                )
 
 
 class ProjectExtractor(object):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea27c57b/ForgeImporters/forgeimporters/google/code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/code.py b/ForgeImporters/forgeimporters/google/code.py
index 60a0158..5adaaa0 100644
--- a/ForgeImporters/forgeimporters/google/code.py
+++ b/ForgeImporters/forgeimporters/google/code.py
@@ -16,6 +16,7 @@
 #       under the License.
 
 import urllib2
+import traceback
 
 import formencode as fe
 from formencode import validators as fev
@@ -83,7 +84,17 @@ def get_repo_class(type_):
 
 @task(notifications_disabled=True)
 def import_tool(**kw):
-    GoogleRepoImporter().import_tool(c.project, c.user, **kw)
+    try:
+        importer = GoogleRepoImporter()
+        importer.import_tool(c.project, c.user, **kw)
+    except Exception as e:
+        g.post_event('import_tool_task_failed',
+                error=str(e),
+                traceback=traceback.format_exc(),
+                importer_source=importer.source,
+                importer_tool_label=importer.tool_label,
+                project_name=kw.get('project_name'),
+                )
 
 
 class GoogleRepoImportForm(fe.schema.Schema):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea27c57b/ForgeImporters/forgeimporters/google/tracker.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/tracker.py b/ForgeImporters/forgeimporters/google/tracker.py
index eb97c07..e5c8dc3 100644
--- a/ForgeImporters/forgeimporters/google/tracker.py
+++ b/ForgeImporters/forgeimporters/google/tracker.py
@@ -17,6 +17,7 @@
 
 from collections import defaultdict
 from datetime import datetime
+import traceback
 
 from formencode import validators as fev
 
@@ -53,7 +54,17 @@ from forgeimporters.base import (
 
 @task(notifications_disabled=True)
 def import_tool(**kw):
-    GoogleCodeTrackerImporter().import_tool(c.project, c.user, **kw)
+    try:
+        importer = GoogleCodeTrackerImporter()
+        importer.import_tool(c.project, c.user, **kw)
+    except Exception as e:
+        g.post_event('import_tool_task_failed',
+                error=str(e),
+                traceback=traceback.format_exc(),
+                importer_source=importer.source,
+                importer_tool_label=importer.tool_label,
+                project_name=kw.get('project_name'),
+                )
 
 
 class GoogleCodeTrackerImportForm(ToolImportForm):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea27c57b/ForgeImporters/forgeimporters/tests/test_base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/test_base.py b/ForgeImporters/forgeimporters/tests/test_base.py
index a61ecda..f6d443f 100644
--- a/ForgeImporters/forgeimporters/tests/test_base.py
+++ b/ForgeImporters/forgeimporters/tests/test_base.py
@@ -54,20 +54,26 @@ def test_import_tool(g, c, by_name):
             mount_label='mount_label')
     assert not g.post_event.called
 
-@mock.patch.object(base.ToolImporter, 'by_name')
+
+@mock.patch.object(base.traceback, 'format_exc')
+@mock.patch.object(base, 'ToolImporter')
 @mock.patch.object(base, 'g')
-def test_import_tool_failed(g, by_name):
-    by_name.side_effect = RuntimeError('my error')
-    base.import_tool('importer_name', project_name='project_name',
-            mount_point='mount_point', mount_label='mount_label', other='other')
+def test_import_tool_failed(g, ToolImporter, format_exc):
+    format_exc.return_value = 'my traceback'
+
+    importer = mock.Mock(source='importer_source',
+            tool_label='importer_tool_label')
+    importer.import_tool.side_effect = RuntimeError('my error')
+    ToolImporter.by_name.return_value = importer
+
+    base.import_tool('importer_name', project_name='project_name')
     g.post_event.assert_called_once_with(
             'import_tool_task_failed',
-            error=by_name.side_effect,
-            importer_name='importer_name',
+            error=str(importer.import_tool.side_effect),
+            traceback='my traceback',
+            importer_source='importer_source',
+            importer_tool_label='importer_tool_label',
             project_name='project_name',
-            mount_point='mount_point',
-            mount_label='mount_label',
-            other='other',
         )
 
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea27c57b/ForgeImporters/forgeimporters/trac/tickets.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/trac/tickets.py b/ForgeImporters/forgeimporters/trac/tickets.py
index 941ff32..7876b44 100644
--- a/ForgeImporters/forgeimporters/trac/tickets.py
+++ b/ForgeImporters/forgeimporters/trac/tickets.py
@@ -20,6 +20,7 @@ from datetime import (
         timedelta,
         )
 import json
+import traceback
 
 from formencode import validators as fev
 
@@ -59,7 +60,17 @@ from forgetracker.scripts.import_tracker import import_tracker
 
 @task(notifications_disabled=True)
 def import_tool(**kw):
-    TracTicketImporter().import_tool(c.project, c.user, **kw)
+    try:
+        importer = TracTicketImporter()
+        importer.import_tool(c.project, c.user, **kw)
+    except Exception as e:
+        g.post_event('import_tool_task_failed',
+                error=str(e),
+                traceback=traceback.format_exc(),
+                importer_source=importer.source,
+                importer_tool_label=importer.tool_label,
+                project_name=kw.get('trac_url'),
+                )
 
 
 class TracTicketImportForm(ToolImportForm):