Script not running in Deprecated Mode

I’ve read through the scripting sections for Deadline 6 (we just migrated) I understand the idea of running older Deadline 5 scripts in Deprecated Mode. When running the script in the Monitor I get nothing. No error, no pop-up… and no script (it starts with a dialog box). I’ve moved the script to custom\scripts\General where I have the .py and .dlinit. My scripts is written for Python.NET. I have Deadline pointed to some extra libraries just like I did in Deadline 5.

RenderBilling.dlinit

DeprecatedMode=True

RenderBilling.py

[code]#Python.NET

from System.Collections.Specialized import *
from System.Drawing import *
from System.IO import *
from Deadline.Scripting import *
import os
import xlwt
from xlwt import Workbook, easyxf, Borders
from datetime import datetime
import shutil

Global variables

scriptDialog = None
location = ‘\\queue\DeadlineRepository6\custom\scripts\General\output\’
filename = None
job = None
poollist = []
jobtimelist = []
totaltimelist = []
cmp = None
tt = None
runtime2 = None

def main():
global scriptDialog
global settings

job-pool selection window

scriptDialog = DeadlineScriptEngine.GetScriptDialog()
scriptDialog.SetSize( 400, 150 )
scriptDialog.SetTitle( "Job Selection" )
scriptDialog.SetIcon( Path.Combine( GetRootDirectory(), "custom/scripts/General/RenderBilling.ico" ) )

scriptDialog.AddRow()
scriptDialog.AddControl( "DefineTool1", "LabelControl", "  * * BEFORE RUNNING SCRIPT, SET FILTER JOB POOL TO DESIRED JOB * *", 380, -1 )
scriptDialog.EndRow()
scriptDialog.AddRow()
scriptDialog.AddControl( "DefineTool2", "LabelControl", "This tool will calculate the total render time for job billing.", 380, -1 )
scriptDialog.EndRow()
scriptDialog.AddRow()
scriptDialog.AddControl( "PoolLabel", "LabelControl", "Select the job:", 100, -1 )
scriptDialog.AddControl( "PoolBox", "PoolComboControl", "job", 200, -1 )
scriptDialog.EndRow()

scriptDialog.AddRow()
scriptDialog.AddControl( "DummyLabel1", "LabelControl", "", 205, -1 )
scriptDialog.EndRow()
scriptDialog.AddRow()
scriptDialog.AddControl( "DummyLabel2", "LabelControl", "Once you hit Select, be patient. Another window will appear with your total.", 385, -1 )
scriptDialog.EndRow()

scriptDialog.AddRow()
scriptDialog.AddControl( "DummyLabel3", "LabelControl", "", 175, -1 )
selectButton = scriptDialog.AddControl( "SelectButton", "ButtonControl", "Select", 100, -1 )
selectButton.ValueModified += SelectButtonPressed
closeButton = scriptDialog.AddControl( "CloseButton", "ButtonControl", "Close", 100, -1 )
closeButton.ValueModified += CloseButtonPressed
scriptDialog.EndRow()

scriptDialog.ShowDialog( False )

def SelectButtonPressed( *args ):
global job

get job from selection box

job = scriptDialog.GetValue( "PoolBox" )

check to make sure a job was selected

if job == "none":
# pop up with error
	scriptDialog.ShowMessageBox( "    Please select a job, you can't calculate NONE.    ", "Error Message")
else:
	CalculateJob()

def CalculateJob( *args ):
global scriptDialog
global job
global location
global filename
global poollist
global jobtimelist
global totaltimelist
global cmp
global tt
scriptDialog.CloseDialog()

begin = datetime.now()

get list of job IDs for the pool that are completed, archived or not

filter = "jobPool="
filter += job
poolArgs = StringCollection()
poolArgs.Add("GetJobIdsFilterAnd")
poolArgs.Add( filter )
poolArgs.Add( "status=Completed" )

poollist = ClientUtils.ExecuteCommandAndGetOutput( poolArgs )
poollist = poollist.split()

if poollist == []:
	NoHours(job)
else:

