mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Refactor and reorganize code. Split server into manager and server files.
This commit is contained in:
70
lib/render_job.py
Normal file
70
lib/render_job.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
from utilities.render_worker import RenderStatus
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
class RenderJob:
|
||||
|
||||
def __init__(self, render, priority=2, owner=None, client=None, notify=None, custom_id=None):
|
||||
self.id = custom_id or self.generate_id()
|
||||
self.owner = owner
|
||||
self.render = render
|
||||
self.priority = priority
|
||||
self.client = client
|
||||
self.notify = notify
|
||||
self.date_created = datetime.now()
|
||||
self.scheduled_start = None
|
||||
self.renderer = render.renderer
|
||||
self.name = os.path.basename(render.input) + '_' + self.date_created.isoformat()
|
||||
self.archived = False
|
||||
|
||||
def render_status(self):
|
||||
"""Returns status of render job"""
|
||||
try:
|
||||
if self.scheduled_start and self.render.status == RenderStatus.NOT_STARTED:
|
||||
return RenderStatus.SCHEDULED
|
||||
else:
|
||||
return self.render.status
|
||||
except Exception as e:
|
||||
logger.warning("render_status error: {}".format(e))
|
||||
return RenderStatus.ERROR
|
||||
|
||||
def json(self):
|
||||
"""Converts RenderJob into JSON format"""
|
||||
import numbers
|
||||
|
||||
def date_serializer(o):
|
||||
if isinstance(o, datetime):
|
||||
return o.isoformat()
|
||||
|
||||
json_string = ''
|
||||
|
||||
try:
|
||||
d = self.__dict__.copy()
|
||||
d['status'] = self.render_status().value
|
||||
d['render'] = self.render.__dict__.copy()
|
||||
for key in ['thread', 'process']: # remove unwanted keys from JSON
|
||||
d['render'].pop(key, None)
|
||||
d['render']['status'] = d['status']
|
||||
|
||||
# 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.render.percent_complete if isinstance(self.render.percent_complete, numbers.Number) \
|
||||
else self.render.percent_complete()
|
||||
d['render']['percent_complete'] = percent_complete
|
||||
|
||||
json_string = json.dumps(d, default=date_serializer)
|
||||
except Exception as e:
|
||||
logger.error("Error converting to JSON: {}".format(e))
|
||||
return json_string
|
||||
|
||||
@classmethod
|
||||
def generate_id(cls):
|
||||
return str(uuid.uuid4()).split('-')[0]
|
||||
Reference in New Issue
Block a user