Skip to content

Commit

Permalink
Add error handling in client. (#6)
Browse files Browse the repository at this point in the history
Closes #3
  • Loading branch information
sohail535 authored and anandology committed Jun 8, 2017
1 parent 2273bb7 commit ead3a98
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 14 deletions.
9 changes: 8 additions & 1 deletion rorocloud/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,14 @@
# initialized in cli
client = None

@click.group()
class CatchAllExceptions(click.Group):
def __call__(self, *args, **kwargs):
try:
return self.main(*args, **kwargs)
except Exception as exc:
click.echo('ERROR %s' % exc)

@click.group(cls=CatchAllExceptions)
@click.version_option(version=__version__)
@click.option("--verbose", is_flag=True, default=False, help="Enable verbose logging")
def cli(verbose=False):
Expand Down
60 changes: 47 additions & 13 deletions rorocloud/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,9 @@ def _request(self, method, path, **kwargs):
headers=self.HEADERS,
**kwargs)
except requests.exceptions.ConnectionError:
logger.error("ERROR: Unable to connect to the rorocloud server.")
sys.exit(1)
raise ClientError("ERROR: Unable to connect to the rorocloud server.")

return response.json()
return response

def get(self, path):
return self._request("GET", path)
Expand All @@ -63,45 +62,77 @@ def delete(self, path):

def jobs(self, all=False):
if all:
return [Job(job) for job in self.get("/jobs?all=true")]
response = self.get("/jobs?all=true")
if response.status_code != 200:
return self.handle_error(response)
return [Job(job) for job in response.json()]
else:
return [Job(job) for job in self.get("/jobs")]
response = self.get("/jobs")
if response.status_code != 200:
return self.handle_error(response)
return [Job(job) for job in response.json()]

def get_job(self, job_id):
path = "/jobs/" + job_id
return Job(self.get(path))
response = self.get(path)
if response.status_code != 200:
return self.handle_error(response)
return Job(response.json())


def get_logs(self, job_id):
path = "/jobs/" + job_id + "/logs"
return self.get(path)
response = self.get(path)
if response.status_code != 200:
return self.handle_error(response)
return response.json()

def stop_job(self, job_id):
path = "/jobs/" + job_id
self.delete(path)
response = self.delete(path)
if response.status_code != 200:
return self.handle_error(response)

def run(self, command, workdir=None, shell=False):
details = {}
if workdir:
details['workdir'] = workdir
payload = {"command": list(command), "details": details}
data = self.post("/jobs", payload)
return Job(data)
response = self.post("/jobs", payload)
if response.status_code != 200:
return self.handle_error(response)
return Job(response.json())

def login(self, email, password):
payload = {"email": email, "password": password}
data = self.post("/login", payload)
response = self.post("/login", payload)
if response.status_code != 200:
return self.handle_error(response)
data = response.json()
if "token" not in data:
raise UnAuthorizedException()
self.auth_provider.set_auth(email, data['token'])

def put_file(self, source, target):
payload = open(source, 'rb')
files = { 'file': payload }
return self._request("POST", "/upload?path="+target, files=files)
response = self._request("POST", "/upload?path="+target, files=files)
if response.status_code != 200:
return self.handle_error(response)
return response.json()

def whoami(self):
return self.get("/whoami")
response = self.get("/whoami")
if response.status_code != 200:
return self.handle_error(response)
return response.json()

def handle_error(self, response):
try:
error_message = response.json()['error']
except ValueError:
error_message = 'unable to complete the request due to internal server error'
raise ClientError(error_message)

class Job(object):
def __init__(self, data):
Expand All @@ -116,3 +147,6 @@ def __init__(self, data):

class UnAuthorizedException(Exception):
pass

class ClientError(Exception):
pass

0 comments on commit ead3a98

Please sign in to comment.