From 4d84fa1d3649f0b18a03b53b6f76f4867f55736b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bertrand=20N=C3=A9ron?= <bneron@pasteur.fr>
Date: Thu, 21 Jan 2016 15:43:46 +0100
Subject: [PATCH] diferentiate the response when data are invalid than where
 ceredntials invalid

when data are not valid a forbiden error is thrown and the message
was not clear.
know the 2 origin of erro data or credentials are treated separately and
an improved message is displayed to the user
---
 src/parser/parser.py | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/parser/parser.py b/src/parser/parser.py
index 68dced2..9bdc7de 100755
--- a/src/parser/parser.py
+++ b/src/parser/parser.py
@@ -211,7 +211,22 @@ def fill_db(server_uri, db_name, user, passwd, replicon_db, system_db, force_upd
                     g[field] = value
             genes.append(g)
         secretion_system.genes = genes
-        secreton_db.save_doc(secretion_system, force_update=force_update)
+        try:
+            secreton_db.save_doc(secretion_system, force_update=force_update)
+        except restkit.errors.Unauthorized as err:
+            import re
+            reason = re.search('"reason":"(.*)"}$', err.message)
+            if reason:
+                reason = reason.groups()[0]
+            else:
+                reason = ''
+            import json
+            raise RuntimeError("Invalid data: {0} \ndata = \n{1}".format(reason,
+                                                                         json.dumps(secretion_system.to_json(),
+                                                                                    indent=4)
+                                                                         )
+                               )
+
 
 if __name__ == '__main__':
     import argparse
@@ -285,8 +300,9 @@ if __name__ == '__main__':
                     replicon_db, system_db, force_update=args.force_update)
             break
         except restkit.errors.Unauthorized as err:
-            try_again += 1
-            if try_again > 2:
-                sys.exit("Authentication failure")
-        except Exception as err:
-            sys.exit(2)
+            if err.status_int == 401:
+                try_again += 1
+                if try_again > 2:
+                    sys.exit("Authentication failure")
+            else:
+                raise err
-- 
GitLab