mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Improved how jobs are converted to JSON
This commit is contained in:
@@ -41,37 +41,48 @@ class RenderJob:
|
||||
def file_hash(self):
|
||||
return hashlib.md5(open(self.worker.input_path, 'rb').read()).hexdigest()
|
||||
|
||||
def json(self):
|
||||
"""Converts RenderJob into JSON format"""
|
||||
def json_safe_copy(self):
|
||||
"""Converts RenderJob into JSON-friendly dict"""
|
||||
import numbers
|
||||
|
||||
def date_serializer(o):
|
||||
if isinstance(o, datetime):
|
||||
return o.isoformat()
|
||||
|
||||
json_string = ''
|
||||
|
||||
job_dict = None
|
||||
try:
|
||||
d = self.__dict__.copy()
|
||||
d['status'] = self.render_status().value
|
||||
d['file_hash'] = self.file_hash if isinstance(self.file_hash, str) else self.file_hash()
|
||||
d['worker'] = self.worker.__dict__.copy()
|
||||
for key in ['thread', 'process']: # remove unwanted keys from JSON
|
||||
d['worker'].pop(key, None)
|
||||
d['worker']['status'] = d['status']
|
||||
job_dict = self.__dict__.copy()
|
||||
job_dict['status'] = self.render_status().value
|
||||
job_dict['file_hash'] = self.file_hash if isinstance(self.file_hash, str) else self.file_hash()
|
||||
job_dict['worker'] = self.worker.__dict__.copy()
|
||||
job_dict['worker']['status'] = job_dict['status']
|
||||
|
||||
# remove unwanted keys from dict
|
||||
keys_to_remove = ['thread', 'process']
|
||||
for key in job_dict['worker'].keys():
|
||||
if key.startswith('_'):
|
||||
keys_to_remove.append(key)
|
||||
for key in keys_to_remove:
|
||||
job_dict['worker'].pop(key, None)
|
||||
|
||||
# jobs from current_session generate percent completed
|
||||
# jobs after loading server pull in a saved value. Have to check if callable object or not
|
||||
|
||||
percent_complete = self.worker.percent_complete if isinstance(self.worker.percent_complete, numbers.Number) \
|
||||
else self.worker.percent_complete()
|
||||
d['worker']['percent_complete'] = percent_complete
|
||||
job_dict['worker']['percent_complete'] = percent_complete
|
||||
|
||||
json_string = json.dumps(d, default=date_serializer)
|
||||
# convert to json and back to auto-convert dates to iso format
|
||||
def date_serializer(o):
|
||||
if isinstance(o, datetime):
|
||||
return o.isoformat()
|
||||
json_convert = json.dumps(job_dict, default=date_serializer)
|
||||
job_dict = json.loads(json_convert)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
logger.error("Error converting to JSON: {}".format(e))
|
||||
return json_string
|
||||
return job_dict
|
||||
|
||||
def start(self):
|
||||
self.worker.start()
|
||||
|
||||
def stop(self):
|
||||
self.worker.stop()
|
||||
|
||||
@classmethod
|
||||
def generate_id(cls):
|
||||
|
||||
Reference in New Issue
Block a user