[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3620] trunk/py/scripts/addons: Refactor the uploader code into a nicer module.
Nathan Letwory
nathan at letworyinteractive.com
Fri Jul 13 08:33:02 CEST 2012
Revision: 3620
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3620
Author: jesterking
Date: 2012-07-13 06:33:01 +0000 (Fri, 13 Jul 2012)
Log Message:
-----------
Refactor the uploader code into a nicer module.
* xmlrpc usage encapsulated
* utility functions grouped
* UI and Operators separated
* Encapsulate exceptions
As with previous commit, this version now utilizes the new way
of storing user credentials, making it a lot easier for users
to use the uploader in subsequent usages.
Note that refreshing the session list isn't done on login anymore
so remember to press that button :)
Added Paths:
-----------
trunk/py/scripts/addons/render_renderfarmfi/
trunk/py/scripts/addons/render_renderfarmfi/__init__.py
trunk/py/scripts/addons/render_renderfarmfi/exceptions.py
trunk/py/scripts/addons/render_renderfarmfi/operators.py
trunk/py/scripts/addons/render_renderfarmfi/ore_session.py
trunk/py/scripts/addons/render_renderfarmfi/panels.py
trunk/py/scripts/addons/render_renderfarmfi/prepare.py
trunk/py/scripts/addons/render_renderfarmfi/rpc.py
trunk/py/scripts/addons/render_renderfarmfi/upload.py
trunk/py/scripts/addons/render_renderfarmfi/utils.py
Removed Paths:
-------------
trunk/py/scripts/addons/render_renderfarmfi.py
Added: trunk/py/scripts/addons/render_renderfarmfi/__init__.py
===================================================================
--- trunk/py/scripts/addons/render_renderfarmfi/__init__.py (rev 0)
+++ trunk/py/scripts/addons/render_renderfarmfi/__init__.py 2012-07-13 06:33:01 UTC (rev 3620)
@@ -0,0 +1,219 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+bl_info = {
+ "name": "Renderfarm.fi",
+ "author": "Nathan Letwory <nathan at letworyinteractive.com>, Jesse Kaukonen <jesse.kaukonen at gmail.com>",
+ "version": (21,),
+ "blender": (2, 6, 3),
+ "location": "Render > Engine > Renderfarm.fi",
+ "description": "Send .blend as session to http://www.renderfarm.fi to render",
+ "warning": "",
+ "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
+ "Scripts/Render/Renderfarm.fi",
+ "tracker_url": "https://projects.blender.org/tracker/index.php?"\
+ "func=detail&aid=22927",
+ "category": "Render"}
+
+"""
+Copyright 2009-2012 Laurea University of Applied Sciences
+Authors: Nathan Letwory, Jesse Kaukonen
+"""
+
+import bpy
+import hashlib
+import http.client
+import math
+from os.path import isabs, isfile, join, exists
+import os
+import time
+
+from bpy.props import PointerProperty, StringProperty, BoolProperty, EnumProperty, IntProperty, CollectionProperty
+
+from .panels import *
+from .operators import *
+from .rpc import RffiRpc
+
+bpy.CURRENT_VERSION = bl_info["version"][0]
+bpy.found_newer_version = False
+bpy.up_to_date = False
+bpy.download_location = 'http://www.renderfarm.fi/blender'
+
+bpy.rffi_creds_found = False
+bpy.rffi_user = ''
+bpy.rffi_hash = ''
+bpy.passwordCorrect = False
+bpy.loginInserted = False
+
+bpy.errorMessages = {
+ 'missing_desc': 'You need to enter a title, short and long description',
+ 'missing_creds': 'You haven\'t entered your credentials yet'
+}
+
+bpy.statusMessage = {
+ 'title': 'TRIA_RIGHT',
+ 'shortdesc': 'TRIA_RIGHT',
+ 'tags': 'TRIA_RIGHT',
+ 'longdesc': 'TRIA_RIGHT',
+ 'username': 'TRIA_RIGHT',
+ 'password': 'TRIA_RIGHT'
+}
+
+bpy.errors = []
+bpy.ore_sessions = []
+bpy.ore_completed_sessions = []
+bpy.ore_active_sessions = []
+bpy.ore_rejected_sessions = []
+bpy.ore_pending_sessions = []
+bpy.ore_active_session_queue = []
+bpy.ore_complete_session_queue = []
+bpy.queue_selected = -1
+bpy.errorStartTime = -1.0
+bpy.infoError = False
+bpy.cancelError = False
+bpy.texturePackError = False
+bpy.linkedFileError = False
+bpy.uploadInProgress = False
+bpy.originalFileName = bpy.data.filepath
+bpy.particleBakeWarning = False
+bpy.childParticleWarning = False
+bpy.simulationWarning = False
+bpy.file_format_warning = False
+bpy.ready = False
+
+
+def renderEngine(render_engine):
+ bpy.utils.register_class(render_engine)
+ return render_engine
+
+licenses = (
+ ('1', 'CC by-nc-nd', 'Creative Commons: Attribution Non-Commercial No Derivatives'),
+ ('2', 'CC by-nc-sa', 'Creative Commons: Attribution Non-Commercial Share Alike'),
+ ('3', 'CC by-nd', 'Creative Commons: Attribution No Derivatives'),
+ ('4', 'CC by-nc', 'Creative Commons: Attribution Non-Commercial'),
+ ('5', 'CC by-sa', 'Creative Commons: Attribution Share Alike'),
+ ('6', 'CC by', 'Creative Commons: Attribution'),
+ ('7', 'Copyright', 'Copyright, no license specified'),
+ )
+
+class ORESession(bpy.types.PropertyGroup):
+ name = StringProperty(name='Name', description='Name of the session', maxlen=128, default='[session]')
+
+class ORESettings(bpy.types.PropertyGroup):
+ username = StringProperty(name='E-mail', description='E-mail for Renderfarm.fi', maxlen=256, default='')
+ password = StringProperty(name='Password', description='Renderfarm.fi password', maxlen=256, default='')
+
+ shortdesc = StringProperty(name='Short description', description='A short description of the scene (100 characters)', maxlen=101, default='-')
+ tags = StringProperty(name='Tags', description='A list of tags that best suit the animation', maxlen=102, default='')
+ longdesc = StringProperty(name='Description', description='Description of the scene (2k)', maxlen=2048, default='')
+ title = StringProperty(name='Title', description='Title for this session (128 characters)', maxlen=128, default='')
+ url = StringProperty(name='Project URL', description='Project URL. Leave empty if not applicable', maxlen=256, default='')
+ engine = StringProperty(name='Engine', description='The rendering engine that is used for rendering', maxlen=64, default='blender')
+ samples = IntProperty(name='Samples', description='Number of samples that is used (Cycles only)', min=1, max=1000000, soft_min=1, soft_max=100000, default=100)
+ subsamples = IntProperty(name='Subsample Frames', description='Number of subsample frames that is used (Cycles only)', min=1, max=1000000, soft_min=1, soft_max=1000, default=10)
+ file_format = StringProperty(name='File format', description='File format used for the rendering', maxlen=30, default='PNG_FORMAT')
+
+ parts = IntProperty(name='Parts/Frame', description='', min=1, max=1000, soft_min=1, soft_max=64, default=1)
+ resox = IntProperty(name='Resolution X', description='X of render', min=1, max=10000, soft_min=1, soft_max=10000, default=1920)
+ resoy = IntProperty(name='Resolution Y', description='Y of render', min=1, max=10000, soft_min=1, soft_max=10000, default=1080)
+ memusage = IntProperty(name='Memory Usage', description='Estimated maximum memory usage during rendering in MB', min=1, max=6*1024, soft_min=1, soft_max=3*1024, default=256)
+ start = IntProperty(name='Start Frame', description='Start Frame', default=1)
+ end = IntProperty(name='End Frame', description='End Frame', default=250)
+ fps = IntProperty(name='FPS', description='FPS', min=1, max=120, default=25)
+
+ prepared = BoolProperty(name='Prepared', description='Set to True if preparation has been run', default=False)
+ debug = BoolProperty(name='Debug', description='Verbose output in console', default=False)
+ selected_session = IntProperty(name='Selected Session', description='The selected session', default=0)
+ hasUnsupportedSimulation = BoolProperty(name='HasSimulation', description='Set to True if therea re unsupported simulations', default=False)
+
+ inlicense = EnumProperty(items=licenses, name='Scene license', description='License speficied for the source files', default='1')
+ outlicense = EnumProperty(items=licenses, name='Product license', description='License speficied for the output files', default='1')
+ sessions = CollectionProperty(type=ORESession, name='Sessions', description='Sessions on Renderfarm.fi')
+ completed_sessions = CollectionProperty(type=ORESession, name='Completed sessions', description='Sessions that have been already rendered')
+ rejected_sessions = CollectionProperty(type=ORESession, name='Rejected sessions', description='Sessions that have been rejected')
+ pending_sessions = CollectionProperty(type=ORESession, name='Pending sessions', description='Sessions that are waiting for approval')
+ active_sessions = CollectionProperty(type=ORESession, name='Active sessions', description='Sessions that are currently rendering')
+ all_sessions = CollectionProperty(type=ORESession, name='All sessions', description='List of all of the users sessions')
+
+# session struct
+
+
+class RENDERFARM_MT_Session(bpy.types.Menu):
+ bl_label = "Show Session"
+
+ def draw(self, context):
+ layout = self.layout
+ ore = context.scene.ore_render
+
+ if (bpy.loginInserted == True):
+ layout.operator('ore.completed_sessions')
+ layout.operator('ore.accept_sessions')
+ layout.operator('ore.active_sessions')
+ layout.separator()
+ layout.operator('ore.cancelled_sessions')
+ else:
+ row = layout.row()
+ row.label(text="You must login first")
+
+
+class RenderfarmFi(bpy.types.RenderEngine):
+ bl_idname = 'RENDERFARMFI_RENDER'
+ bl_label = "Renderfarm.fi"
+
+ def render(self, scene):
+ print('Do test renders with Blender Render')
+
+def register():
+ bpy.utils.register_module(__name__)
+ bpy.types.Scene.ore_render = PointerProperty(type=ORESettings, name='ORE Render', description='ORE Render Settings')
+
+def unregister():
+ bpy.utils.unregister_module(__name__)
+
+if __name__ == "__main__":
+ register()
+
+# all panels, except render panel
+# Example of wrapping every class 'as is'
+from bl_ui import properties_scene
+for member in dir(properties_scene):
+ subclass = getattr(properties_scene, member)
+ try: subclass.COMPAT_ENGINES.add('RENDERFARMFI_RENDER')
+ except: pass
+del properties_scene
+
+from bl_ui import properties_world
+for member in dir(properties_world):
+ subclass = getattr(properties_world, member)
+ try: subclass.COMPAT_ENGINES.add('RENDERFARMFI_RENDER')
+ except: pass
+del properties_world
+
+from bl_ui import properties_material
+for member in dir(properties_material):
+ subclass = getattr(properties_material, member)
+ try: subclass.COMPAT_ENGINES.add('RENDERFARMFI_RENDER')
+ except: pass
+del properties_material
+
+from bl_ui import properties_object
+for member in dir(properties_object):
+ subclass = getattr(properties_object, member)
+ try: subclass.COMPAT_ENGINES.add('RENDERFARMFI_RENDER')
+ except: pass
+del properties_object
Added: trunk/py/scripts/addons/render_renderfarmfi/exceptions.py
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list