declaring some variables

	tt = 0	# total job time tallied
	jt = 0  # job time


	cmp = len(poollist)	# number of jobs that are completed

get time for each job

	for i in range(len(poollist)):
		jobid = str(poollist[i])
		jobArgs = StringCollection()
		jobArgs.Add("GetJobTaskTotalTime")
		jobArgs.Add( jobid )
		jobtime = ClientUtils.ExecuteCommandAndGetOutput( jobArgs )
		d = float(jobtime[20:22])
		h = float(jobtime[24:26])
		m = float(jobtime[28:30])
		s = float(jobtime[32:34])
		jt = (86400*d+3600*h+60*m+s)
		jt /= 3600
		tt += jt

add job time to list

		jobtimelist.append(jt)		

add total job time to list

		totaltimelist.append(tt)				

pop up if no hours exist

	if tt == 0:
		NoHours()

how long did this process take

	end = datetime.now()
	runtime = end - begin

round total render time to 2 decimal points

	ttr = str(round(tt,2))	

results and email window

	scriptDialog = DeadlineScriptEngine.GetScriptDialog()
	scriptDialog.SetSize( 450, 390 )
	scriptDialog.SetTitle( "Results for job " + job )
	scriptDialog.SetIcon( Path.Combine( GetRootDirectory(), "custom/scripts/General/RenderBilling.ico" ) )
	
	scriptDialog.AddRow()
	scriptDialog.AddControl( "DummyLabel9", "LabelControl", "", 8, -1 )
	scriptDialog.AddControl( "QuickTotalLabel", "LabelControl", "Total render hours: ", 110, -1)
	scriptDialog.AddControl( "QuickTotal", "ReadOnlyTextControl", ttr, 50, -1 )
	scriptDialog.EndRow()
	
	scriptDialog.AddRow()
	scriptDialog.AddControl( "DummyLabel8", "LabelControl", "", 100, -1 )
	scriptDialog.EndRow()

	scriptDialog.AddGroupBox( "GroupBox1", "Verification Information", True )
	scriptDialog.AddRow()
	scriptDialog.AddControl( "WhoLabel", "LabelControl", "Enter your name or initials: ", 140, -1)
	scriptDialog.AddControl( "Whoisthis", "TextControl", "", 240, -1 )
	scriptDialog.EndRow()
	scriptDialog.AddRow()
	scriptDialog.AddControl( "CheckNumbersLabel", "LabelControl", "Enter the number of completed jobs Deadline shows in the Monitor:", 330, -1)
	scriptDialog.AddControl( "CheckNumbers", "TextControl", "", 50, -1 )
	scriptDialog.EndRow()
	scriptDialog.AddRow()
	scriptDialog.AddControl( "ReadOnlyTextLabel", "LabelControl", "The script found this many completed jobs: ", 330, -1 )
	scriptDialog.AddControl( "ReadOnlyTextBox", "ReadOnlyTextControl", str(cmp), 50, -1 )
	scriptDialog.EndRow()		
	scriptDialog.AddRow()
	scriptDialog.AddSelectionControl( "CheckBox", "CheckBoxControl", False, " Check the box if the script and Deadline match.", 400, -1 )
	scriptDialog.EndRow()
	scriptDialog.EndGroupBox( False )
	
	scriptDialog.AddRow()
	scriptDialog.AddControl( "DummyLabel7", "LabelControl", "", 100, -1 )
	scriptDialog.EndRow()

	scriptDialog.AddRow()
	scriptDialog.AddControl( "ComboLabel", "LabelControl", "Select An Action:", 110, -1 )
	scriptDialog.AddComboControl( "CBox", "ComboControl", "Save and Email", ("Save and Email","Save only","Email only","Discard results"), 320, -1 )
	scriptDialog.EndRow()

	scriptDialog.AddRow()
	scriptDialog.AddControl( "SaveFolderLabel", "LabelControl", "Select folder:", 110, -1 )
	scriptDialog.AddSelectionControl( "SaveFolder", "FolderBrowserControl", "\\\\SERVER\\projects\\Completed Project Render Logs\\", "", 320, -1 )
	scriptDialog.EndRow()
	scriptDialog.AddRow()
	scriptDialog.AddControl( "EmailLabel", "LabelControl", "Enter email address:", 110, -1 )
	scriptDialog.AddControl( "EmailAddress", "TextControl", "email@address.com", 320, -1 )
	scriptDialog.EndRow()
	scriptDialog.AddRow()
	scriptDialog.AddControl( "MultipleEmailSpacer", "LabelControl", "", 110, -1 )
	scriptDialog.AddControl( "MultipleEmail", "LabelControl", "(Multiple addresses need to be comma seperated.)", 285, -1 )
	scriptDialog.EndRow()


	scriptDialog.AddRow()
	scriptDialog.AddControl( "DummyLabel5", "LabelControl", "", 205, -1 )
	scriptDialog.EndRow()

	scriptDialog.AddRow()
	scriptDialog.EndRow()
	scriptDialog.AddRow()
	scriptDialog.AddControl( "DefineTool10", "LabelControl", "Script run time: " + str(runtime)[:7], 380, -1)
	scriptDialog.EndRow()	
	
	scriptDialog.AddRow()
	scriptDialog.AddControl( "DummyLabel6", "LabelControl", "", 225, -1 )
	selectButton = scriptDialog.AddControl( "SendButton", "ButtonControl", "OK", 100, -1 )
	selectButton.ValueModified += SendButtonPressed
	closeButton = scriptDialog.AddControl( "DiscardButton", "ButtonControl", "Discard", 100, -1 )
	closeButton.ValueModified += DiscardButtonPressed
	scriptDialog.EndRow()
	
	scriptDialog.ShowDialog( False )

