Add json and time_elapsed methods to render_worker.py

This commit is contained in:
Brett Williams
2023-05-24 09:34:25 -05:00
parent 4446c61f1d
commit 3e35ffddfd

View File

@@ -4,6 +4,7 @@ import logging
import os import os
import subprocess import subprocess
import threading import threading
import json
from datetime import datetime from datetime import datetime
from enum import Enum from enum import Enum
@@ -208,14 +209,54 @@ class BaseRenderWorker(object):
def _parse_stdout(self, line): def _parse_stdout(self, line):
raise NotImplementedError("_parse_stdout not implemented") raise NotImplementedError("_parse_stdout not implemented")
def elapsed_time(self): def time_elapsed(self):
elapsed = ""
if self.start_time: from string import Template
if self.end_time:
elapsed = self.end_time - self.start_time class DeltaTemplate(Template):
elif self.is_running(): delimiter = "%"
elapsed = datetime.now() - self.start_time
return elapsed def strfdelta(tdelta, fmt='%H:%M:%S'):
d = {"D": tdelta.days}
hours, rem = divmod(tdelta.seconds, 3600)
minutes, seconds = divmod(rem, 60)
d["H"] = '{:02d}'.format(hours)
d["M"] = '{:02d}'.format(minutes)
d["S"] = '{:02d}'.format(seconds)
t = DeltaTemplate(fmt)
return t.substitute(**d)
# calculate elapsed time
elapsed_time = None
start_time = self.start_time
end_time = self.end_time
if start_time:
if end_time:
elapsed_time = end_time - start_time
elif self.status == RenderStatus.RUNNING:
elapsed_time = datetime.now() - start_time
elapsed_time_string = strfdelta(elapsed_time) if elapsed_time else "Unknown"
return elapsed_time_string
def json(self):
worker_data = self.__dict__.copy()
keys_to_remove = ['thread', 'process'] # remove unwanted keys from dict
for key in worker_data.keys():
if key.startswith('_'):
keys_to_remove.append(key)
for key in keys_to_remove:
worker_data.pop(key, None)
# 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(worker_data, default=date_serializer)
worker_json = json.loads(json_convert)
return worker_json
class BaseRenderEngine(object): class BaseRenderEngine(object):