mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Add json and time_elapsed methods to render_worker.py
This commit is contained in:
@@ -4,6 +4,7 @@ import logging
|
||||
import os
|
||||
import subprocess
|
||||
import threading
|
||||
import json
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
@@ -208,14 +209,54 @@ class BaseRenderWorker(object):
|
||||
def _parse_stdout(self, line):
|
||||
raise NotImplementedError("_parse_stdout not implemented")
|
||||
|
||||
def elapsed_time(self):
|
||||
elapsed = ""
|
||||
if self.start_time:
|
||||
if self.end_time:
|
||||
elapsed = self.end_time - self.start_time
|
||||
elif self.is_running():
|
||||
elapsed = datetime.now() - self.start_time
|
||||
return elapsed
|
||||
def time_elapsed(self):
|
||||
|
||||
from string import Template
|
||||
|
||||
class DeltaTemplate(Template):
|
||||
delimiter = "%"
|
||||
|
||||
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):
|
||||
|
||||
Reference in New Issue
Block a user