def SendButtonPressed( *args ):
global scriptDialog
global poollist
global jobtimelist
global totaltimelist
global cmp
global tt
global runtime2
begin = datetime.now()
email = scriptDialog.GetValue( “EmailAddress” )
action = scriptDialog.GetValue( “CBox” )
save = scriptDialog.GetValue( “SaveFolder” )
who = scriptDialog.GetValue( “Whoisthis” )
checknumbers = scriptDialog.GetValue( “CheckNumbers” )
checkbox = scriptDialog.GetValue( “CheckBox” )
scriptDialog.CloseDialog()

jobname = []
plugname = []
username = []
cmpdate = []

get time for each job

for i in range(len(poollist)):
	jobid = str(poollist[i])

add job name to list

	nameArgs = StringCollection()
	nameArgs.Add("GetJobSetting")
	nameArgs.Add(jobid)
	nameArgs.Add("name")
	jobname.append( ClientUtils.ExecuteCommandAndGetOutput( nameArgs ))

add plug-in to list

	plugArgs = StringCollection()
	plugArgs.Add("GetJobSetting")
	plugArgs.Add(jobid)
	plugArgs.Add("pluginname")
	plugname.append( ClientUtils.ExecuteCommandAndGetOutput( plugArgs ))		

add artist to list

	userArgs = StringCollection()
	userArgs.Add("GetJobSetting")
	userArgs.Add(jobid)
	userArgs.Add("username")
	username.append( ClientUtils.ExecuteCommandAndGetOutput( userArgs ))

add completion date to list

	dateArgs = StringCollection()
	dateArgs.Add("GetJobSetting")
	dateArgs.Add(jobid)
	dateArgs.Add("completeddatetime")
	cmpdate.append( ClientUtils.ExecuteCommandAndGetOutput( dateArgs ))	

##### WRITE EXCEL DOC

define excel doc and sheet

wb = xlwt.Workbook()
ws = wb.add_sheet('RenderStats')

style1 = xlwt.XFStyle()

style1.num_format_str = ‘D-MMM-YY’

font2 = xlwt.Font()
font2.colour_index = 1
style2 = xlwt.XFStyle()
style2.font = font2

define a style for a bottom border

borders = Borders()
borders.bottom = Borders.MEDIUM
styleB = xlwt.XFStyle()
styleB.borders = borders

