Skip to content

Commit

Permalink
update rds service
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx1979 committed Aug 20, 2018
1 parent 6089765 commit 8601f6a
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 302 deletions.
9 changes: 9 additions & 0 deletions examples/rds/rds.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,12 @@ def get_backup_policy(conn, i):

def create_backup(conn, i):
print(conn.rds.create_backup(i, "myname", "my desc"))


def get_version(conn, version):
print(conn.rds.get_rds_version(version))


def list_version(conn):
for v in conn.rds.list_rds_version():
print(v)
46 changes: 32 additions & 14 deletions openstack/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,17 @@ def __init__(self, message=None):


class HttpException(SDKException):

def __init__(self, message=None, details=None, response=None,
request_id=None, url=None, method=None,
http_status=None, cause=None):
http_status=None, cause=None, code=None):
super(HttpException, self).__init__(message=message, cause=cause)
self.details = details
self.response = response
self.request_id = request_id
self.url = url
self.method = method
self.http_status = http_status
self.code = code

def __unicode__(self):
msg = self.__class__.__name__ + ": " + self.message
Expand Down Expand Up @@ -112,23 +112,27 @@ class ResourceFailure(SDKException):
pass


code_key_list = ["code", "errorCode"]
message_ley_list = ["message", "error_message", "details",
code_key_list = ["code", "errorCode", "errCode"]
message_ley_list = ["message", "error_message", "externalMessage", "details",
"NeutronError", "computeFault", "TackerError"]


def auto_detect_errors(obj):
code = ""
message = ""
for key in code_key_list:
if key in obj.keys():
code = "[" + str(obj.get(key)) + "] "
# code = "[" + str(obj.get(key)) + "] "
code = str(obj.get(key))
break

for key in message_ley_list:
if key in obj.keys():
message = obj.get(key)
return code + message if code != "" else message
return None
break
# return code + message if code != "" else message

return [code, message]


def from_exception(exc):
Expand All @@ -143,14 +147,28 @@ def from_exception(exc):
resp_body = resp.content
content_type = resp.headers.get('content-type', '')
if resp_body and 'application/json' in content_type:

# compatibility for HuaWei OpenStack Service error response
details = auto_detect_errors(resp.json())
if not details:

exec_data = auto_detect_errors(resp.json())
code = exec_data[0]
message = exec_data[1]
details = "[" + code + "]" + message if code != "" else message

if code =="" and message == "":
for obj in resp.json().values():
if isinstance(obj, dict):
details = auto_detect_errors(obj)
if details:
exec_data = auto_detect_errors(obj)
code = exec_data[0]
message = exec_data[1]
if code or message:
details = "[" + code + "]" + message if code != "" else message
break

return cls(details=details, message=message, response=exc.response,
request_id=exc.request_id, url=exc.url, method=exc.method,
http_status=exc.http_status, cause=exc, code=code)

# # Iterate over the nested objects to retrieve "message" attribute.
# messages = [obj.get('message') for obj in resp.json().values()
# if isinstance(obj, dict)]
Expand All @@ -170,6 +188,6 @@ def from_exception(exc):
details_temp.append(detail)
# Return joined string separated by colons.
details = ': '.join(details_temp)
return cls(details=details, message=exc.message, response=exc.response,
request_id=exc.request_id, url=exc.url, method=exc.method,
http_status=exc.http_status, cause=exc)
return cls(details=details, message=exc.message, response=exc.response,
request_id=exc.request_id, url=exc.url, method=exc.method,
http_status=exc.http_status, cause=exc)
2 changes: 1 addition & 1 deletion openstack/rds/rds_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class RDSService(service_filter.ServiceFilter):
def __init__(self, version=None):
"""Create a RDS service."""
super(RDSService, self).__init__(
service_type='rds',
service_type='rdsv1',
version=version,
requires_project_id=True,
)
Loading

0 comments on commit 8601f6a

Please sign in to comment.