diff options
Diffstat (limited to 'release/scripts/io/netrender/ui.py')
-rw-r--r-- | release/scripts/io/netrender/ui.py | 173 |
1 files changed, 123 insertions, 50 deletions
diff --git a/release/scripts/io/netrender/ui.py b/release/scripts/io/netrender/ui.py index c065b95b928..343c60e7865 100644 --- a/release/scripts/io/netrender/ui.py +++ b/release/scripts/io/netrender/ui.py @@ -36,6 +36,8 @@ DISPATCHED = 1 DONE = 2 ERROR = 3 +LAST_ADDRESS_TEST = 0 + def base_poll(cls, context): rd = context.scene.render return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES) @@ -45,7 +47,7 @@ def init_file(): if netrender.init_file != bpy.data.filepath: netrender.init_file = bpy.data.filepath netrender.init_data = True - netrender.init_address = True + netrender.valid_address = False def init_data(netsettings): init_file() @@ -66,22 +68,31 @@ def init_data(netsettings): netsettings.jobs.remove(0) def verify_address(netsettings): + global LAST_ADDRESS_TEST init_file() - if netrender.init_address: - netrender.init_address = False + if LAST_ADDRESS_TEST + 30 < time.time(): + LAST_ADDRESS_TEST = time.time() try: - conn = clientConnection(netsettings.server_address, netsettings.server_port, scan = False) + conn = clientConnection(netsettings.server_address, netsettings.server_port, scan = False, timeout = 1) except: conn = None if conn: + netrender.valid_address = True conn.close() else: - netsettings.server_address = "[default]" + netrender.valid_address = False + + return netrender.valid_address + +class NeedValidAddress(): + @classmethod + def poll(cls, context): + return super().poll(context) and verify_address(context.scene.network_render) -class RenderButtonsPanel(): +class NetRenderButtonsPanel(): bl_space_type = "PROPERTIES" bl_region_type = "WINDOW" bl_context = "render" @@ -90,16 +101,16 @@ class RenderButtonsPanel(): @classmethod def poll(cls, context): rd = context.scene.render - return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES) + return rd.engine == 'NET_RENDER' and rd.use_game_engine == False # Setting panel, use in the scene for now. -class RENDER_PT_network_settings(bpy.types.Panel, RenderButtonsPanel): +class RENDER_PT_network_settings(NetRenderButtonsPanel, bpy.types.Panel): bl_label = "Network Settings" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): - return super(RENDER_PT_network_settings, cls).poll(context) + return super().poll(context) def draw(self, context): layout = self.layout @@ -128,17 +139,20 @@ class RENDER_PT_network_settings(bpy.types.Panel, RenderButtonsPanel): if netsettings.mode != "RENDER_MASTER": layout.operator("render.netclientscan", icon='FILE_REFRESH', text="") + + if not netrender.valid_address: + layout.label(text="No master at specified address") layout.operator("render.netclientweb", icon='QUESTION') -class RENDER_PT_network_slave_settings(bpy.types.Panel, RenderButtonsPanel): +class RENDER_PT_network_slave_settings(NetRenderButtonsPanel, bpy.types.Panel): bl_label = "Slave Settings" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): scene = context.scene - return super(RENDER_PT_network_slave_settings, cls).poll(context) and scene.network_render.mode == "RENDER_SLAVE" + return super().poll(context) and scene.network_render.mode == "RENDER_SLAVE" def draw(self, context): layout = self.layout @@ -156,14 +170,14 @@ class RENDER_PT_network_slave_settings(bpy.types.Panel, RenderButtonsPanel): sub.enabled = rd.threads_mode == 'FIXED' sub.prop(rd, "threads") -class RENDER_PT_network_master_settings(bpy.types.Panel, RenderButtonsPanel): +class RENDER_PT_network_master_settings(NetRenderButtonsPanel, bpy.types.Panel): bl_label = "Master Settings" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): scene = context.scene - return super(RENDER_PT_network_master_settings, cls).poll(context) and scene.network_render.mode == "RENDER_MASTER" + return super().poll(context) and scene.network_render.mode == "RENDER_MASTER" def draw(self, context): layout = self.layout @@ -174,14 +188,14 @@ class RENDER_PT_network_master_settings(bpy.types.Panel, RenderButtonsPanel): layout.prop(netsettings, "use_master_broadcast") layout.prop(netsettings, "use_master_clear") -class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): +class RENDER_PT_network_job(NetRenderButtonsPanel, bpy.types.Panel): bl_label = "Job Settings" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): scene = context.scene - return super(RENDER_PT_network_job, cls).poll(context) and scene.network_render.mode == "RENDER_CLIENT" + return super().poll(context) and scene.network_render.mode == "RENDER_CLIENT" def draw(self, context): layout = self.layout @@ -203,10 +217,12 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): split = layout.split(percentage=0.3) col = split.column() + col.label(text="Type:") col.label(text="Name:") col.label(text="Category:") col = split.column() + col.prop(netsettings, "job_type", text="") col.prop(netsettings, "job_name", text="") col.prop(netsettings, "job_category", text="") @@ -214,18 +230,38 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): row.prop(netsettings, "priority") row.prop(netsettings, "chunks") -class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel): - bl_label = "Slaves Status" +class RENDER_PT_network_job_vcs(NetRenderButtonsPanel, bpy.types.Panel): + bl_label = "VCS Job Settings" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): scene = context.scene + return (super().poll(context) + and scene.network_render.mode == "RENDER_CLIENT" + and scene.network_render.job_type == "JOB_VCS") + + def draw(self, context): + layout = self.layout + + scene = context.scene netsettings = scene.network_render - if netsettings.mode != "RENDER_CLIENT": - return False - verify_address(netsettings) - return super(RENDER_PT_network_slaves, cls).poll(context) and netsettings.server_address != "[default]" + + layout.operator("render.netclientvcsguess", icon='FILE_REFRESH', text="") + + layout.prop(netsettings, "vcs_system") + layout.prop(netsettings, "vcs_revision") + layout.prop(netsettings, "vcs_rpath") + layout.prop(netsettings, "vcs_wpath") + +class RENDER_PT_network_slaves(NeedValidAddress, NetRenderButtonsPanel, bpy.types.Panel): + bl_label = "Slaves Status" + COMPAT_ENGINES = {'NET_RENDER'} + + @classmethod + def poll(cls, context): + netsettings = context.scene.network_render + return super().poll(context) and netsettings.mode == "RENDER_CLIENT" def draw(self, context): layout = self.layout @@ -240,9 +276,7 @@ class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel): sub.operator("render.netclientslaves", icon='FILE_REFRESH', text="") sub.operator("render.netclientblacklistslave", icon='ZOOMOUT', text="") - init_data(netsettings) - - if netsettings.active_slave_index >= 0 and len(netsettings.slaves) > 0: + if len(netrender.slaves) > netsettings.active_slave_index >= 0: layout.separator() slave = netrender.slaves[netsettings.active_slave_index] @@ -252,18 +286,14 @@ class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel): layout.label(text="Seen: " + time.ctime(slave.last_seen)) layout.label(text="Stats: " + slave.stats) -class RENDER_PT_network_slaves_blacklist(bpy.types.Panel, RenderButtonsPanel): +class RENDER_PT_network_slaves_blacklist(NeedValidAddress, NetRenderButtonsPanel, bpy.types.Panel): bl_label = "Slaves Blacklist" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): - scene = context.scene - netsettings = scene.network_render - if netsettings.mode != "RENDER_CLIENT": - return False - verify_address(netsettings) - return super(RENDER_PT_network_slaves_blacklist, cls).poll(context) and netsettings.server_address != "[default]" + netsettings = context.scene.network_render + return super().poll(context) and netsettings.mode == "RENDER_CLIENT" def draw(self, context): layout = self.layout @@ -277,9 +307,7 @@ class RENDER_PT_network_slaves_blacklist(bpy.types.Panel, RenderButtonsPanel): sub = row.column(align=True) sub.operator("render.netclientwhitelistslave", icon='ZOOMOUT', text="") - init_data(netsettings) - - if netsettings.active_blacklisted_slave_index >= 0 and len(netsettings.slaves_blacklist) > 0: + if len(netrender.blacklist) > netsettings.active_blacklisted_slave_index >= 0: layout.separator() slave = netrender.blacklist[netsettings.active_blacklisted_slave_index] @@ -289,18 +317,14 @@ class RENDER_PT_network_slaves_blacklist(bpy.types.Panel, RenderButtonsPanel): layout.label(text="Seen: " + time.ctime(slave.last_seen)) layout.label(text="Stats: " + slave.stats) -class RENDER_PT_network_jobs(bpy.types.Panel, RenderButtonsPanel): +class RENDER_PT_network_jobs(NeedValidAddress, NetRenderButtonsPanel, bpy.types.Panel): bl_label = "Jobs" COMPAT_ENGINES = {'NET_RENDER'} @classmethod def poll(cls, context): - scene = context.scene - netsettings = scene.network_render - if netsettings.mode != "RENDER_CLIENT": - return False - verify_address(netsettings) - return super(RENDER_PT_network_jobs, cls).poll(context) and netsettings.server_address != "[default]" + netsettings = context.scene.network_render + return super().poll(context) and netsettings.mode == "RENDER_CLIENT" def draw(self, context): layout = self.layout @@ -317,9 +341,7 @@ class RENDER_PT_network_jobs(bpy.types.Panel, RenderButtonsPanel): sub.operator("render.netclientcancelall", icon='PANEL_CLOSE', text="") sub.operator("render.netclientdownload", icon='RENDER_ANIMATION', text="") - init_data(netsettings) - - if netsettings.active_job_index >= 0 and len(netsettings.jobs) > 0: + if len(netrender.jobs) > netsettings.active_job_index >= 0: layout.separator() job = netrender.jobs[netsettings.active_job_index] @@ -329,16 +351,33 @@ class RENDER_PT_network_jobs(bpy.types.Panel, RenderButtonsPanel): layout.label(text="Done: %04i" % job.results[DONE]) layout.label(text="Error: %04i" % job.results[ERROR]) -class NetRenderSettings(bpy.types.IDPropertyGroup): - pass +import properties_render +class RENDER_PT_network_output(NeedValidAddress, NetRenderButtonsPanel, bpy.types.Panel): + bl_label = "Output" + COMPAT_ENGINES = {'NET_RENDER'} -class NetRenderSlave(bpy.types.IDPropertyGroup): - pass + @classmethod + def poll(cls, context): + netsettings = context.scene.network_render + return super().poll(context) and netsettings.mode == "RENDER_CLIENT" + + draw = properties_render.RENDER_PT_output.draw -class NetRenderJob(bpy.types.IDPropertyGroup): - pass def addProperties(): + class NetRenderSettings(bpy.types.IDPropertyGroup): + pass + + class NetRenderSlave(bpy.types.IDPropertyGroup): + pass + + class NetRenderJob(bpy.types.IDPropertyGroup): + pass + + bpy.utils.register_class(NetRenderSettings) + bpy.utils.register_class(NetRenderSlave) + bpy.utils.register_class(NetRenderJob) + from bpy.props import PointerProperty, StringProperty, BoolProperty, EnumProperty, IntProperty, CollectionProperty bpy.types.Scene.network_render = PointerProperty(type=NetRenderSettings, name="Network Render", description="Network Render Settings") @@ -397,6 +436,16 @@ def addProperties(): default = default_path, subtype='FILE_PATH') + NetRenderSettings.job_type = EnumProperty( + items=( + ("JOB_BLENDER", "Blender", "Standard Blender Job"), + ("JOB_PROCESS", "Process", "Custom Process Job"), + ("JOB_VCS", "VCS", "Version Control System Managed Job"), + ), + name="Job Type", + description="Type of render job", + default="JOB_BLENDER") + NetRenderSettings.job_name = StringProperty( name="Job name", description="Name of the job", @@ -423,6 +472,30 @@ def addProperties(): min=1, max=10) + NetRenderSettings.vcs_wpath = StringProperty( + name="Working Copy", + description="Path of the local working copy", + maxlen = 1024, + default = "") + + NetRenderSettings.vcs_rpath = StringProperty( + name="Remote Path", + description="Path of the server copy (protocol specific)", + maxlen = 1024, + default = "") + + NetRenderSettings.vcs_revision = StringProperty( + name="Revision", + description="Revision for this job", + maxlen = 256, + default = "") + + NetRenderSettings.vcs_system = StringProperty( + name="VCS", + description="Version Control System", + maxlen = 64, + default = "Subversion") + NetRenderSettings.job_id = StringProperty( name="Network job id", description="id of the last sent render job", |