avgrentime = round(tt/cmp,2)
datemin = min(cmpdate)[:10]
datemax = max(cmpdate)[:10]

line01 = "Job: " + job
line02 = "Report date: " + str(datetime.now().strftime('%Y-%m-%d')) + " @ " + str(datetime.now().strftime('%H:%M'))
line03 = "Total render time: " + str(round(tt,2)) + " hours"
line04 = "Number of jobs submitted: " + str(cmp) + " jobs"
line05 = "Average render time: " + str(avgrentime) + " hours"
line06 = "Project dates: " + str(datemin) + " to " + str(datemax)

ws.write(0, 1, line01)
ws.write(1, 1, line02)
ws.write(2, 1, line03)
ws.write(3, 1, line04)
ws.write(4, 1, line05)
ws.write(5, 1, line06)
if str(who) == "":
	who = "not entered"	
ws.write(1, 5, "Validation by: " + str(who))
if checknumbers == "":
	ws.write(2, 5, "User did not enter job count")
	ws.write(3, 5, "No data for comparison")
elif int(checknumbers) == int(cmp):
	ws.write(2, 5, "User entered job count: " + str(checknumbers))
	ws.write(3, 5, "These numbers match")
else:
	ws.write(2, 5, "User entered job count: " + str(checknumbers))
	mistmatch = abs(int(checknumbers) - int(cmp))
	ws.write(3, 5, "There is a mismatch of " + str(mistmatch) + " jobs")
if checkbox == True:
	ws.write(4, 5, str(who) + " verifies this data")
if checkbox == False:
	ws.write(4, 5, "Data does not have user verification")	
maxCell = len(poollist)
maxCell += 8
formulaCheck = "IF(COUNTIF(J9:J" + str(maxCell) + ",\"yes\")>0,\"Time discrepancies: Yes\",\"Time discrepancies: No\")"
ws.write(5, 5, xlwt.Formula(formulaCheck))

establish table headers

ws.write(7, 0, "#", styleB)
ws.write(7, 1, "ID", styleB)
ws.write(7, 2, "Name", styleB)
ws.write(7, 3, "Application", styleB)
ws.write(7, 4, "Artist", styleB)
ws.write(7, 5, "Date", styleB)
ws.write(7, 6, "Time", styleB)
ws.write(7, 7, "Deadline Tally", styleB)
ws.write(7, 8, "Excel Tally", styleB)
ws.write(7, 9, "Discrepancies?", styleB)

declare max length variables

maxId = 20
maxName = 8
maxApp = 8 
maxArtist = 5
maxDate = 8
maxTime = 4
maxTallyDl = 10
maxTallyEx = 8
maxDscp = 10

start for loop here

for r in range(len(poollist)):
	myRow = r + 8
	myCell = r + 9
	jobCounter = r+1
	formula1 = "round(sum(L9:L" + str(myCell) + "),2)"
	formula2 = "if(H" + str(myCell) + "-I" + str(myCell) + "=0,\"\",\"yes\")"
	formulaJT = "round(L" + str(myCell) + ",2)"
	formulaTT = "round(M" + str(myCell) + ",2)"
	ws.write(myRow, 0, jobCounter)
	ws.write(myRow, 1, poollist[r])
	ws.write(myRow, 2, jobname[r])
	ws.write(myRow, 3, plugname[r])
	ws.write(myRow, 4, username[r])
	ws.write(myRow, 5, cmpdate[r][:10])
	ws.write(myRow, 6, xlwt.Formula(formulaJT))		
	ws.write(myRow, 7, xlwt.Formula(formulaTT))		
	ws.write(myRow, 11, jobtimelist[r], style2)
	ws.write(myRow, 12, totaltimelist[r], style2)
	ws.write(myRow, 8, xlwt.Formula(formula1))

discrepancy

	ws.write(myRow, 9, xlwt.Formula(formula2))

find max lengths

	if maxName < len(jobname[r]):
		maxName = len(jobname[r])
	if maxApp < len(plugname[r]):
		maxApp = len(plugname[r])
	if maxArtist < len(username[r]):
		maxArtist = len(username[r])
	if maxTime < len(str(round(jobtimelist[r],2))):
		maxTime = len(str(round(jobtimelist[r],2)))

