Package arcjobtool :: Package plugins :: Module OctavePlugin
[hide private]
[frames] | no frames]

Source Code for Module arcjobtool.plugins.OctavePlugin

  1  # -*- coding: iso-8859-15 -*- 
  2  # generated by wxGlade HG on Fri Aug 28 10:05:56 2009 
  3   
  4  import wx 
  5   
  6  # begin wxGlade: extracode 
  7  # end wxGlade 
  8   
  9  from wx.lib.dialogs import * 
 10   
 11  import os 
 12   
 13  from arcjobtool.ArcUtils import * 
 14  from arcjobtool.Tasks import * 
 15  from arcjobtool.plugins.Plugins import * 
 16  from arcjobtool.PlatformUtils import * 
 17   
 18  runScriptTemplate = """#!/bin/sh 
 19  octave %s 
 20  """ 
 21   
22 -class OctaveTask(BaseTask):
23 - def __init__(self):
24 BaseTask.__init__(self) 25 26 self.description = "Octave" 27 28 # Task specific attributes 29 30 self.__mainFile = "" 31 self.packages = [] 32 self.extraFiles = []
33
34 - def onCreateRunScript(self, taskName, taskId):
35 """ 36 Abstract routine responsible for returning a 37 run-script for the job. 38 """ 39 return runScriptTemplate % (self.__mainFile)
40
41 - def onCreateJobDescription(self, taskName, taskId, taskDir):
42 """ 43 Abstract routines responsible for returning a jobdescription for 44 the job. 45 """ 46 47 # Create a managed job description 48 49 job = ManagedJobDescription(); 50 job.Application.Executable.Name = "run.sh" 51 job.Identification.JobName = str(taskName) 52 job.Resources.TotalWallTime = arc.ScalableTimeInt(self.cpuTime*60) 53 #job.addArgument("run.sh") 54 55 # Make sure we store the full paths of input files 56 57 for inputFile in self.inputFiles.keys(): 58 url = self.inputFiles[inputFile] 59 if url == "": 60 fullPath = os.path.join(taskDir, inputFile) 61 job.addInputFile(fullPath) 62 else: 63 job.addInputFile(inputFile, url) 64 65 job.addRuntimeEnvironment("ENV/OCTAVE/OCTAVE",">=","1.0.0") 66 job.Application.Output = "stdout.txt" 67 job.Application.Error = "stderr.txt" 68 job.addOutputFile("/", "") 69 70 return job
71
72 - def onSaveConfig(self, config):
73 config.add_section("octaveplugin") 74 config.set("octaveplugin", "mainfile", self.mainFile)
75
76 - def onLoadConfig(self, config):
77 try: 78 self.mainFile = config.get("octaveplugin", "mainfile") 79 except: 80 pass
81
82 - def setMainFile(self, filename):
83 self.__mainFile = filename
84
85 - def getMainFile(self):
86 return self.__mainFile
87
88 - def addPackage(self, filename):
89 pass
90
91 - def addExtraFile(self, filename):
92 pass
93
94 - def removePackage(self, filename):
95 pass
96
97 - def removeExtraFile(self, filename):
98 pass
99 100 mainFile = property(getMainFile, setMainFile)
101
102 -class OctavePlugin(PluginBase):
103 - def onInit(self):
104 self.__task = OctaveTask()
105
106 - def onDestroy(self):
107 pass
108
109 - def onEdit(self):
110 dlg = OctavePluginDialog(None, -1, "") 111 dlg.task = self.__task 112 dlg.ShowModal() 113 dlg.Destroy() 114 self.__task = dlg.task
115
116 - def onSave(self, workDir):
117 (taskLocation, taskDirName) = os.path.split(workDir) 118 self.__task.name = taskDirName.split(".")[0] 119 self.__task.workDir = workDir 120 self.__task.save()
121
122 - def onLoad(self, workDir):
123 (taskLocation, taskDirName) = os.path.split(workDir) 124 self.__task.name = taskDirName.split(".")[0] 125 self.__task.workDir = workDir 126 self.__task.load()
127
128 - def onClean(self):
129 self.__task.clean()
130
131 - def onSetup(self):
132 self.__task.setup()
133
134 - def onGetId(self):
135 return "OctavePlugin"
136
137 - def onGetVersion(self):
138 return (0,1,0)
139
140 - def onGetDescription(self):
141 return "Octave job definition plugin."
142
143 - def onGetShortName(self):
144 return "Octave job definition."
145
146 - def onNeedSave(self):
147 return self.__task.dirty
148
149 - def onGetTask(self):
150 return self.__task
151 152 id = property(onGetId) 153 version = property(onGetVersion) 154 shortname = property(onGetShortName) 155 description = property(onGetDescription) 156 task = property(onGetTask)
157 158
159 -class OctavePluginDialog(wx.Dialog):
160 - def __init__(self, *args, **kwds):
161 # begin wxGlade: OctavePluginDialog.__init__ 162 kwds["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.THICK_FRAME 163 wx.Dialog.__init__(self, *args, **kwds) 164 self.notebook_1 = wx.Notebook(self, -1, style=0) 165 self.generalPane = wx.Panel(self.notebook_1, -1) 166 self.nameLabel = wx.StaticText(self.generalPane, -1, "Name", style=wx.ALIGN_RIGHT) 167 self.jobNameText = wx.TextCtrl(self.generalPane, -1, "", style=wx.TE_READONLY) 168 self.cputTimeLabel = wx.StaticText(self.generalPane, -1, "CPU Time (min)", style=wx.ALIGN_RIGHT) 169 self.cpuTimeText = wx.TextCtrl(self.generalPane, -1, "") 170 self.notifyLabel = wx.StaticText(self.generalPane, -1, "Notify (email)", style=wx.ALIGN_RIGHT) 171 self.notifyText = wx.TextCtrl(self.generalPane, -1, "") 172 self.notifyMemoryLabel = wx.StaticText(self.generalPane, -1, "Memory (MB)", style=wx.ALIGN_RIGHT) 173 self.memoryText = wx.TextCtrl(self.generalPane, -1, "") 174 self.inputFilePane = wx.Panel(self.notebook_1, -1) 175 self.inputFilesLabel = wx.StaticText(self.inputFilePane, -1, "Input files") 176 self.inputFileList = wx.ListBox(self.inputFilePane, -1, choices=[]) 177 self.createFileButton = wx.Button(self.inputFilePane, -1, "Create...") 178 self.addFileButton = wx.Button(self.inputFilePane, -1, "Add...") 179 self.removeFileButton = wx.Button(self.inputFilePane, -1, "Remove") 180 self.clearFilesButton = wx.Button(self.inputFilePane, -1, "Clear") 181 self.inputFileEditButton = wx.Button(self.inputFilePane, -1, "Edit...") 182 self.mainFileLabel = wx.StaticText(self.inputFilePane, -1, "Main octave file") 183 self.mainFileChoice = wx.Choice(self.inputFilePane, -1, choices=[]) 184 self.parameterPane = wx.Panel(self.notebook_1, -1) 185 self.parameterFilesLabel = wx.StaticText(self.parameterPane, -1, "Parameter substitution files") 186 self.paramFilesList = wx.ListBox(self.parameterPane, -1, choices=[]) 187 self.AddParamFileButton = wx.Button(self.parameterPane, -1, "Add...") 188 self.removeParamFileButton = wx.Button(self.parameterPane, -1, "Remove") 189 self.clearParamFilesButton = wx.Button(self.parameterPane, -1, "Clear") 190 self.paramFileEditButton = wx.Button(self.parameterPane, -1, "Edit...") 191 self.static_line_1 = wx.StaticLine(self.parameterPane, -1) 192 self.sweepSizeLabel = wx.StaticText(self.parameterPane, -1, "Sweep size", style=wx.ALIGN_RIGHT) 193 self.sweepSizeSpinner = wx.SpinCtrl(self.parameterPane, -1, "0", min=1, max=1000) 194 self.saveButton = wx.Button(self, -1, "Save") 195 self.closeButton = wx.Button(self, -1, "Close") 196 197 self.__set_properties() 198 self.__do_layout() 199 200 self.Bind(wx.EVT_BUTTON, self.onCreateFile, self.createFileButton) 201 self.Bind(wx.EVT_BUTTON, self.onAddFile, self.addFileButton) 202 self.Bind(wx.EVT_BUTTON, self.onRemoveFile, self.removeFileButton) 203 self.Bind(wx.EVT_BUTTON, self.onClearFiles, self.clearFilesButton) 204 self.Bind(wx.EVT_BUTTON, self.onEditInputFile, self.inputFileEditButton) 205 self.Bind(wx.EVT_CHOICE, self.onSelectMainFile, self.mainFileChoice) 206 self.Bind(wx.EVT_BUTTON, self.onAddParamFile, self.AddParamFileButton) 207 self.Bind(wx.EVT_BUTTON, self.onRemoveParamFileButton, self.removeParamFileButton) 208 self.Bind(wx.EVT_BUTTON, self.onClearParamFilesButton, self.clearParamFilesButton) 209 self.Bind(wx.EVT_BUTTON, self.onEditParamFile, self.paramFileEditButton) 210 self.Bind(wx.EVT_BUTTON, self.onSave, self.saveButton) 211 self.Bind(wx.EVT_BUTTON, self.onClose, self.closeButton)
212 # end wxGlade 213
214 - def __set_properties(self):
215 # begin wxGlade: OctavePluginDialog.__set_properties 216 self.SetTitle("Octave job definition") 217 self.SetSize((410, 368)) 218 self.nameLabel.SetMinSize((120, -1)) 219 self.jobNameText.SetMinSize((-1, 27)) 220 self.cputTimeLabel.SetMinSize((120, -1)) 221 self.cpuTimeText.SetMinSize((-1, 27)) 222 self.notifyLabel.SetMinSize((120, -1)) 223 self.notifyText.SetMinSize((-1, 27)) 224 self.notifyMemoryLabel.SetMinSize((120, -1)) 225 self.memoryText.SetMinSize((-1, 27)) 226 self.sweepSizeLabel.SetMinSize((120, -1))
227 # end wxGlade 228
229 - def __do_layout(self):
230 # begin wxGlade: OctavePluginDialog.__do_layout 231 sizer_1 = wx.BoxSizer(wx.VERTICAL) 232 sizer_2 = wx.BoxSizer(wx.HORIZONTAL) 233 sizer_11 = wx.BoxSizer(wx.VERTICAL) 234 sizer_12 = wx.BoxSizer(wx.HORIZONTAL) 235 sizer_13 = wx.BoxSizer(wx.HORIZONTAL) 236 sizer_14 = wx.BoxSizer(wx.VERTICAL) 237 sizer_9 = wx.BoxSizer(wx.VERTICAL) 238 sizer_10 = wx.BoxSizer(wx.VERTICAL) 239 sizer_8 = wx.BoxSizer(wx.HORIZONTAL) 240 sizer_9_copy = wx.BoxSizer(wx.VERTICAL) 241 sizer_3 = wx.BoxSizer(wx.VERTICAL) 242 sizer_7 = wx.BoxSizer(wx.HORIZONTAL) 243 sizer_6 = wx.BoxSizer(wx.HORIZONTAL) 244 sizer_5 = wx.BoxSizer(wx.HORIZONTAL) 245 sizer_4 = wx.BoxSizer(wx.HORIZONTAL) 246 sizer_4.Add(self.nameLabel, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) 247 sizer_4.Add(self.jobNameText, 1, wx.RIGHT|wx.EXPAND, 4) 248 sizer_3.Add(sizer_4, 0, wx.TOP|wx.EXPAND, 10) 249 sizer_5.Add(self.cputTimeLabel, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) 250 sizer_5.Add(self.cpuTimeText, 1, wx.RIGHT|wx.EXPAND|wx.ADJUST_MINSIZE, 4) 251 sizer_3.Add(sizer_5, 0, wx.EXPAND, 0) 252 sizer_6.Add(self.notifyLabel, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) 253 sizer_6.Add(self.notifyText, 1, wx.RIGHT|wx.EXPAND|wx.ADJUST_MINSIZE, 4) 254 sizer_3.Add(sizer_6, 0, wx.EXPAND, 0) 255 sizer_7.Add(self.notifyMemoryLabel, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) 256 sizer_7.Add(self.memoryText, 1, wx.RIGHT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 257 sizer_3.Add(sizer_7, 0, wx.EXPAND, 0) 258 self.generalPane.SetSizer(sizer_3) 259 sizer_9.Add(self.inputFilesLabel, 0, wx.LEFT|wx.TOP|wx.ADJUST_MINSIZE, 4) 260 sizer_8.Add(self.inputFileList, 1, wx.ALL|wx.EXPAND|wx.ADJUST_MINSIZE, 4) 261 sizer_9_copy.Add(self.createFileButton, 0, wx.ADJUST_MINSIZE, 0) 262 sizer_9_copy.Add(self.addFileButton, 0, wx.ADJUST_MINSIZE, 0) 263 sizer_9_copy.Add(self.removeFileButton, 0, wx.ADJUST_MINSIZE, 0) 264 sizer_9_copy.Add(self.clearFilesButton, 0, wx.ADJUST_MINSIZE, 0) 265 sizer_9_copy.Add(self.inputFileEditButton, 0, wx.TOP|wx.ADJUST_MINSIZE, 7) 266 sizer_8.Add(sizer_9_copy, 0, wx.ALL|wx.EXPAND, 4) 267 sizer_9.Add(sizer_8, 1, wx.EXPAND, 0) 268 sizer_10.Add(self.mainFileLabel, 0, wx.ADJUST_MINSIZE, 0) 269 sizer_10.Add(self.mainFileChoice, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0) 270 sizer_9.Add(sizer_10, 0, wx.ALL|wx.EXPAND, 4) 271 self.inputFilePane.SetSizer(sizer_9) 272 sizer_11.Add(self.parameterFilesLabel, 0, wx.LEFT|wx.TOP|wx.ADJUST_MINSIZE, 4) 273 sizer_13.Add(self.paramFilesList, 1, wx.ALL|wx.EXPAND|wx.ADJUST_MINSIZE, 4) 274 sizer_14.Add(self.AddParamFileButton, 0, wx.ADJUST_MINSIZE, 0) 275 sizer_14.Add(self.removeParamFileButton, 0, wx.ADJUST_MINSIZE, 0) 276 sizer_14.Add(self.clearParamFilesButton, 0, wx.ADJUST_MINSIZE, 0) 277 sizer_14.Add(self.paramFileEditButton, 0, wx.TOP|wx.ADJUST_MINSIZE, 7) 278 sizer_13.Add(sizer_14, 0, wx.ALL|wx.EXPAND, 4) 279 sizer_11.Add(sizer_13, 1, wx.EXPAND, 0) 280 sizer_11.Add(self.static_line_1, 0, wx.TOP|wx.EXPAND, 5) 281 sizer_12.Add(self.sweepSizeLabel, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0) 282 sizer_12.Add(self.sweepSizeSpinner, 0, wx.TOP|wx.ADJUST_MINSIZE, 2) 283 sizer_11.Add(sizer_12, 0, wx.TOP|wx.BOTTOM|wx.EXPAND, 4) 284 self.parameterPane.SetSizer(sizer_11) 285 self.notebook_1.AddPage(self.generalPane, "General") 286 self.notebook_1.AddPage(self.inputFilePane, "Input files") 287 self.notebook_1.AddPage(self.parameterPane, "Parameters") 288 sizer_1.Add(self.notebook_1, 1, wx.ALL|wx.EXPAND, 8) 289 sizer_2.Add(self.saveButton, 0, wx.ADJUST_MINSIZE, 0) 290 sizer_2.Add(self.closeButton, 0, wx.ADJUST_MINSIZE, 0) 291 sizer_1.Add(sizer_2, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 4) 292 self.SetSizer(sizer_1) 293 self.Layout()
294 # end wxGlade 295
296 - def __setupInputFiles(self):
297 """ 298 Setup listbox for input files and choice box 299 for selecting main file. 300 """ 301 self.inputFileList.Clear() 302 self.mainFileChoice.Clear() 303 304 filenameDict = {} 305 count = 0 306 307 # Fill listbox and choice box 308 309 if self.__task!=None: 310 for inputFile in self.__task.inputFiles.keys(): 311 self.inputFileList.Append(inputFile) 312 filenameDict[inputFile] = count 313 if inputFile.find(".m")!=-1: 314 count = count + 1 315 self.mainFileChoice.Append(inputFile) 316 317 # Select main file (if any) in the choice box 318 319 if filenameDict.has_key(self.__task.mainFile): 320 print "filenameDict has key", self.__task.mainFile 321 print "Selection = ", filenameDict[self.__task.mainFile] 322 self.mainFileChoice.SetSelection(filenameDict[self.__task.mainFile])
323
324 - def __setupSweepFiles(self):
325 326 self.paramFilesList.Clear() 327 328 # Fill listbox 329 330 if self.__task!=None: 331 for sweepFile in self.__task.sweepFiles.keys(): 332 print sweepFile 333 self.paramFilesList.Append(sweepFile)
334 335
336 - def onSave(self, event): # wxGlade: OctavePluginDialog.<event_handler>
337 self.__task.cpuTime = int(self.cpuTimeText.GetValue()) 338 self.__task.notify = self.notifyText.GetValue() 339 self.__task.memory = int(self.memoryText.GetValue()) 340 self.__task.sweepSize = int(self.sweepSizeSpinner.GetValue()) 341 self.__task.dirty = True 342 self.Close()
343
344 - def onClose(self, event): # wxGlade: OctavePluginDialog.<event_handler>
345 self.__task.dirty = False 346 self.Close() 347
348 - def setTask(self, task):
349 self.__task = task 350 351 self.jobNameText.SetValue(self.__task.name) 352 self.cpuTimeText.SetValue(str(self.__task.cpuTime)) 353 self.notifyText.SetValue(self.__task.notify) 354 self.memoryText.SetValue(str(self.__task.memory)) 355 self.sweepSizeSpinner.SetValue(int(self.__task.sweepSize)) 356 357 self.__setupInputFiles() 358 self.__setupSweepFiles()
359
360 - def getTask(self):
361 return self.__task
362
363 - def onAddFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
364 inputFilename = wx.FileSelector("Add input file", default_path=os.getcwd()) 365 if inputFilename != "": 366 self.__task.addAndCopyInputFile(inputFilename) 367 self.__setupInputFiles() 368
369 - def onRemoveFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
370 if self.inputFileList.GetStringSelection()!="": 371 self.__task.removeInputFile(self.inputFileList.GetStringSelection()) 372 self.__setupInputFiles() 373
374 - def onClearFiles(self, event): # wxGlade: OctavePluginDialog.<event_handler>
375 self.__task.clearInputFiles() 376 self.__setupInputFiles() 377 378 task = property(getTask, setTask) 379
380 - def onSelectMainFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
381 mainFile = self.mainFileChoice.GetStringSelection() 382 if mainFile != "": 383 self.__task.mainFile = mainFile 384
385 - def onAddParamFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
386 result = singleChoiceDialog(self, "Add file for substitution", "Input files", self.__task.inputFiles) 387 if result.accepted: 388 self.__task.addSweepFile(result.selection) 389 self.__setupSweepFiles() 390
391 - def onRemoveParamFileButton(self, event): # wxGlade: OctavePluginDialog.<event_handler>
392 if self.paramFilesList.GetStringSelection()!="": 393 self.__task.removeSweepFile(self.paramFilesList.GetStringSelection()) 394 self.__setupSweepFiles() 395
396 - def onClearParamFilesButton(self, event): # wxGlade: OctavePluginDialog.<event_handler>
397 self.__task.clearSweepFiles() 398 self.__setupSweepFiles() 399
400 - def onEditInputFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
401 if self.inputFileList.GetStringSelection()!="": 402 fullPath = os.path.join(self.__task.workDir,self.inputFileList.GetStringSelection()) 403 editFile(fullPath) 404
405 - def onEditParamFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
406 if self.paramFilesList.GetStringSelection()!="": 407 fullPath = os.path.join(self.__task.workDir,self.paramFilesList.GetStringSelection()) 408 editFile(fullPath) 409
410 - def onCreateFile(self, event): # wxGlade: OctavePluginDialog.<event_handler>
411 result = textEntryDialog(self, "Create file", "Filename", "noname.m") 412 413 if result.accepted: 414 fullPath = os.path.join(self.__task.workDir, str(result.text)) 415 416 newFile = open(fullPath, "w") 417 newFile.close() 418 419 editFile(fullPath) 420 421 self.__task.addAndCopyInputFile(fullPath, copyFile = False) 422 self.__setupInputFiles() 423 424 # end of class OctavePluginDialog 425 426 if __name__ == "__main__": 427 app = wx.PySimpleApp(0) 428 wx.InitAllImageHandlers() 429 mainDialog = OctavePluginDialog(None, -1, "") 430 app.SetTopWindow(mainDialog) 431 mainDialog.Show() 432 app.MainLoop() 433