Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions hasty/exception.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ def video_not_ready(cls):
def invalid_activities(cls):
return ValidationException("activities must be a non-empty list of ActitivityType objects or IDs")

@classmethod
def export_already_done_or_canceled(cls):
return ValidationException("Export job is already done or canceled, cannot cancel it again")

class AuthenticationException(Exception):
def __init__(self, message):
self.message = message
Expand Down
15 changes: 14 additions & 1 deletion hasty/export_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
class ExportJob(HastyObject):
endpoint = '/v1/projects/{project_id}/exports'
endpoint_export = '/v1/projects/{project_id}/exports/{export_id}'
endpoint_job = '/v2/jobs/{job_id}'

def __repr__(self):
return self.get__repr__(OrderedDict({"id": self._id, "status": self._status}))
Expand Down Expand Up @@ -118,5 +119,17 @@ def download(self, local_folder='.'):
filepath = os.path.join(local_folder, filename)
urllib.request.urlretrieve(url, filepath)
logging.info(f"File {filepath} saved")
else:
elif self._status in ['INIT', 'RUNNING']:
raise ValidationException.export_in_progress()
else:
raise ValidationException(f"Export job is in {self._status} state, cannot download")

def cancel(self):
"""
Cancels the export job.
"""
if self._status in ['DONE', 'FAILED', 'CANCELED']:
raise ValidationException.export_already_done_or_canceled()
self._requester.delete(ExportJob.endpoint_job.format(job_id=self._id))
self._status = "CANCELED"
return self
6 changes: 4 additions & 2 deletions hasty/requester.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ def request(self, method, endpoint, headers, params=None, json_data=None, data=N
if response.status_code == 404:
raise NotFound.object_not_found()

if response.status_code == 422:
raise ValidationException(response.json().get("message"))

if response.status_code > 299:
response.raise_for_status()

Expand Down Expand Up @@ -99,7 +102,6 @@ def delete(self, endpoint, json_data=None):
headers=self.headers,
json_data=json_data,
cookies=self.cookies)

if response.status_code != 204:
if response.status_code not in [202, 204]:
# TODO Handle different status codes
raise Exception("Something went wrong {}", response, response.text)