From b2aae211609a1fb85e421bb83a593f8eb2242ad8 Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Fri, 9 Mar 2012 19:26:35 -0800 Subject: [PATCH 1/4] Add better debug messages to 400 response codes Previous code would simply report "Invalid data sent" if Neo4j returned a non-200 error status -- since this encapsulates server errors (500s) as well as data formatting errors (400s), the 'message' field in the response JSON can be very useful. --- .gitignore | 1 + neo4jrestclient/client.py | 42 +++++++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b25c15b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/neo4jrestclient/client.py b/neo4jrestclient/client.py index 1561627..c109581 100644 --- a/neo4jrestclient/client.py +++ b/neo4jrestclient/client.py @@ -761,7 +761,12 @@ def __setitem__(self, key, value, tx=None): elif response.status == 404: raise NotFoundError(response.status, "Node or property not found") else: - raise StatusException(response.status, "Invalid data sent") + msg = "Invalid data sent" + try: + msg += ": " + json.loads(content).get('message') + except (ValueError, AttributeError, KeyError): + pass + raise StatusException(response.status, msg) def set(self, key, value, tx=None): tx = Transaction.get_transaction(tx) @@ -839,7 +844,12 @@ def _set_properties(self, props={}): self._update_dict_data() return props elif response.status == 400: - raise StatusException(response.status, "Invalid data sent") + msg = "Invalid data sent" + try: + msg += ": " + json.loads(content).get('message') + except (ValueError, AttributeError, KeyError): + pass + raise StatusException(response.status, msg) else: raise NotFoundError(response.status, "Properties not found") @@ -976,7 +986,12 @@ def relationship(to, *args, **kwargs): "URI not of \"to\" node" \ "not found") else: - raise StatusException(response.status, "Invalid data sent") + msg = "Invalid data sent" + try: + msg += ": " + json.loads(content).get('message') + except (ValueError, AttributeError, KeyError): + pass + raise StatusException(response.status, msg) return relationship # HACK: Special methods for handle pickling manually @@ -1092,7 +1107,12 @@ def traverse(self, types=None, order=None, stop=None, returnable=None, raise NotFoundError(response.status, "Node or relationship " \ "not found") else: - raise StatusException(response.status, "Invalid data sent") + msg = "Invalid data sent" + try: + msg += ": " + json.loads(content).get('message') + except (ValueError, AttributeError, KeyError): + pass + raise StatusException(response.status, msg) class PaginatedTraversal(object): @@ -1225,7 +1245,12 @@ def create(self, name, **kwargs): auth=self._auth, **result_dict) else: - raise StatusException(response.status, "Invalid data sent") + msg = "Invalid data sent" + try: + msg += ": " + json.loads(content).get('message') + except (ValueError, AttributeError, KeyError): + pass + raise StatusException(response.status, msg) return self._dict[name] def get(self, attr, *args, **kwargs): @@ -1923,7 +1948,12 @@ def __call__(self, *args, **kwargs): elif response.status == 404: raise NotFoundError(response.status, "Extension not found") else: - raise StatusException(response.status, "Invalid data sent") + msg = "Invalid data sent" + try: + msg += ": " + json.loads(content).get('message') + except (ValueError, AttributeError, KeyError): + pass + raise StatusException(response.status, msg) def __repr__(self): return self.__unicode__() From c15e55fc955d09b1b06cb647f7b9031e5552e8c9 Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Fri, 9 Mar 2012 19:33:55 -0800 Subject: [PATCH 2/4] Fix spelling error --- neo4jrestclient/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo4jrestclient/client.py b/neo4jrestclient/client.py index c109581..da5ef89 100644 --- a/neo4jrestclient/client.py +++ b/neo4jrestclient/client.py @@ -787,9 +787,9 @@ def __delitem__(self, key, tx=None): raise KeyError() else: raise NotFoundError(response.status, - "Node or propery not found") + "Node or property not found") else: - raise StatusException(response.status, "Node or propery not found") + raise StatusException(response.status, "Node or property not found") def __len__(self): return len(self._dic["data"]) From cc886469efb43b1012a571da776ab148baea3929 Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Sat, 10 Mar 2012 09:22:00 -0800 Subject: [PATCH 3/4] Fix to debugging message code --- neo4jrestclient/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo4jrestclient/client.py b/neo4jrestclient/client.py index da5ef89..8563c4c 100644 --- a/neo4jrestclient/client.py +++ b/neo4jrestclient/client.py @@ -1950,8 +1950,8 @@ def __call__(self, *args, **kwargs): else: msg = "Invalid data sent" try: - msg += ": " + json.loads(content).get('message') - except (ValueError, AttributeError, KeyError): + msg += ": " + json.loads(content)['message'] + except (ValueError, AttributeError, KeyError, TypeError): pass raise StatusException(response.status, msg) From cd75bf0c5fe6f61ea1dcda2b8b9959c26aa9ecad Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Sat, 10 Mar 2012 10:02:22 -0800 Subject: [PATCH 4/4] removed .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b25c15b..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*~