[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23115] branches/blender2.5/blender/ release/io/netrender: operator to fetch frames from a job in the list, decorator for rna registration

Martin Poirier theeth at yahoo.com
Thu Sep 10 22:41:18 CEST 2009


Revision: 23115
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23115
Author:   theeth
Date:     2009-09-10 22:41:18 +0200 (Thu, 10 Sep 2009)

Log Message:
-----------
operator to fetch frames from a job in the list, decorator for rna registration

Modified Paths:
--------------
    branches/blender2.5/blender/release/io/netrender/client.py
    branches/blender2.5/blender/release/io/netrender/operators.py
    branches/blender2.5/blender/release/io/netrender/ui.py
    branches/blender2.5/blender/release/io/netrender/utils.py

Modified: branches/blender2.5/blender/release/io/netrender/client.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/client.py	2009-09-10 20:31:15 UTC (rev 23114)
+++ branches/blender2.5/blender/release/io/netrender/client.py	2009-09-10 20:41:18 UTC (rev 23115)
@@ -120,9 +120,10 @@
 	
 	return job_id
 
-def clientRequestResult(conn, scene, job_id):
-	conn.request("GET", "render", headers={"job-id": job_id, "job-frame":str(scene.current_frame)})
+def requestResult(conn, job_id, frame):
+	conn.request("GET", "render", headers={"job-id": job_id, "job-frame":str(frame)})
 
+ at rnaType
 class NetworkRenderEngine(bpy.types.RenderEngine):
 	__idname__ = 'NET_RENDER'
 	__label__ = "Network Render"
@@ -164,17 +165,17 @@
 			
 			self.update_stats("", "Network render waiting for results")
 			
-			clientRequestResult(conn, scene, job_id)
+			requestResult(conn, job_id, scene.current_frame)
 			response = conn.getresponse()
 			
 			if response.status == http.client.NO_CONTENT:
 				netsettings.job_id = clientSendJob(conn, scene)
-				clientRequestResult(conn, scene, job_id)
+				requestResult(conn, job_id, scene.current_frame)
 			
 			while response.status == http.client.ACCEPTED and not self.test_break():
 				print("waiting")
 				time.sleep(1)
-				clientRequestResult(conn, scene, job_id)
+				requestResult(conn, job_id, scene.current_frame)
 				response = conn.getresponse()
 	
 			if response.status != http.client.OK:
@@ -200,5 +201,3 @@
 			
 			conn.close()
 
-bpy.types.register(NetworkRenderEngine)
-

Modified: branches/blender2.5/blender/release/io/netrender/operators.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/operators.py	2009-09-10 20:31:15 UTC (rev 23114)
+++ branches/blender2.5/blender/release/io/netrender/operators.py	2009-09-10 20:41:18 UTC (rev 23115)
@@ -6,6 +6,7 @@
 import netrender.client as client
 import netrender.model
 
