Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'netrender')
-rw-r--r--netrender/balancing.py6
-rw-r--r--netrender/master.py54
-rw-r--r--netrender/master_html.py44
-rw-r--r--netrender/model.py122
-rw-r--r--netrender/operators.py4
-rw-r--r--netrender/slave.py26
-rw-r--r--netrender/ui.py6
-rw-r--r--netrender/utils.py27
8 files changed, 182 insertions, 107 deletions
diff --git a/netrender/balancing.py b/netrender/balancing.py
index cd2f12da..ee347452 100644
--- a/netrender/balancing.py
+++ b/netrender/balancing.py
@@ -167,7 +167,7 @@ class NewJobPriority(PriorityRule):
return "Priority to new jobs"
def test(self, job):
- return job.countFrames(status = FRAME_DONE) < self.limit
+ return job.countFrames(status = netrender.model.FRAME_DONE) < self.limit
def serialize(self):
return { "type": "priority",
"enabled": self.enabled,
@@ -193,7 +193,7 @@ class MinimumTimeBetweenDispatchPriority(PriorityRule):
return "Priority to jobs that haven't been dispatched recently"
def test(self, job):
- return job.countFrames(status = FRAME_DISPATCHED) == 0 and (time.time() - job.last_dispatched) / 60 > self.limit
+ return job.countFrames(status = netrender.model.FRAME_DISPATCHED) == 0 and (time.time() - job.last_dispatched) / 60 > self.limit
def serialize(self):
return { "type": "priority",
@@ -214,7 +214,7 @@ class ExcludeQueuedEmptyJob(ExclusionRule):
return "Exclude non queued or empty jobs"
def test(self, job):
- return job.status != JOB_QUEUED or job.countFrames(status = FRAME_QUEUED) == 0
+ return job.status != netrender.model.JOB_QUEUED or job.countFrames(status = netrender.model.FRAME_QUEUED) == 0
def serialize(self):
return { "type": "exception",
diff --git a/netrender/master.py b/netrender/master.py
index 69a185b1..593ee727 100644
--- a/netrender/master.py
+++ b/netrender/master.py
@@ -91,7 +91,7 @@ class MRenderJob(netrender.model.RenderJob):
self.chunks = 1
# Force WAITING status on creation
- self.status = JOB_WAITING
+ self.status = netrender.model.JOB_WAITING
# special server properties
self.last_update = 0
@@ -135,25 +135,25 @@ class MRenderJob(netrender.model.RenderJob):
def testFinished(self):
for f in self.frames:
- if f.status == FRAME_QUEUED or f.status == FRAME_DISPATCHED:
+ if f.status == netrender.model.FRAME_QUEUED or f.status == netrender.model.FRAME_DISPATCHED:
break
else:
- self.status = JOB_FINISHED
+ self.status = netrender.model.JOB_FINISHED
self.finish_time=time.time()
def pause(self, status = None):
- if self.status not in {JOB_PAUSED, JOB_QUEUED}:
+ if self.status not in {netrender.model.JOB_PAUSED, netrender.model.JOB_QUEUED}:
return
if status is None:
- self.status = JOB_PAUSED if self.status == JOB_QUEUED else JOB_QUEUED
+ self.status = netrender.model.JOB_PAUSED if self.status == netrender.model.JOB_QUEUED else netrender.model.JOB_QUEUED
elif status:
- self.status = JOB_QUEUED
+ self.status = netrender.model.JOB_QUEUED
else:
- self.status = JOB_PAUSED
+ self.status = netrender.model.JOB_PAUSED
def start(self):
- self.status = JOB_QUEUED
+ self.status = netrender.model.JOB_QUEUED
def addLog(self, frames):
@@ -176,12 +176,12 @@ class MRenderJob(netrender.model.RenderJob):
f.reset(all)
if all:
- self.status = JOB_QUEUED
+ self.status = netrender.model.JOB_QUEUED
def getFrames(self):
frames = []
for f in self.frames:
- if f.status == FRAME_QUEUED:
+ if f.status == netrender.model.FRAME_QUEUED:
self.last_dispatched = time.time()
frames.append(f)
if len(frames) >= self.chunks:
@@ -198,7 +198,7 @@ class MRenderFrame(netrender.model.RenderFrame):
self.number = frame
self.slave = None
self.time = 0
- self.status = FRAME_QUEUED
+ self.status = netrender.model.FRAME_QUEUED
self.command = command
self.log_path = None
@@ -210,11 +210,11 @@ class MRenderFrame(netrender.model.RenderFrame):
return "%06d.exr" % self.number
def reset(self, all):
- if all or self.status == FRAME_ERROR:
+ if all or self.status == netrender.model.FRAME_ERROR:
self.log_path = None
self.slave = None
self.time = 0
- self.status = FRAME_QUEUED
+ self.status = netrender.model.FRAME_QUEUED
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -311,9 +311,9 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[frame_number]
if frame:
- if frame.status in (FRAME_QUEUED, FRAME_DISPATCHED):
+ if frame.status in (netrender.model.FRAME_QUEUED, netrender.model.FRAME_DISPATCHED):
self.send_head(http.client.ACCEPTED)
- elif frame.status == FRAME_DONE:
+ elif frame.status == netrender.model.FRAME_DONE:
self.server.stats("", "Sending result to client")
filename = job.getResultPath(frame.getRenderFilename())
@@ -322,7 +322,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
self.send_head(content = "image/x-exr")
shutil.copyfileobj(f, self.wfile)
f.close()
- elif frame.status == FRAME_ERROR:
+ elif frame.status == netrender.model.FRAME_ERROR:
self.send_head(http.client.PARTIAL_CONTENT)
else:
# no such frame
@@ -348,7 +348,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
zip_filepath = job.getResultPath("results.zip")
with zipfile.ZipFile(zip_filepath, "w") as zfile:
for frame in job.frames:
- if frame.status == FRAME_DONE:
+ if frame.status == netrender.model.FRAME_DONE:
for filename in frame.results:
filepath = job.getResultPath(filename)
@@ -379,9 +379,9 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[frame_number]
if frame:
- if frame.status in (FRAME_QUEUED, FRAME_DISPATCHED):
+ if frame.status in (netrender.model.FRAME_QUEUED, netrender.model.FRAME_DISPATCHED):
self.send_head(http.client.ACCEPTED)
- elif frame.status == FRAME_DONE:
+ elif frame.status == netrender.model.FRAME_DONE:
filename = job.getResultPath(frame.getRenderFilename())
thumbname = thumbnail.generate(filename)
@@ -394,7 +394,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
else: # thumbnail couldn't be generated
self.send_head(http.client.PARTIAL_CONTENT)
return
- elif frame.status == FRAME_ERROR:
+ elif frame.status == netrender.model.FRAME_ERROR:
self.send_head(http.client.PARTIAL_CONTENT)
else:
# no such frame
@@ -419,7 +419,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[frame_number]
if frame:
- if not frame.log_path or frame.status in (FRAME_QUEUED, FRAME_DISPATCHED):
+ if not frame.log_path or frame.status in (netrender.model.FRAME_QUEUED, netrender.model.FRAME_DISPATCHED):
self.send_head(http.client.PROCESSING)
else:
self.server.stats("", "Sending log to client")
@@ -488,7 +488,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if job and frames:
for f in frames:
print("dispatch", f.number)
- f.status = FRAME_DISPATCHED
+ f.status = netrender.model.FRAME_DISPATCHED
f.slave = slave
slave.job = job
@@ -838,11 +838,11 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
self.send_head(content = None)
if job.hasRenderResult():
- if job_result == FRAME_DONE:
+ if job_result == netrender.model.FRAME_DONE:
frame.addDefaultRenderResult()
self.write_file(job.getResultPath(frame.getRenderFilename()))
- elif job_result == FRAME_ERROR:
+ elif job_result == netrender.model.FRAME_ERROR:
# blacklist slave on this job on error
# slaves might already be in blacklist if errors on the whole chunk
if not slave.id in job.blacklist:
@@ -885,7 +885,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
self.send_head(content = None)
- if job_result == FRAME_DONE:
+ if job_result == netrender.model.FRAME_DONE:
result_filename = self.headers['result-filename']
frame.results.append(result_filename)
@@ -1045,7 +1045,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
if slave.job:
for f in slave.job_frames:
- slave.job[f].status = FRAME_ERROR
+ slave.job[f].status = netrender.model.FRAME_ERROR
for slave in removed:
self.removeSlave(slave)
@@ -1075,7 +1075,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
def getJobs(self):
return self.jobs
- def countJobs(self, status = JOB_QUEUED):
+ def countJobs(self, status = netrender.model.JOB_QUEUED):
total = 0
for j in self.jobs:
if j.status == status:
diff --git a/netrender/master_html.py b/netrender/master_html.py
index 39c7f811..8ee0fe4f 100644
--- a/netrender/master_html.py
+++ b/netrender/master_html.py
@@ -134,16 +134,16 @@ def get(handler):
serializedJob = job.serialize(withFiles=includeFiles, withFrames=includeFrames)
serializedJob["p_rule"] = handler.server.balancer.applyPriorities(job)
serializedJob["e_rule"] = handler.server.balancer.applyExceptions(job)
- serializedJob["wait"] = int(time.time() - job.last_dispatched) if job.status != JOB_FINISHED else "N/A"
+ serializedJob["wait"] = int(time.time() - job.last_dispatched) if job.status != netrender.model.JOB_FINISHED else "N/A"
serializedJob["length"] = len(job);
- serializedJob["done"] = results[FRAME_DONE]
- serializedJob["dispatched"] = results[FRAME_DISPATCHED]
- serializedJob["error"] = results[FRAME_ERROR]
+ serializedJob["done"] = results[netrender.model.FRAME_DONE]
+ serializedJob["dispatched"] = results[netrender.model.FRAME_DISPATCHED]
+ serializedJob["error"] = results[netrender.model.FRAME_ERROR]
tot_cache, tot_fluid, tot_other = countFiles(job)
serializedJob["totcache"] = tot_cache
serializedJob["totfluid"] = tot_fluid
serializedJob["totother"] = tot_other
- serializedJob["wktime"] = (time.time()-job.start_time ) if job.status != JOB_FINISHED else (job.finish_time-job.start_time)
+ serializedJob["wktime"] = (time.time()-job.start_time ) if job.status != netrender.model.JOB_FINISHED else (job.finish_time-job.start_time)
else:
serializedJob={"name":"invalid job"}
@@ -327,13 +327,19 @@ def get(handler):
"dispatched",
"error",
"priority",
- "exception"
+ "exception",
+ "started",
+ "finished"
)
handler.server.balance()
for job in handler.server.jobs:
results = job.framesStatus()
+
+ time_finished = job.time_finished
+ time_started = job.time_started
+
rowTable(
"""<button title="cancel job" onclick="cancel_job('%s');">X</button>""" % job.id +
"""<button title="pause job" onclick="request('/pause_%s', null);">P</button>""" % job.id +
@@ -350,15 +356,17 @@ def get(handler):
"""<button title="increase priority" onclick="request('/edit_%s', &quot;{'priority': %i}&quot;);">+</button>""" % (job.id, job.priority + 1) +
"""<button title="decrease priority" onclick="request('/edit_%s', &quot;{'priority': %i}&quot;);" %s>-</button>""" % (job.id, job.priority - 1, "disabled=True" if job.priority == 1 else ""),
"%0.1f%%" % (job.usage * 100),
- "%is" % int(time.time() - job.last_dispatched) if job.status != JOB_FINISHED else "N/A",
+ "%is" % int(time.time() - job.last_dispatched) if job.status != netrender.model.JOB_FINISHED else "N/A",
job.statusText(),
len(job),
- results[FRAME_DONE],
- results[FRAME_DISPATCHED],
- str(results[FRAME_ERROR]) +
- """<button title="reset error frames" onclick="request('/reset_%s_0', null);" %s>R</button>""" % (job.id, "disabled=True" if not results[FRAME_ERROR] else ""),
+ results[netrender.model.FRAME_DONE],
+ results[netrender.model.FRAME_DISPATCHED],
+ str(results[netrender.model.FRAME_ERROR]) +
+ """<button title="reset error frames" onclick="request('/reset_%s_0', null);" %s>R</button>""" % (job.id, "disabled=True" if not results[netrender.model.FRAME_ERROR] else ""),
"yes" if handler.server.balancer.applyPriorities(job) else "no",
- "yes" if handler.server.balancer.applyExceptions(job) else "no"
+ "yes" if handler.server.balancer.applyExceptions(job) else "no",
+ time.ctime(time_started) if time_started else "Not Started",
+ time.ctime(time_finished) if time_finished else "Not Finished"
)
endTable()
@@ -503,6 +511,16 @@ def get(handler):
endTable()
+ output("<h2>Transitions</h2>")
+
+ startTable()
+ headerTable("Event", "Time")
+
+ for transition, time_value in job.transitions:
+ rowTable(transition, time.ctime(time_value))
+
+ endTable()
+
output("<h2>Frames</h2>")
startTable()
@@ -518,7 +536,7 @@ def get(handler):
frame.slave.name if frame.slave else "&nbsp;",
link("view log", logURL(job_id, frame.number)) if frame.log_path else "&nbsp;",
link("view result", renderURL(job_id, frame.number)) + " [" +
- tag("span", "show", attr="class='thumb' onclick='showThumb(%s, %i)'" % (job.id, frame.number)) + "]" if frame.status == FRAME_DONE else "&nbsp;",
+ tag("span", "show", attr="class='thumb' onclick='showThumb(%s, %i)'" % (job.id, frame.number)) + "]" if frame.status == netrender.model.FRAME_DONE else "&nbsp;",
"<img name='thumb%i' title='hide thumbnails' src='' class='thumb' onclick='showThumb(%s, %i)'>" % (frame.number, job.id, frame.number)
)
else:
diff --git a/netrender/model.py b/netrender/model.py
index d4d00bbf..4153f936 100644
--- a/netrender/model.py
+++ b/netrender/model.py
@@ -19,6 +19,70 @@
import netrender.versioning as versioning
from netrender.utils import *
+import time
+
+# Jobs status
+JOB_WAITING = 0 # before all data has been entered
+JOB_PAUSED = 1 # paused by user
+JOB_FINISHED = 2 # finished rendering
+JOB_QUEUED = 3 # ready to be dispatched
+
+JOB_STATUS_TEXT = {
+ JOB_WAITING: "Waiting",
+ JOB_PAUSED: "Paused",
+ JOB_FINISHED: "Finished",
+ JOB_QUEUED: "Queued"
+ }
+
+JOB_TRANSITION_STARTED = "Started"
+JOB_TRANSITION_PAUSED = "Paused"
+JOB_TRANSITION_RESUMED = "Resumed"
+JOB_TRANSITION_FINISHED = "Finished"
+JOB_TRANSITION_RESTARTED = "Restarted"
+
+JOB_TRANSITIONS = {
+ (JOB_WAITING, JOB_QUEUED) : JOB_TRANSITION_STARTED,
+ (JOB_QUEUED, JOB_PAUSED) : JOB_TRANSITION_PAUSED,
+ (JOB_PAUSED, JOB_QUEUED) : JOB_TRANSITION_RESUMED,
+ (JOB_QUEUED, JOB_FINISHED) : JOB_TRANSITION_FINISHED,
+ (JOB_FINISHED, JOB_QUEUED) : JOB_TRANSITION_RESTARTED
+ }
+
+# Job types (depends on the dependency type)
+JOB_BLENDER = 1
+JOB_PROCESS = 2
+JOB_VCS = 3
+
+JOB_TYPES = {
+ JOB_BLENDER: "Blender",
+ JOB_PROCESS: "Process",
+ JOB_VCS: "Versioned",
+ }
+
+JOB_SUB_RENDER = 1
+JOB_SUB_BAKING = 2
+
+# Job subtypes
+JOB_SUBTYPES = {
+ JOB_SUB_RENDER: "Render",
+ JOB_SUB_BAKING: "Baking",
+ }
+
+
+# Frames status
+FRAME_QUEUED = 0
+FRAME_DISPATCHED = 1
+FRAME_DONE = 2
+FRAME_ERROR = 3
+
+FRAME_STATUS_TEXT = {
+ FRAME_QUEUED: "Queued",
+ FRAME_DISPATCHED: "Dispatched",
+ FRAME_DONE: "Done",
+ FRAME_ERROR: "Error"
+ }
+
+# Tags
TAG_BAKING = "baking"
TAG_RENDER = "render"
@@ -106,24 +170,6 @@ class RenderSlave:
return slave
-JOB_BLENDER = 1
-JOB_PROCESS = 2
-JOB_VCS = 3
-
-JOB_TYPES = {
- JOB_BLENDER: "Blender",
- JOB_PROCESS: "Process",
- JOB_VCS: "Versioned",
- }
-
-JOB_SUB_RENDER = 1
-JOB_SUB_BAKING = 2
-
-JOB_SUBTYPES = {
- JOB_SUB_RENDER: "Render",
- JOB_SUB_BAKING: "Baking",
- }
-
class VersioningInfo:
def __init__(self, info = None):
self._system = None
@@ -219,7 +265,10 @@ class RenderJob:
self.usage = 0.0
self.last_dispatched = 0.0
self.frames = []
-
+ self.transitions = []
+
+ self._status = None
+
if info:
self.type = info.type
self.subtype = info.subtype
@@ -247,6 +296,39 @@ class RenderJob:
self.version_info = None
self.render = "BLENDER_RENDER"
+ @property
+ def status(self):
+ """Status of the job (waiting, paused, finished or queued)"""
+ return self._status
+
+ @status.setter
+ def status(self, value):
+ transition = JOB_TRANSITIONS.get((self.status, value), None)
+ if transition:
+ self.transitions.append((transition, time.time()))
+
+ self._status = value
+
+ @property
+ def time_started(self):
+ started_time = None
+ for transition, time_value in self.transitions:
+ if transition == JOB_TRANSITION_STARTED:
+ started_time = time_value
+ break
+
+ return started_time
+
+ @property
+ def time_finished(self):
+ finished_time = None
+ if self.status == JOB_FINISHED:
+ for transition, time_value in self.transitions:
+ if transition == JOB_TRANSITION_FINISHED:
+ finished_time = time_value
+
+ return finished_time
+
def hasRenderResult(self):
return self.subtype == JOB_SUB_RENDER
@@ -332,6 +414,7 @@ class RenderJob:
"category": self.category,
"tags": tuple(self.tags),
"status": self.status,
+ "transitions": self.transitions,
"chunks": self.chunks,
"priority": self.priority,
"usage": self.usage,
@@ -361,6 +444,7 @@ class RenderJob:
job.category = data["category"]
job.tags = set(data["tags"])
job.status = data["status"]
+ job.transitions = data["transitions"]
job.files = [RenderFile.materialize(f) for f in data["files"]]
job.frames = [RenderFrame.materialize(f) for f in data["frames"]]
job.chunks = data["chunks"]
diff --git a/netrender/operators.py b/netrender/operators.py
index a3a5ef7d..74b2a285 100644
--- a/netrender/operators.py
+++ b/netrender/operators.py
@@ -410,9 +410,9 @@ class netclientdownload(bpy.types.Operator):
nb_missing = 0
for frame in job.frames:
- if frame.status == FRAME_DONE:
+ if frame.status == netrender.model.FRAME_DONE:
finished_frames.append(frame.number)
- elif frame.status == FRAME_ERROR:
+ elif frame.status == netrender.model.FRAME_ERROR:
nb_error += 1
else:
nb_missing += 1
diff --git a/netrender/slave.py b/netrender/slave.py
index c3b1f113..bf3819ba 100644
--- a/netrender/slave.py
+++ b/netrender/slave.py
@@ -65,8 +65,8 @@ def testCancel(conn, job_id, frame_number):
else:
return False
-def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path=None):
- job_full_path = createLocalPath(rfile, JOB_PREFIX, main_path, rfile.force)
+def testFile(conn, job_id, slave_id, rfile, job_prefix, main_path=None):
+ job_full_path = createLocalPath(rfile, job_prefix, main_path, rfile.force)
found = os.path.exists(job_full_path)
@@ -80,9 +80,9 @@ def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path=None):
if not found:
# Force prefix path if not found
- job_full_path = createLocalPath(rfile, JOB_PREFIX, main_path, True)
+ job_full_path = createLocalPath(rfile, job_prefix, main_path, True)
print("Downloading", job_full_path)
- temp_path = os.path.join(JOB_PREFIX, "slave.temp")
+ temp_path = os.path.join(job_prefix, "slave.temp")
with ConnectionContext():
conn.request("GET", fileURL(job_id, rfile.index), headers={"slave-id":slave_id})
response = conn.getresponse()
@@ -166,24 +166,24 @@ def render_slave(engine, netsettings, threads):
job = netrender.model.RenderJob.materialize(json.loads(str(response.read(), encoding='utf8')))
engine.update_stats("", "Network render processing job from master")
- JOB_PREFIX = os.path.join(NODE_PREFIX, "job_" + job.id)
- verifyCreateDir(JOB_PREFIX)
+ job_prefix = os.path.join(NODE_PREFIX, "job_" + job.id)
+ verifyCreateDir(job_prefix)
# set tempdir for fsaa temp files
# have to set environ var because render is done in a subprocess and that's the easiest way to propagate the setting
- os.environ["TMP"] = JOB_PREFIX
+ os.environ["TMP"] = job_prefix
if job.type == netrender.model.JOB_BLENDER:
job_path = job.files[0].original_path # original path of the first file
main_path, main_file = os.path.split(job_path)
- job_full_path = testFile(conn, job.id, slave_id, job.files[0], JOB_PREFIX)
+ job_full_path = testFile(conn, job.id, slave_id, job.files[0], job_prefix)
print("Fullpath", job_full_path)
print("File:", main_file, "and %i other files" % (len(job.files) - 1,))
for rfile in job.files[1:]:
- testFile(conn, job.id, slave_id, rfile, JOB_PREFIX, main_path)
+ testFile(conn, job.id, slave_id, rfile, job_prefix, main_path)
print("\t", rfile.filepath)
netrender.repath.update(job)
@@ -225,7 +225,7 @@ def render_slave(engine, netsettings, threads):
frame_args += ["-f", str(frame.number)]
with NoErrorDialogContext():
- process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(JOB_PREFIX, "######"), "-E", job.render, "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(job_prefix, "######"), "-E", job.render, "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif job.subtype == netrender.model.JOB_SUB_BAKING:
tasks = []
@@ -354,13 +354,13 @@ def render_slave(engine, netsettings, threads):
if status == 0: # non zero status is error
- headers["job-result"] = str(FRAME_DONE)
+ headers["job-result"] = str(netrender.model.FRAME_DONE)
for frame in job.frames:
headers["job-frame"] = str(frame.number)
if job.hasRenderResult():
# send image back to server
- filename = os.path.join(JOB_PREFIX, "%06d.exr" % frame.number)
+ filename = os.path.join(job_prefix, "%06d.exr" % frame.number)
# thumbnail first
if netsettings.use_slave_thumb:
@@ -403,7 +403,7 @@ def render_slave(engine, netsettings, threads):
if responseStatus(conn) == http.client.NO_CONTENT:
continue
else:
- headers["job-result"] = str(FRAME_ERROR)
+ headers["job-result"] = str(netrender.model.FRAME_ERROR)
for frame in job.frames:
headers["job-frame"] = str(frame.number)
# send error result back to server
diff --git a/netrender/ui.py b/netrender/ui.py
index fbf17c8d..4aa085c9 100644
--- a/netrender/ui.py
+++ b/netrender/ui.py
@@ -26,7 +26,7 @@ from netrender.utils import *
from bpy.props import PointerProperty, StringProperty, BoolProperty, EnumProperty, IntProperty, CollectionProperty
-VERSION = b"0.3"
+VERSION = b"0.5"
PATH_PREFIX = "/tmp/"
@@ -352,8 +352,8 @@ class RENDER_PT_network_jobs(NeedValidAddress, NetRenderButtonsPanel, bpy.types.
layout.label(text="Name: %s" % job.name)
layout.label(text="Length: %04i" % len(job))
- layout.label(text="Done: %04i" % job.results[FRAME_DONE])
- layout.label(text="Error: %04i" % job.results[FRAME_ERROR])
+ layout.label(text="Done: %04i" % job.results[netrender.model.FRAME_DONE])
+ layout.label(text="Error: %04i" % job.results[netrender.model.FRAME_ERROR])
import bl_ui.properties_render as properties_render
class RENDER_PT_network_output(NeedValidAddress, NetRenderButtonsPanel, bpy.types.Panel):
diff --git a/netrender/utils.py b/netrender/utils.py
index 7a2abb6b..ac219210 100644
--- a/netrender/utils.py
+++ b/netrender/utils.py
@@ -30,33 +30,6 @@ except:
VERSION = bytes(".".join((str(n) for n in netrender.bl_info["version"])), encoding='utf8')
-# Jobs status
-JOB_WAITING = 0 # before all data has been entered
-JOB_PAUSED = 1 # paused by user
-JOB_FINISHED = 2 # finished rendering
-JOB_QUEUED = 3 # ready to be dispatched
-
-JOB_STATUS_TEXT = {
- JOB_WAITING: "Waiting",
- JOB_PAUSED: "Paused",
- JOB_FINISHED: "Finished",
- JOB_QUEUED: "Queued"
- }
-
-
-# Frames status
-FRAME_QUEUED = 0
-FRAME_DISPATCHED = 1
-FRAME_DONE = 2
-FRAME_ERROR = 3
-
-FRAME_STATUS_TEXT = {
- FRAME_QUEUED: "Queued",
- FRAME_DISPATCHED: "Dispatched",
- FRAME_DONE: "Done",
- FRAME_ERROR: "Error"
- }
-
try:
system = platform.system()
except UnicodeDecodeError: