gnm_deliverables/vs_notification.py (67 lines of code) (raw):
import json
import dateutil.parser
class VSNotification(object):
def __init__(self, new_content={}):
self._content = new_content
@staticmethod
def from_bytes(bytesobject:bytes):
"""
initialise a VSNotification from raw bytes sent by the server
can raise json parse exceptions, or ValueError if expecteed keys are not available
:param bytesobject: a bytes object of content
:return:
"""
parsed_content = json.loads(bytesobject.decode("UTF-8"))
if "field" in parsed_content:
dict_content = {}
for entry in parsed_content["field"]:
dict_content[entry["key"]] = entry["value"]
return VSNotification(new_content=dict_content)
else:
raise ValueError("content was missing root array")
@property
def import_source(self, default=None):
if "import_source" in self._content:
return self._content["import_source"]
else:
return default
@property
def project_id(self, default=None):
if "project_id" in self._content:
return int(self._content["project_id"])
else:
return default
@property
def asset_id(self, default=None):
if "asset_id" in self._content:
return int(self._content["asset_id"])
else:
return default
@property
def started(self, default=None):
if "started" in self._content:
return dateutil.parser.parse(self._content["started"])
else:
return None
@property
def vsIDs(self, default=None):
"""
returns a 3-tuple of vidipsine IDs - the item, the job and the file
:param default:
:return:
"""
return (
self._content.get("itemId", None),
self._content.get("jobId", None),
self._content.get("fileId", None)
)
@property
def type(self, default=None):
"""
gets the job type
:param default:
:return:
"""
return self._content.get("type", None)
@property
def status(self, default=None):
return self._content.get("status", default)
@property
def currentStepStatus(self, default=None):
return self._content.get("currentStepStatus", default)
@property
def didFail(self):
status = self._content.get("status", "STARTED")
return status=="FAILED_TOTAL" or status=="ABORTED_PENDING" or status=="ABORTED"
@property
def hasWarning(self):
status = self._content.get("status","STARTED")
return status=="FINISHED_WARNING"
@property
def isRunning(self):
status = self._content.get("status","")
return status=="READY" or status=="STARTED" or status=="VIDINET_JOB"