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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/io/netrender/master.py')
-rw-r--r--release/scripts/io/netrender/master.py64
1 files changed, 28 insertions, 36 deletions
diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py
index 11409bf372e..793e3bb51bf 100644
--- a/release/scripts/io/netrender/master.py
+++ b/release/scripts/io/netrender/master.py
@@ -27,6 +27,7 @@ from netrender.utils import *
import netrender.model
import netrender.balancing
import netrender.master_html
+import netrender.thumbnail as thumbnail
class MRenderFile(netrender.model.RenderFile):
def __init__(self, filepath, index, start, end, signature):
@@ -35,7 +36,7 @@ class MRenderFile(netrender.model.RenderFile):
def test(self):
self.found = os.path.exists(self.filepath)
- if self.found:
+ if self.found and self.signature != None:
found_signature = hashFile(self.filepath)
self.found = self.signature == found_signature
@@ -82,8 +83,6 @@ class MRenderJob(netrender.model.RenderJob):
self.save_path = ""
self.files = [MRenderFile(rfile.filepath, rfile.index, rfile.start, rfile.end, rfile.signature) for rfile in job_info.files]
- self.resolution = None
-
def initInfo(self):
if not self.resolution:
self.resolution = tuple(getFileInfo(self.files[0].filepath, ["bpy.context.scene.render.resolution_x", "bpy.context.scene.render.resolution_y", "bpy.context.scene.render.resolution_percentage"]))
@@ -105,9 +104,11 @@ class MRenderJob(netrender.model.RenderJob):
self.chunks = info_map["chunks"]
def testStart(self):
- for f in self.files:
- if not f.test():
- return False
+ # Don't test files for versionned jobs
+ if not self.version_info:
+ for f in self.files:
+ if not f.test():
+ return False
self.start()
self.initInfo()
@@ -201,6 +202,15 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
# is extremely slow due to some timeout..
sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format%args))
+ def getInfoMap(self):
+ length = int(self.headers['content-length'])
+
+ if length > 0:
+ msg = str(self.rfile.read(length), encoding='utf8')
+ return json.loads(msg)
+ else:
+ return {}
+
def send_head(self, code = http.client.OK, headers = {}, content = "application/octet-stream"):
self.send_response(code)
self.send_header("Content-type", content)
@@ -297,7 +307,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
elif frame.status == DONE:
filename = os.path.join(job.save_path, "%06d.exr" % frame_number)
- thumbname = thumbnail(filename)
+ thumbname = thumbnail.generate(filename)
if thumbname:
f = open(thumbname, 'rb')
@@ -516,8 +526,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
job = self.server.getJobID(job_id)
if job:
- length = int(self.headers['content-length'])
- info_map = eval(str(self.rfile.read(length), encoding='utf8'))
+ info_map = self.getInfoMap()
job.edit(info_map)
self.send_head()
@@ -529,8 +538,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
self.send_head(http.client.NO_CONTENT)
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path == "/balance_limit":
- length = int(self.headers['content-length'])
- info_map = eval(str(self.rfile.read(length), encoding='utf8'))
+ info_map = self.getInfoMap()
for rule_id, limit in info_map.items():
try:
rule = self.server.balancer.ruleByID(rule_id)
@@ -542,8 +550,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
self.send_head()
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path == "/balance_enable":
- length = int(self.headers['content-length'])
- info_map = eval(str(self.rfile.read(length), encoding='utf8'))
+ info_map = self.getInfoMap()
for rule_id, enabled in info_map.items():
rule = self.server.balancer.ruleByID(rule_id)
if rule:
@@ -555,13 +562,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
match = cancel_pattern.match(self.path)
if match:
- length = int(self.headers['content-length'])
-
- if length > 0:
- info_map = eval(str(self.rfile.read(length), encoding='utf8'))
- clear = info_map.get("clear", False)
- else:
- clear = False
+ info_map = self.getInfoMap()
+ clear = info_map.get("clear", False)
job_id = match.groups()[0]
@@ -582,13 +584,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
match = pause_pattern.match(self.path)
if match:
- length = int(self.headers['content-length'])
-
- if length > 0:
- info_map = eval(str(self.rfile.read(length), encoding='utf8'))
- status = info_map.get("status", None)
- else:
- status = None
+ info_map = self.getInfoMap()
+ status = info_map.get("status", None)
job_id = match.groups()[0]
@@ -607,13 +604,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path == "/clear":
# cancel all jobs
- length = int(self.headers['content-length'])
-
- if length > 0:
- info_map = eval(str(self.rfile.read(length), encoding='utf8'))
- clear = info_map.get("clear", False)
- else:
- clear = False
+ info_map = self.getInfoMap()
+ clear = info_map.get("clear", False)
self.server.stats("", "Clearing jobs")
self.server.clear(clear)
@@ -769,7 +761,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[job_frame]
if frame:
- if job.type == netrender.model.JOB_BLENDER:
+ if job.hasRenderResult():
if job_result == DONE:
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
@@ -820,7 +812,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[job_frame]
if frame:
- if job.type == netrender.model.JOB_BLENDER:
+ if job.hasRenderResult():
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
f = open(os.path.join(job.save_path, "%06d.jpg" % job_frame), 'wb')