set column widths

ws.col(0).width = 1250
ws.col(1).width = (maxId+4)*256 # max letter length + 4
ws.col(2).width = (maxName+1)*256
ws.col(3).width = (maxApp+4)*256
ws.col(4).width = (maxArtist+4)*256
ws.col(5).width = (maxDate+4)*256
ws.col(6).width = (maxTime+4)*256
ws.col(7).width = (maxTallyDl+4)*256
ws.col(8).width = (maxTallyEx+4)*256
ws.col(9).width = (maxDscp+4)*256

spreadsheet NOT SAVED yet

filename = job + '_' + str(datetime.now().strftime('%Y-%m-%d-%H-%M')) + '.xls'

###### EXCEL FILE DONE

if action == "Save and Email":
	wb.save(location + filename)
	shutil.copy2(location + filename,save + filename)
	emailArgs = StringCollection()
	emailArgs.Add("-SendEmail")
	emailArgs.Add("-subject")
	emailArgs.Add("Render farm totals for " + job)
	emailArgs.Add("-to")
	emailArgs.Add( email )
	emailArgs.Add("-message")
	emailArgs.Add(line01 + "\r" + line02 + "\r" + line03 + "\r" + line04 + "\r" + line05 + "\r" + line06)
	emailArgs.Add("-attach")
	emailArgs.Add(location + filename)		
	ClientUtils.ExecuteCommand( emailArgs )

how long did this process take

	end = datetime.now()
	runtime2 = end - begin
	TaskCompleted()
if action == "Save only":
	wb.save(location + filename)
	shutil.copy2(location + filename,save + filename)

how long did this process take

	end = datetime.now()
	runtime2 = end - begin
	TaskCompleted()		
if action == "Email only":
	wb.save(location + filename)
	emailArgs = StringCollection()
	emailArgs.Add("-SendEmail")
	emailArgs.Add("-subject")
	emailArgs.Add("Render farm totals for " + job)
	emailArgs.Add("-to")
	emailArgs.Add( email )
	emailArgs.Add("-message")
	emailArgs.Add(line01 + "\r" + line02 + "\r" + line03 + "\r" + line04 + "\r" + line05 + "\r" + line06)
	emailArgs.Add("-attach")
	emailArgs.Add(location + filename)
	ClientUtils.ExecuteCommand( emailArgs )

how long did this process take

	end = datetime.now()
	runtime2 = end - begin
	TaskCompleted()		
if action == "Discard results":
	CloseButtonPressed()

def DiscardButtonPressed( *args ):
global scriptDialog
scriptDialog.CloseDialog()

def CloseButtonPressed( *args ):
global scriptDialog
scriptDialog.CloseDialog()

def NoHours( *args ):
global scriptDialog
global job
scriptDialog.CloseDialog()
scriptDialog.ShowMessageBox( " There are no completed renders for job " + x + " ", “No Render Time”)

def TaskCompleted():
global scriptDialog
global runtime2
scriptDialog.CloseDialog()
scriptDialog.ShowMessageBox( " Task completed successfully. (Script run time: " + str(runtime2)[:7] + ") ", “Finished!!!”) [/code]

If anyone has any pointers or suggestions on where I’m going wrong I’d gladly appreciate it! I’m very interested in updating and diving into the new scripting for Deadline 6. At the moment there are bigger fish to fry.

Thanks!

brad

I’ll update to say a few things I’ve tried.
I’ve replaced all tabs with 4 spaces per another thread.
I am now using: scriptDialog = DeadlineScriptDialog()
and selectButton.ValueModified.connect( SelectButtonPressed )

The script is still doing things that Deadline doesn’t like. I’m slowly dissecting my script, removing sections at a time trying to find what’s killing it.

brad

…I think I have it working. And honestly I think the only other thing I changed was setting DepreciatedMode=False.

I am glad it’s working for you. Sadly I am not a coder so I don’t know why that is happening as it is, but at least it’s working.