[add] widgets for GUI independent spawning of autoPyLoT processes, WIP
This commit is contained in:
parent
482ae112e8
commit
4107f0249d
@ -7,6 +7,8 @@ Created on Wed Mar 19 11:27:35 2014
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import multiprocessing
|
||||||
|
import subprocess
|
||||||
import getpass
|
import getpass
|
||||||
import warnings
|
import warnings
|
||||||
import copy
|
import copy
|
||||||
@ -32,7 +34,7 @@ from PySide import QtCore, QtGui
|
|||||||
from PySide.QtGui import QAction, QApplication, QCheckBox, QComboBox, \
|
from PySide.QtGui import QAction, QApplication, QCheckBox, QComboBox, \
|
||||||
QDateTimeEdit, QDialog, QDialogButtonBox, QDoubleSpinBox, QGroupBox, \
|
QDateTimeEdit, QDialog, QDialogButtonBox, QDoubleSpinBox, QGroupBox, \
|
||||||
QGridLayout, QIcon, QKeySequence, QLabel, QLineEdit, QMessageBox, \
|
QGridLayout, QIcon, QKeySequence, QLabel, QLineEdit, QMessageBox, \
|
||||||
QPixmap, QSpinBox, QTabWidget, QToolBar, QVBoxLayout, QWidget, \
|
QPixmap, QSpinBox, QTabWidget, QToolBar, QVBoxLayout, QHBoxLayout, QWidget, \
|
||||||
QPushButton, QFileDialog, QInputDialog, QKeySequence
|
QPushButton, QFileDialog, QInputDialog, QKeySequence
|
||||||
from PySide.QtCore import QSettings, Qt, QUrl, Signal, Slot
|
from PySide.QtCore import QSettings, Qt, QUrl, Signal, Slot
|
||||||
from PySide.QtWebKit import QWebView
|
from PySide.QtWebKit import QWebView
|
||||||
@ -2833,6 +2835,144 @@ class PylotParaBox (QtGui.QWidget):
|
|||||||
self.qmb.show ()
|
self.qmb.show ()
|
||||||
|
|
||||||
|
|
||||||
|
class AutoPickDlg (QDialog):
|
||||||
|
def __init__(self, parent=None, sge=False):
|
||||||
|
super (AutoPickDlg, self).__init__ (parent)
|
||||||
|
|
||||||
|
if not self.parent():
|
||||||
|
print('WARNING: No parent given! PyLoT parameter can not be read!')
|
||||||
|
|
||||||
|
self.pp_export = os.path.join(os.path.expanduser('~'), '.pylot', '.pylot_exported.in')
|
||||||
|
|
||||||
|
self.sge = sge
|
||||||
|
self.layout = QVBoxLayout()
|
||||||
|
self.setWindowTitle('Pick whole project...')
|
||||||
|
self.setLayout(self.layout)
|
||||||
|
|
||||||
|
self.setupUI()
|
||||||
|
self.resize(720, 0)
|
||||||
|
|
||||||
|
def setupUI(self):
|
||||||
|
self.init_sb_ncores()
|
||||||
|
self.init_gb()
|
||||||
|
|
||||||
|
self.layout.addLayout(self.layout_ncores, 2)
|
||||||
|
self.layout.addWidget(self.gb)
|
||||||
|
self.addJobWidget()
|
||||||
|
|
||||||
|
def init_sb_ncores(self):
|
||||||
|
self.layout_ncores = QHBoxLayout()
|
||||||
|
self.label_ncores = QLabel('Number of CPU cores:')
|
||||||
|
self.sb_ncores = QSpinBox()
|
||||||
|
if not self.sge:
|
||||||
|
maxcores = multiprocessing.cpu_count ()
|
||||||
|
self.sb_ncores.setMinimum(1)
|
||||||
|
self.sb_ncores.setMaximum (maxcores)
|
||||||
|
self.sb_ncores.setEnabled(False) # not yet implemented in autoPyLoT
|
||||||
|
self.layout_ncores.addWidget(self.label_ncores)
|
||||||
|
self.layout_ncores.addWidget(self.sb_ncores)
|
||||||
|
self.layout_ncores.setStretch(0, 1)
|
||||||
|
self.layout_ncores.setStretch(1, 0)
|
||||||
|
|
||||||
|
def init_gb(self):
|
||||||
|
title_sge = {
|
||||||
|
True: 'Submit autoPyLoT process to grid engine',
|
||||||
|
False: 'Spawn autoPyLot process on local machine'
|
||||||
|
}
|
||||||
|
|
||||||
|
self.gb = QGroupBox (title_sge[self.sge])
|
||||||
|
|
||||||
|
def addJobWidget(self):
|
||||||
|
widget_sge = {
|
||||||
|
True: Submit2Grid(),
|
||||||
|
False: SubmitLocal()
|
||||||
|
}
|
||||||
|
|
||||||
|
self.job_widget = widget_sge[self.sge]
|
||||||
|
self.job_widget.button.clicked.connect(self.accept)
|
||||||
|
|
||||||
|
self.jobLayout = QVBoxLayout()
|
||||||
|
self.jobLayout.addWidget(self.job_widget)
|
||||||
|
|
||||||
|
self.gb.setLayout(self.jobLayout)
|
||||||
|
|
||||||
|
def exportParameter(self):
|
||||||
|
pylot_params = self.parent()._inputs
|
||||||
|
pylot_params.export2File(self.pp_export)
|
||||||
|
|
||||||
|
def accept(self):
|
||||||
|
self.job_widget.start(self.pp_export)
|
||||||
|
QDialog.accept(self)
|
||||||
|
|
||||||
|
|
||||||
|
class Submit2Grid (QWidget):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super (Submit2Grid, self).__init__ (parent)
|
||||||
|
self.main_layout = QVBoxLayout()
|
||||||
|
self.sub_layout = QVBoxLayout()
|
||||||
|
self.setLayout(self.main_layout)
|
||||||
|
self.label = QLabel('Full GE command (without script name):')
|
||||||
|
self.textedit = QLineEdit()
|
||||||
|
self.button = QPushButton('Run')
|
||||||
|
|
||||||
|
self.script_fn = '.autoPyLot.sh'
|
||||||
|
|
||||||
|
self.sub_layout.addWidget(self.label)
|
||||||
|
self.sub_layout.addWidget(self.textedit)
|
||||||
|
|
||||||
|
self.main_layout.addLayout(self.sub_layout)
|
||||||
|
self.main_layout.addWidget(self.button)
|
||||||
|
|
||||||
|
self.setDefaultCommand()
|
||||||
|
|
||||||
|
def setDefaultCommand(self):
|
||||||
|
default_command = 'qsub -l low -cwd -q "TARGET_MACHINE" -pe mpi-fu NCORES'
|
||||||
|
self.textedit.setText(default_command)
|
||||||
|
|
||||||
|
def start(self, pp_export):
|
||||||
|
self.genShellScript(pp_export)
|
||||||
|
self.execute_script()
|
||||||
|
|
||||||
|
def genShellScript(self, pp_export):
|
||||||
|
outfile = open(self.script_fn, 'w')
|
||||||
|
outfile.write('#!/bin/sh\n\n')
|
||||||
|
outfile.write('python autoPyLoT.py -i {} \n'.format(pp_export))
|
||||||
|
outfile.close()
|
||||||
|
|
||||||
|
def execute_script(self):
|
||||||
|
command = self.textedit.text().strip()
|
||||||
|
command += ' '
|
||||||
|
command += self.script_fn
|
||||||
|
pid = subprocess.Popen(command)
|
||||||
|
print('exec. command: {}'.format (command))
|
||||||
|
print('Spawned autoPyLoT process with pid {}'.format (pid))
|
||||||
|
|
||||||
|
|
||||||
|
class SubmitLocal (QWidget):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super (SubmitLocal, self).__init__ (parent)
|
||||||
|
self.main_layout = QVBoxLayout()
|
||||||
|
self.setLayout(self.main_layout)
|
||||||
|
self.button = QPushButton('Run')
|
||||||
|
|
||||||
|
self.script_fn = ['python', 'autoPyLoT.py', '-i']
|
||||||
|
|
||||||
|
self.main_layout.addWidget(self.button)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
print('subprocess Popen')
|
||||||
|
|
||||||
|
def start(self, pp_export):
|
||||||
|
self.execute_command(pp_export)
|
||||||
|
|
||||||
|
def execute_command(self, pp_export):
|
||||||
|
command = self.script_fn
|
||||||
|
command.append(pp_export)
|
||||||
|
print ('exec. command: {}'.format (command))
|
||||||
|
p = subprocess.Popen (command)
|
||||||
|
print ('Spawned autoPyLoT process with pid {}'.format (p.pid))
|
||||||
|
|
||||||
|
|
||||||
class PropertiesDlg (QDialog):
|
class PropertiesDlg (QDialog):
|
||||||
def __init__(self, parent=None, infile=None, inputs=None):
|
def __init__(self, parent=None, infile=None, inputs=None):
|
||||||
super (PropertiesDlg, self).__init__ (parent)
|
super (PropertiesDlg, self).__init__ (parent)
|
||||||
|
Loading…
Reference in New Issue
Block a user