[#4186] ticket:96 Added error handling
diff --git a/ForgeWiki/forgewiki/command/wiki2markdown/extractors.py b/ForgeWiki/forgewiki/command/wiki2markdown/extractors.py
index 4753673..ad8dfa1 100644
--- a/ForgeWiki/forgewiki/command/wiki2markdown/extractors.py
+++ b/ForgeWiki/forgewiki/command/wiki2markdown/extractors.py
@@ -3,6 +3,7 @@
 import shutil
 import json
 import hashlib
+from MySQLdb import DatabaseError
 
 from allura.command import base as allura_base
 
@@ -41,7 +42,11 @@
 
     def connection(self):
         if not self._connection:
-            self._connection = MySQLdb.connect(**self.db_options)
+            try:
+                self._connection = MySQLdb.connect(**self.db_options)
+            except DatabaseError, e:
+                allura_base.log.error("Can't connect to database: %s" % str(e))
+                exit(2)
         return self._connection
 
     def _save(self, content, *paths):
diff --git a/ForgeWiki/forgewiki/command/wiki2markdown/loaders.py b/ForgeWiki/forgewiki/command/wiki2markdown/loaders.py
index 87e0031..e149c71 100644
--- a/ForgeWiki/forgewiki/command/wiki2markdown/loaders.py
+++ b/ForgeWiki/forgewiki/command/wiki2markdown/loaders.py
@@ -61,8 +61,16 @@
         pages.sort()  # ensure that history in right order
         for page in pages:
             fn = os.path.join(page_dir, page)
-            with open(fn, 'r') as pages_file:
-                page_data = json.load(pages_file)
+            try:
+                with open(fn, 'r') as pages_file:
+                    page_data = json.load(pages_file)
+            except IOError, e:
+                allura_base.log.error("Can't open file: %s" % str(e))
+                exit(2)
+            except ValueError, e:
+                allura_base.log.error("Can't load data from file %s: %s"
+                                      % (fn, str(e)))
+                exit(2)
             yield page_data
 
     def _talk(self, page_dir):
@@ -70,8 +78,16 @@
         filename = os.path.join(page_dir, 'discussion.json')
         if not os.path.isfile(filename):
             return
-        with open(filename, 'r') as talk_file:
-            talk_data = json.load(talk_file)
+        try:
+            with open(filename, 'r') as talk_file:
+                talk_data = json.load(talk_file)
+        except IOError, e:
+            allura_base.log.error("Can't open file: %s" % str(e))
+            exit(2)
+        except ValueError, e:
+            allura_base.log.error("Can't load data from file %s: %s"
+                                  % (filename, str(e)))
+            exit(2)
         return talk_data
 
     def _attachments(self, page_dir):
@@ -142,7 +158,11 @@
         page = WM.Page.query.get(app_config_id=self.wiki.config._id,
                                  title=page_title)
         for filename, path in self._attachments(page_dir):
-            with open(path) as fp:
-                page.attach(filename, fp,
-                            content_type=utils.guess_mime_type(filename))
+            try:
+                with open(path) as fp:
+                    page.attach(filename, fp,
+                                content_type=utils.guess_mime_type(filename))
+            except IOError, e:
+                allura_base.log.error("Can't open file: %s" % str(e))
+                exit(2)
         allura_base.log.info('Loaded attachments for page %s.' % page_title)
diff --git a/ForgeWiki/forgewiki/tests/test_converters.py b/ForgeWiki/forgewiki/tests/test_converters.py
index 8787898..72a0227 100644
--- a/ForgeWiki/forgewiki/tests/test_converters.py
+++ b/ForgeWiki/forgewiki/tests/test_converters.py
@@ -23,13 +23,14 @@
     mediawiki_text = """
 '''bold''' ''italics''
 == Getting started ==
-* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration]
 * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
     """
     mediawiki_output = converters.mediawiki2markdown(mediawiki_text)
     assert "**bold** _italics_" in mediawiki_output
     assert "## Getting started" in mediawiki_output
-    assert "* [MediaWiki FAQ](http://www.mediawiki.org/wiki/Manual:FAQ)" in mediawiki_output
+    assert ("* [MediaWiki FAQ](http://www.mediawiki.org/wiki/Manual:FAQ)"
+            in mediawiki_output)
 
 
 def test_mediawiki_internal_links2markdown():