Commit 84ce3fce authored by strakpe's avatar strakpe
Browse files

update

parent fe185c03
......@@ -31,7 +31,6 @@ import typing
################################
import time
#time_file_transfer_req = time.time()
################################
import bpy
......@@ -49,14 +48,7 @@ import json
log = logging.getLogger(__name__)
################################
# def is_image_type(render_output_type: str) -> bool:
# """Determines whether the render output type is an image (True) or video (False)."""
# # This list is taken from rna_scene.c:273, rna_enum_image_type_items.
# video_types = {'AVI_JPEG', 'AVI_RAW', 'FRAMESERVER', 'FFMPEG', 'QUICKTIME'}
# return render_output_type not in video_types
################################
def redraw(self, context):
if context.area is None:
......@@ -142,38 +134,6 @@ class RAAS_PT_simplify(RaasButtonsPanel, Panel):
# Show current status of Raas.
raas_status = context.window_manager.raas_status
# status_row = box.split(**raas_pref.factor(0.25), align=True)
# status_row.label(text='Status:')
# status_row.label(text=raas_status)
# outdir_label_row = outdir_row.row(align=True)
# if raas_status in {'IDLE', 'ABORTED', 'DONE'}:
# # if prefs.raas_show_quit_after_submit_button:
# # ui = layout.split(**raas_pref.factor(0.75), align=True)
# # else:
# ui = box
# # ui.operator(RAAS_OT_prepare_files.bl_idname,
# # text='Prepare files',
# # icon='RENDER_ANIMATION')
# #.quit_after_submit = False
# # if prefs.raas_show_quit_after_submit_button:
# # ui.operator(RAAS_OT_prepare_files.bl_idname,
# # text='Submit & Quit',
# # icon='RENDER_ANIMATION').quit_after_submit = True
# # if bpy.app.debug:
# # layout.operator(RAAS_OT_copy_files.bl_idname)
# if raas_status == 'INVESTIGATING':
# row = box.row(align=True)
# row.label(text='Investigating your files')
# row.operator(RAAS_OT_abort.bl_idname, text='', icon='CANCEL')
# elif raas_status == 'COMMUNICATING':
# box.label(text='Communicating with Raas Server')
# elif raas_status == 'ABORTING':
# row = box.row(align=True)
# row.label(text='Aborting, please wait.')
# row.operator(RAAS_OT_abort.bl_idname, text='', icon='CANCEL')
row = box.row(align=True)
if raas_status in {'IDLE', 'ERROR' ,'DONE'}:
row.enabled = False
......@@ -183,11 +143,7 @@ class RAAS_PT_simplify(RaasButtonsPanel, Panel):
row.prop(context.window_manager, 'raas_progress',
text=context.window_manager.raas_status_txt)
row.operator(RAAS_OT_abort.bl_idname, text='', icon='CANCEL')
#elif raas_status != 'IDLE' and context.window_manager.raas_status_txt:
# row = box.row(align=True)
# row.enabled = False
# row.label(text='Status Message:')
# row.label(text=context.window_manager.raas_status_txt)
class AuthenticatedRaasOperatorMixin:
"""Checks credentials, to be used at the start of async_execute().
......@@ -238,18 +194,6 @@ JobPriorityExt_items = [
("CRITICAL", "Critical", "", 8),
]
# JobPriorityExt_items_dict = {
# "CONFIGURING": 0,
# "VERYLOW": 1,
# "LOW": 2,
# "BELOWAVERAGE": 3,
# "AVERAGE": 4,
# "ABOVEAVERAGE": 5,
# "HIGH": 6,
# "VERYHIGH": 7,
# "CRITICAL": 8,
# }
TaskStateExt_items = [
("CONFIGURING", "Configuring", "", 1),
("SUBMITTED", "Submitted", "", 2),
......@@ -260,16 +204,6 @@ TaskStateExt_items = [
("CANCELED", "Canceled", "", 64),
]
# RenderFormat_items = [
# ("PNG", "PNG", ""),
# ("TGA", "TGA", ""),
# ("JPEG", "JPEG", ""),
# ("BMP", "BMP", ""),
# ("EXR", "EXR", ""),
# ("TIFF", "TIFF", ""),
# ("OPEN_EXR_MULTILAYER", "OpenEXR Multilayer", ""),
# ]
RenderType_items = [
("IMAGE", "Image", ""),
("ANIMATION", "Animation", ""),
......@@ -286,35 +220,19 @@ JobQueue_items = [
####################################ListJobsForCurrentUser####################
class RAAS_PG_BlenderJobInfo(PropertyGroup):
#job_id : bpy.props.IntProperty(name="JobId")
job_name : bpy.props.StringProperty(name="JobName")
job_email : bpy.props.StringProperty(name="Email")
#job_priority : bpy.props.EnumProperty(items=JobPriorityExt_items,name="JobPriority",default='AVERAGE')
job_project : bpy.props.StringProperty(name="Project Name",maxlen=25)
job_walltime : bpy.props.IntProperty(name="Walltime [minutes]",default=30,min=1,max=2880)
job_walltime_pre : bpy.props.IntProperty(name="Walltime Preprocessing [minutes]",default=10,min=1,max=2880)
job_walltime_post : bpy.props.IntProperty(name="Walltime Postprocessing [minutes]",default=10,min=1,max=2880)
job_queue : bpy.props.EnumProperty(items=JobQueue_items,name="Queue")
job_nodes : bpy.props.IntProperty(name="Nodes",default=1,min=1,max=4)
# "WalltimeLimit": 600,
# "ClusterNodeTypeId": 7,
# job_walltimeLimit : bpy.props.EnumProperty(items=RenderFormat_items,name="Walltime Limit")
# job_clusterNodeTypeId : bpy.props.EnumProperty(items=RenderFormat_items,name="Cluster Node Type")
frame_start : bpy.props.IntProperty(name="FrameStart")
frame_end : bpy.props.IntProperty(name="FrameEnd")
#frame_step : bpy.props.IntProperty(name="FrameStep")
frame_current : bpy.props.IntProperty(name="FrameCurrent")
#render_format : bpy.props.EnumProperty(items=RenderFormat_items,name="Format")
#raas_remote_blend_file : bpy.props.StringProperty(name="RenderInput")
#raas_remote_outdir : bpy.props.StringProperty(name="RenderOutput")
render_type : bpy.props.EnumProperty(items=RenderType_items,name="Type")
#raas_local_blend_dir : bpy.props.StringProperty(name="BatOutDir")
#raas_local_blend_file : bpy.props.StringProperty(name="BatOutFile")
#bat_missing_sources : bpy.props.StringProperty(name="BatMissingSources")
class RAAS_PG_SubmittedTaskInfoExt(PropertyGroup):
Id : bpy.props.IntProperty(name="Id")
......@@ -338,8 +256,6 @@ class RAAS_PG_SubmittedJobInfoExt(PropertyGroup):
stateRen : bpy.props.StringProperty(name="State Ren")
statePost : bpy.props.StringProperty(name="State Post")
#, org.apache.etch.EtchServiceTier.types.EtchServiceTier.ClusterNodeTypeExt nodeType
#, org.apache.etch.EtchServiceTier.types.EtchServiceTier.SubmittedTaskInfoExt[] tasks
class RAAS_UL_SubmittedJobInfoExt(bpy.types.UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
......@@ -362,11 +278,9 @@ async def _ssh(key_file, destination, port1, port2):
destination,
'&',
]
# '-q', '-o', 'StrictHostKeyChecking=no',
import asyncio
loop = asyncio.get_event_loop()
#, stdin=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
process = await asyncio.create_subprocess_exec(*cmd, loop=loop)
await process.wait()
......@@ -381,7 +295,6 @@ async def connect_to_client(context, fileTransfer, job_id: int, token: str) -> N
"SessionCode": token
}
#allocated_nodes_ips = await raas_server.post("JobManagement/GetAllocatedNodesIPs", data)
info_job = await raas_server.post("JobManagement/GetCurrentInfoForJob", data)
all_params = info_job['AllParameters']
allocated_nodes_ips = ''
......@@ -412,13 +325,6 @@ async def connect_to_client(context, fileTransfer, job_id: int, token: str) -> N
####################################FileTransfer#############################
#############################################################################
# Define progress callback that prints the current percentage completed for the file
# def scp_progress(filename, size, sent):
# wm = bpy.context.window_manager
# wm.raas_status_txt = "Transfer of %s" % (filename)
# wm.raas_progress = round(float(sent)/float(size)*100)
#sys.stdout.write("%s\'s progress: %.2f%% \r" % (filename, float(sent)/float(size)*100) )
async def _scp(key_file, source, destination):
""" Execute an scp command """
......@@ -444,13 +350,7 @@ async def _scp(key_file, source, destination):
print("scp command failed: %s -> %s" % (source, destination))
async def start_transfer_files(context, job_id: int, token: str) -> None:
"""Start Transfer files."""
# if 'time_file_transfer_req' in locals():
# if time.time() - time_file_transfer_req < 10:
# raise Exception("Please wait at least 10 seconds before the requesting of the files from the server!")
# time_file_transfer_req = time.time()
"""Start Transfer files."""
data = {
"SubmittedJobInfoId": job_id,
......@@ -475,7 +375,6 @@ async def end_transfer_files(context, fileTransfer, job_id: int, token: str) ->
"""End Transfer files."""
key_file = str(get_ssh_key_file())
#os.remove(key_file)
data = {
"SubmittedJobInfoId": job_id,
......@@ -518,163 +417,6 @@ async def transfer_files_from_cluster(context, fileTransfer, job_remote_dir: str
await transfer_files(context, fileTransfer, job_local_dir, job_remote_dir, job_id, token, False)
# async def transfer_files_from_cluster(context, job_remote_dir: str, job_local_dir: str, job_id: int, token: str) -> None:
# """Transfer files."""
# data = {
# "SubmittedJobInfoId": job_id,
# "SessionCode": token
# }
# fileTransfer = await raas_server.post("FileTransfer/GetFileTransferMethod", data)
# serverHostname = fileTransfer['serverHostname']
# sharedBasepath = fileTransfer['sharedBasepath']
# #protocol = fileTransfer['protocol']
# credentials = fileTransfer['credentials']
# import paramiko
# from io import StringIO
# from base64 import b64decode
# from scp import SCPClient
# ssh = None
# scp = None
# try:
# ssh = paramiko.SSHClient()
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# key = paramiko.RSAKey.from_private_key(StringIO(credentials['privateKey']))
# ssh.connect(serverHostname, username=credentials['username'], pkey=key)
# context.window_manager.raas_status = 'TRANSFERRING'
# scp = SCPClient(ssh.get_transport(), progress = scp_progress, socket_timeout=60.0)
# remote_path = '%s/%s' % (str(sharedBasepath), str(job_remote_dir))
# scp.get(remote_path, local_path=job_local_dir, recursive=True)
# # remote_path = '%s/stdout' % (str(sharedBasepath))
# # scp.get(remote_path, local_path=job_local_dir)
# # remote_path = '%s/stderr' % (str(sharedBasepath))
# # scp.get(remote_path, local_path=job_local_dir)
# context.window_manager.raas_status_txt = "Transfer of %s is done" % job_local_dir
# context.window_manager.raas_status = 'PARTIAL_DONE'
# scp.close()
# except Exception as e:
# print('An error occurred creating SCP client: %s: %s' % (e.__class__, e))
# if scp is not None:
# scp.close()
# if ssh is not None:
# ssh.close()
# #context.window_manager.raas_status = 'ABORTED'
# #pass
# data = {
# "SubmittedJobInfoId": job_id,
# "UsedTransferMethod": fileTransfer,
# "SessionCode": token
# }
# import json
# data_json = json.dumps(data)
# await raas_server.post_json("FileTransfer/EndFileTransfer", data_json)
# @functools.lru_cache(1)
# def _render_output_path(
# local_project_path: str,
# blend_filepath: Path,
# #raas_render_job_type: str,
# raas_job_output_strip_components: int,
# raas_job_output_path: str,
# render_image_format: str,
# #raas_render_frame_range: str,
# *,
# include_rel_path: bool = True) -> typing.Optional[PurePath]:
# """Cached version of render_output_path()
# This ensures that redraws of the Raas Render and Add-on preferences panels
# is fast.
# """
# try:
# project_path = Path(bpy.path.abspath(local_project_path)).resolve()
# except FileNotFoundError:
# # Path.resolve() will raise a FileNotFoundError if the project path doesn't exist.
# return None
# try:
# blend_abspath = blend_filepath.resolve().absolute()
# except FileNotFoundError:
# # Path.resolve() will raise a FileNotFoundError if the path doesn't exist.
# return None
# try:
# proj_rel = blend_abspath.parent.relative_to(project_path)
# except ValueError:
# return None
# output_top = PurePath(raas_job_output_path)
# # Strip off '.raas' too; we use 'xxx.raas.blend' as job file, but
# # don't want to have all the output paths ending in '.raas'.
# stem = blend_filepath.stem
# # if stem.endswith('.raas'):
# # stem = stem[:-5]
# # if raas_render_job_type == 'blender-video-chunks':
# # return output_top / ('YYYY_MM_DD_SEQ-%s.mkv' % stem)
# if include_rel_path:
# rel_parts = proj_rel.parts[raas_job_output_strip_components:]
# dir_components = output_top.joinpath(*rel_parts) / stem
# else:
# dir_components = output_top
# # Blender will have to append the file extensions by itself.
# # if is_image_type(render_image_format):
# # return dir_components / '######'
# return dir_components #/ raas_render_frame_range
# def render_output_path(context, filepath: Path = None) -> typing.Optional[PurePath]:
# """Returns the render output path to be sent to Raas.
# :param context: the Blender context (used to find Raas preferences etc.)
# :param filepath: the Path of the blend file to render, or None for the current file.
# Returns None when the current blend file is outside the project path.
# """
# scene = context.scene
# prefs = raas_pref.preferences()
# if filepath is None:
# filepath = Path(context.blend_data.filepath)
# job_output_path = prefs.raas_job_output_path
# return _render_output_path(
# prefs.raas_project_local_path,
# filepath,
# #scene.raas_render_job_type,
# prefs.raas_job_output_strip_components,
# job_output_path,
# scene.render.image_settings.file_format,
# #scene.raas_render_frame_range,
# #include_rel_path=not scene.raas_do_override_output_path,
# )
# def remove_storage_path(storage_path, bat_path) -> str:
# storage_path_pure = pathlib.PurePath(storage_path)
# bat_path_pure = pathlib.PurePath(bat_path)
# relpath = bat_path_pure.relative_to(storage_path_pure)
# return relpath.as_posix()
##################################################################################
class RAAS_OT_download_files(
......@@ -693,8 +435,6 @@ class RAAS_OT_download_files(
if not await self.authenticate(context):
return
#blender_job_info_new = context.scene.raas_blender_job_info_new
#submitted_job_info_ext_new = context.scene.raas_submitted_job_info_ext_new
idx = context.scene.raas_list_jobs_index
if idx != -1:
......@@ -702,43 +442,23 @@ class RAAS_OT_download_files(
item = context.scene.raas_list_jobs[idx]
remote_storage_out = convert_path_to_linux(get_job_remote_storage(item.Name))
#local_storage_out = get_job_local_storage_out(item.Name)
local_storage_out = get_job_local_storage(item.Name)
fileTransfer = await start_transfer_files(context, item.Id, self.token)
#await transfer_files_from_cluster(context, fileTransfer, remote_storage_out, str(local_storage_out), item.Id, self.token)
remote_storage_out = convert_path_to_linux(get_job_remote_storage_out(item.Name))
#local_storage_out = get_job_local_storage_out(item.Name)
local_storage_out = get_job_local_storage(item.Name)
await transfer_files_from_cluster(context, fileTransfer, remote_storage_out, str(local_storage_out), item.Id, self.token)
remote_storage_log = convert_path_to_linux(get_job_remote_storage_log(item.Name))
#local_storage_log = get_job_local_storage_log(item.Name)
local_storage_log = get_job_local_storage(item.Name)
await transfer_files_from_cluster(context, fileTransfer, remote_storage_log, str(local_storage_log), item.Id, self.token)
# stdout_output = convert_path_to_linux(get_job_remote_storage_out(blender_job_info_new.job_name) / 'stdout')
# stderr_output = convert_path_to_linux(get_job_remote_storage_out(blender_job_info_new.job_name) / 'stderr')
# stdprog_output = convert_path_to_linux(get_job_remote_storage_out(blender_job_info_new.job_name) / 'stdprog')
# stdlog_output = convert_path_to_linux(get_job_remote_storage_out(blender_job_info_new.job_name) / 'stdlog')
#local_storage_log = get_job_local_storage_log(item.Name)
#local_storage_log.mkdir(parents=True,exist_ok=True)
#await transfer_files_from_cluster(context, 'stdout', str(local_storage_log / 'stdout'), item.Id, self.token)
#await transfer_files_from_cluster(context, 'stderr', str(local_storage_log / 'stderr'), item.Id, self.token)
#await transfer_files_from_cluster(context, 'stdprog', str(local_storage_log / 'stdprog'), item.Id, self.token)
#await transfer_files_from_cluster(context, 'stdlog', str(local_storage_log / 'stdlog'), item.Id, self.token)
await end_transfer_files(context, fileTransfer, item.Id, self.token)
except Exception: # as e:
#print('Problem with downloading files:')
#print(e)
except Exception:
import traceback
traceback.print_exc()
......@@ -770,9 +490,7 @@ class RAAS_OT_connect_to_client(
await connect_to_client(context, fileTransfer, item.Id, self.token)
except Exception: # as e:
#print('Problem with downloading files:')
#print(e)
except Exception:
import traceback
traceback.print_exc()
......@@ -786,10 +504,8 @@ class RAAS_OT_prepare_files(
bl_idname = 'raas.prepare_files'
bl_label = 'Prepare Files'
#stop_upon_exception = True
log = logging.getLogger('%s.RAAS_OT_prepare_files' % __name__)
# quit_after_submit = BoolProperty()
async def async_execute(self, context):
# Refuse to start if the file hasn't been saved. It's okay if
......@@ -812,42 +528,17 @@ class RAAS_OT_prepare_files(
prefs = raas_pref.preferences()
# Determine where the render output will be stored.
# render_output = render_output_path(context, filepath)
# if render_output is None:
# self.report({'ERROR'}, 'Current file is outside of project path.')
# self.quit()
# return
# self.log.info('Will output render files to %s', render_output)
if context.scene.raas_blender_job_info_new.job_project is None or len(context.scene.raas_blender_job_info_new.job_project) == 0 :
context.scene.raas_blender_job_info_new.job_project = filepath_stem
# BAT-pack the files to the destination directory.
#job_id = '%d' % context.scene.raas_list_jobs[context.scene.raas_list_jobs_index].id
outdir, outfile, missing_sources, unique_dir, filepath_stem = await self.bat_pack(filepath, context.scene.raas_blender_job_info_new.job_project)
#context.scene.raas_blender_job_info_new.raas_local_blend_dir = '%s' % outdir
#context.scene.raas_blender_job_info_new.raas_local_blend_file = '%s' % outfile
#context.scene.raas_blender_job_info_new.bat_missing_sources = '%s' % missing_sources
#context.scene.raas_blender_job_info_new.frame_step = context.scene.frame_step
context.scene.raas_blender_job_info_new.frame_start = context.scene.frame_start
context.scene.raas_blender_job_info_new.frame_end = context.scene.frame_end
context.scene.raas_blender_job_info_new.frame_current = context.scene.frame_current
# if not outfile:
# return
#context.scene.raas_blender_job_info_new.raas_remote_blend_file = remove_storage_path(prefs.raas_job_storage_path, outfile)
# if context.scene.raas_do_override_output_path:
# ro = context.scene.raas_override_output_path
# else:
#ro = render_output
#context.scene.raas_blender_job_info_new.raas_remote_outdir = remove_storage_path(prefs.raas_job_output_path, ro)
context.scene.raas_blender_job_info_new.job_name = unique_dir
......@@ -860,8 +551,6 @@ class RAAS_OT_prepare_files(
self.report({'WARNING'}, 'Raas job created with missing files: %s' %
'; '.join(names
))
# else:
# self.report({'INFO'}, 'Raas job created.')
await CreateJob(context, self.token)
......@@ -882,12 +571,6 @@ class RAAS_OT_prepare_files(
self.quit()
# def quit(self):
# if bpy.context.window_manager.raas_status != 'ABORTED':
# bpy.context.window_manager.raas_status = 'DONE'
# super().quit()
async def _save_blendfile(self, context):
"""Save to a different file, specifically for Raas.
......@@ -961,46 +644,13 @@ class RAAS_OT_prepare_files(
prefs = raas_pref.preferences()
#proj_abspath = bpy.path.abspath(prefs.raas_project_local_path)
proj_abspath = bpy.path.abspath('//./')
projdir = Path(proj_abspath).resolve()
exclusion_filter = '' #(prefs.raas_exclude_filter or '').strip()
relative_only = False #prefs.raas_relative_only
exclusion_filter = ''
relative_only = False
self.log.debug('projdir: %s', projdir)
# if any(prefs.raas_job_storage_path.startswith(scheme) for scheme in SHAMAN_URL_SCHEMES):
# endpoint, _ = bat_interface.parse_shaman_endpoint(prefs.raas_job_storage_path)
# self.log.info('Sending BAT pack to Shaman at %s', endpoint)
# try:
# outfile, missing_sources = await bat_interface.copy(
# bpy.context, filepath, projdir, '/', exclusion_filter,
# packer_class=bat_interface.ShamanPacker,
# relative_only=relative_only,
# endpoint=endpoint,
# checkout_id=job_id,
# manager_id=prefs.raas_manager.manager,
# )
# except bat_interface.FileTransferError as ex:
# self.log.error('Could not transfer %d files, starting with %s',
# len(ex.files_remaining), ex.files_remaining[0])
# self.report({'ERROR'}, 'Unable to transfer %d files' % len(ex.files_remaining))
# self.quit()
# return None, None, []
# except bat_interface.Aborted:
# self.log.warning('BAT Pack was aborted')
# self.report({'WARNING'}, 'Aborted Raas file packing/transferring')
# self.quit()
# return None, None, []
# bpy.context.window_manager.raas_status = 'DONE'
# outfile = PurePath('{shaman}') / outfile
# return None, outfile, missing_sources
# Create a unique directory that is still more or less identifyable.
# This should work better than a random ID.
# unique_dir = '%s-%s-%s' % (datetime.now().isoformat('-').replace(':', ''),
# filepath.stem, project)
dt = datetime.now().isoformat('-').replace(':', '').replace('.', '')
unique_dir = '%s-%s' % (dt[0:19], project)
......@@ -1036,29 +686,6 @@ class RAAS_OT_prepare_files(
bpy.context.window_manager.raas_status = 'PARTIAL_DONE'
return outdir, outfile, missing_sources, unique_dir, filepath.stem
# class RAAS_OT_transfer_files(
# async_loop.AsyncModalOperatorMixin,
# AuthenticatedRaasOperatorMixin,
# Operator):
# """transfer_files"""
# bl_idname = 'raas.transfer_files'
# bl_label = 'Transfer Files'
# stop_upon_exception = True
# log = logging.getLogger('%s.RAAS_OT_transfer_files' % __name__)
# # quit_after_submit = BoolProperty()
# async def async_execute(self, context):
# if not await self.authenticate(context):
# return
# blender_job_info_new = context.scene.raas_blender_job_info_new
# submitted_job_info_ext_new = context.scene.raas_submitted_job_info_ext_new
# await transfer_files_to_cluster(context, blender_job_info_new.raas_local_blend_dir, blender_job_info_new.raas_remote_outdir, submitted_job_info_ext_new.Id, self.token)
# self.quit()
class RAAS_OT_abort(Operator):
"""Aborts a running Raas file packing/transfer operation.
......@@ -1130,50 +757,19 @@ class RAAS_PT_NewJob(RaasButtonsPanel, Panel):
else:
layout.enabled = False
#prefs = raas_pref.preferences()
#################################################
box = layout.box()
# if context.window_manager.raas_status in {'IDLE', 'DONE'}:
# box.enabled = True
# else:
# box.enabled = False
paths_layout = box.column(align=True)
blender_job_info_new = context.scene.raas_blender_job_info_new
# if blender_job_info_new.raas_local_blend_dir:
# outdir_row = paths_layout.split(**raas_pref.factor(0.25), align=True)
# outdir_row.label(text='Local Dir:')
# outdir_label_row = outdir_row.row(align=True)
# outdir_label_row.label(text=blender_job_info_new.raas_local_blend_dir)
# if blender_job_info_new.raas_local_blend_file:
# outfile_row = paths_layout.split(**raas_pref.factor(0.25), align=True)
# outfile_row.label(text='Local File:')
# outfile_label_row = outfile_row.row(align=True)
# outfile_label_row.label(text=blender_job_info_new.raas_local_blend_file)
# # if blender_job_info_new.bat_missing_sources:
# # missing_sources_row = paths_layout.split(**raas_pref.factor(0.25), align=True)
# # missing_sources_row.label(text='Blender Missing Sources:')
# # missing_sources_label_row = missing_sources_row.row(align=True)
# # missing_sources_label_row.label(text=blender_job_info_new.bat_missing_sources)
# if blender_job_info_new.raas_local_blend_dir is None:
# return
blender_job_info_new = context.scene.raas_blender_job_info_new
job_info_col = paths_layout.column()
# job_info_col.prop(blender_job_info_new, 'job_name')
# job_info_col.prop(blender_job_info_new, 'job_priority')
job_info_col.prop(blender_job_info_new, 'job_queue')
#job_info_col.prop(blender_job_info_new, 'render_format')
if blender_job_info_new.job_queue == 'MIC' or blender_job_info_new.job_queue == 'MICBUFFER' or blender_job_info_new.job_queue == 'MICRES':
job_info_col.prop(blender_job_info_new, 'job_project')
job_info_col.prop(blender_job_info_new, 'job_email')
......@@ -1207,86 +803,19 @@ class RAAS_PT_NewJob(RaasButtonsPanel, Panel):
col.prop(