blob: 189dd524d1521d013f3eab9748f92b5b0b8fbf11 [file] [log] [blame]
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -05001#!/usr/bin/python2.4
2#
Joe Gregorio20a5aa92011-04-01 17:44:25 -04003# Copyright (C) 2010 Google Inc.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -050016
17"""Errors for the library.
18
19All exceptions defined by the library
20should be defined in this file.
21"""
22
23__author__ = 'jcgregorio@google.com (Joe Gregorio)'
24
25
Ali Afshar2dcc6522010-12-16 10:11:53 +010026from anyjson import simplejson
27
28
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -050029class Error(Exception):
30 """Base error for this module."""
31 pass
32
33
34class HttpError(Error):
35 """HTTP data was invalid or unexpected."""
36
Joe Gregorio49396552011-03-08 10:39:00 -050037 def __init__(self, resp, content, uri=None):
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -050038 self.resp = resp
Ali Afshar2dcc6522010-12-16 10:11:53 +010039 self.content = content
Joe Gregorio49396552011-03-08 10:39:00 -050040 self.uri = uri
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -050041
Ali Afshar2dcc6522010-12-16 10:11:53 +010042 def _get_reason(self):
43 """Calculate the reason for the error from the response content.
44 """
45 if self.resp.get('content-type', '').startswith('application/json'):
46 try:
47 data = simplejson.loads(self.content)
48 reason = data['error']['message']
49 except (ValueError, KeyError):
50 reason = self.content
51 else:
52 reason = self.resp.reason
53 return reason
54
55 def __repr__(self):
Joe Gregorio49396552011-03-08 10:39:00 -050056 if self.uri:
57 return '<HttpError %s when requesting %s returned "%s">' % (
58 self.resp.status, self.uri, self._get_reason())
59 else:
60 return '<HttpError %s "%s">' % (self.resp.status, self._get_reason())
Ali Afshar2dcc6522010-12-16 10:11:53 +010061
62 __str__ = __repr__
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -050063
64
Joe Gregorio49396552011-03-08 10:39:00 -050065class InvalidJsonError(Error):
66 """The JSON returned could not be parsed."""
67 pass
68
69
Joe Gregorio3ad5e9a2010-12-09 15:01:04 -050070class UnknownLinkType(Error):
71 """Link type unknown or unexpected."""
72 pass