+ at rnaOperator
 class RENDER_OT_netclientsend(bpy.types.Operator):
 	'''
 	Operator documentation text, will be used for the operator tooltip and python docs.
@@ -35,6 +36,7 @@
 	def invoke(self, context, event):
 		return self.execute(context)
 
+ at rnaOperator
 class RENDER_OT_netclientstatus(bpy.types.Operator):
 	'''Operator documentation text, will be used for the operator tooltip and python docs.'''
 	__idname__ = "render.netclientstatus"
@@ -79,6 +81,7 @@
 	def invoke(self, context, event):
 		return self.execute(context)
 
+ at rnaOperator
 class RENDER_OT_netclientblacklistslave(bpy.types.Operator):
 	'''Operator documentation text, will be used for the operator tooltip and python docs.'''
 	__idname__ = "render.netclientblacklistslave"
@@ -113,6 +116,7 @@
 	def invoke(self, context, event):
 		return self.execute(context)
 
+ at rnaOperator
 class RENDER_OT_netclientwhitelistslave(bpy.types.Operator):
 	'''Operator documentation text, will be used for the operator tooltip and python docs.'''
 	__idname__ = "render.netclientwhitelistslave"
@@ -148,6 +152,7 @@
 		return self.execute(context)
 
 
+ at rnaOperator
 class RENDER_OT_netclientslaves(bpy.types.Operator):
 	'''Operator documentation text, will be used for the operator tooltip and python docs.'''
 	__idname__ = "render.netclientslaves"
@@ -197,6 +202,7 @@
 	def invoke(self, context, event):
 		return self.execute(context)
 
+ at rnaOperator
 class RENDER_OT_netclientcancel(bpy.types.Operator):
 	'''Operator documentation text, will be used for the operator tooltip and python docs.'''
 	__idname__ = "render.netclientcancel"
@@ -228,9 +234,52 @@
 	def invoke(self, context, event):
 		return self.execute(context)
 	
-bpy.ops.add(RENDER_OT_netclientsend)
-bpy.ops.add(RENDER_OT_netclientstatus)
-bpy.ops.add(RENDER_OT_netclientslaves)
-bpy.ops.add(RENDER_OT_netclientblacklistslave)
-bpy.ops.add(RENDER_OT_netclientwhitelistslave)
-bpy.ops.add(RENDER_OT_netclientcancel)
\ No newline at end of file
+ at rnaOperator
+class netclientdownload(bpy.types.Operator):
+	'''Operator documentation text, will be used for the operator tooltip and python docs.'''
+	__idname__ = "render.netclientdownload"
+	__label__ = "Net Render Client Download"
+	
+	# List of operator properties, the attributes will be assigned
+	# to the class instance from the operator settings before calling.
+	
+	__props__ = []
+	
+	def poll(self, context):
+		netsettings = context.scene.network_render
+		return netsettings.active_job_index >= 0 and len(netsettings.jobs) > 0
+		
+	def execute(self, context):
+		netsettings = context.scene.network_render
+		rd = context.scene.render_data
+		
+		conn = clientConnection(context.scene)
+		
+		if conn:
+			job = bpy.data.netrender_jobs[netsettings.active_job_index]
+			
+			for frame in job.frames:
+				client.requestResult(conn, job.id, frame.number)
+				response = conn.getresponse()
+		
+				if response.status != http.client.OK:
+					print("missing", frame.number)
+					continue
+				
+				print("got back", frame.number)
+				
+				f = open(netsettings.path + "%06d" % frame.number + ".exr", "wb")
+				buf = response.read(1024)
+				
+				while buf:
+					f.write(buf)
+					buf = response.read(1024)
+				
+				f.close()
+			
+			conn.close()
+		
+		return ('FINISHED',)
+	
+	def invoke(self, context, event):
+		return self.execute(context)
\ No newline at end of file

Modified: branches/blender2.5/blender/release/io/netrender/ui.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/ui.py	2009-09-10 20:31:15 UTC (rev 23114)
+++ branches/blender2.5/blender/release/io/netrender/ui.py	2009-09-10 20:41:18 UTC (rev 23115)
@@ -28,6 +28,7 @@
 		return (rd.use_game_engine==False) and (rd.engine in self.COMPAT_ENGINES)
 
 # Setting panel, use in the scene for now.
+ at rnaType
 class SCENE_PT_network_settings(RenderButtonsPanel):
 	__label__ = "Network Settings"
 	COMPAT_ENGINES = set(['NET_RENDER'])
@@ -57,8 +58,8 @@
 			col.itemR(scene.network_render, "priority")
 			col.itemR(scene.network_render, "job_name")
 			col.itemO("render.netclientsend", text="send job to server")
-bpy.types.register(SCENE_PT_network_settings)
 
+ at rnaType
 class SCENE_PT_network_slaves(RenderButtonsPanel):
 	__label__ = "Slaves Status"
 	COMPAT_ENGINES = set(['NET_RENDER'])
@@ -96,8 +97,7 @@
 			layout.itemL(text="Seen: " + time.ctime(slave.last_seen))
 			layout.itemL(text="Stats: " + slave.stats)
 
-bpy.types.register(SCENE_PT_network_slaves)
-
+ at rnaType
 class SCENE_PT_network_slaves_blacklist(RenderButtonsPanel):
 	__label__ = "Slaves Blacklist"
 	COMPAT_ENGINES = set(['NET_RENDER'])
@@ -133,9 +133,8 @@
 			layout.itemL(text="Address: " + slave.address[0])
 			layout.itemL(text="Seen: " + slave.last_seen)
 			layout.itemL(text="Stats: " + time.ctime(slave.stats))
-			
-bpy.types.register(SCENE_PT_network_slaves_blacklist)
 
+ at rnaType
 class SCENE_PT_network_jobs(RenderButtonsPanel):
 	__label__ = "Jobs"
 	COMPAT_ENGINES = set(['NET_RENDER'])
@@ -158,6 +157,7 @@
 		subcol = col.column(align=True)
 		subcol.itemO("render.netclientstatus", icon="ICON_FILE_REFRESH", text="")
 		subcol.itemO("render.netclientcancel", icon="ICON_ZOOMOUT", text="")
+		subcol.itemO("render.netclientdownload", icon='ICON_RENDER_ANIMATION', text="")
 
 		if len(bpy.data.netrender_jobs) == 0 and len(netsettings.jobs) > 0:
 			while(len(netsettings.jobs) > 0):
@@ -172,22 +172,19 @@
 			layout.itemL(text="Length: %04i" % len(job))
 			layout.itemL(text="Done: %04i" % job.results[DONE])
 			layout.itemL(text="Error: %04i" % job.results[ERROR])
-			
-bpy.types.register(SCENE_PT_network_jobs)
 
+ at rnaType
 class NetRenderSettings(bpy.types.IDPropertyGroup):
 	pass
 
+ at rnaType
 class NetRenderSlave(bpy.types.IDPropertyGroup):
 	pass
 
+ at rnaType
 class NetRenderJob(bpy.types.IDPropertyGroup):
 	pass
 
-bpy.types.register(NetRenderSettings)
-bpy.types.register(NetRenderSlave)
-bpy.types.register(NetRenderJob)
-
 bpy.types.Scene.PointerProperty(attr="network_render", type=NetRenderSettings, name="Network Render", description="Network Render Settings")
 
 NetRenderSettings.StringProperty( attr="server_address",

Modified: branches/blender2.5/blender/release/io/netrender/utils.py
===================================================================
--- branches/blender2.5/blender/release/io/netrender/utils.py	2009-09-10 20:31:15 UTC (rev 23114)
+++ branches/blender2.5/blender/release/io/netrender/utils.py	2009-09-10 20:41:18 UTC (rev 23115)
@@ -13,6 +13,14 @@
 DONE = 2
 ERROR = 3
 
+def rnaType(rna_type):
+	bpy.types.register(rna_type)
+	return rna_type
+
+def rnaOperator(rna_op):
+	bpy.ops.add(rna_op)
+	return rna_op
+
 def clientConnection(scene):
 		netrender = scene.network_render
 		





More information about the Bf-blender-cvs mailing list