import calendar import datetime import os import re import sys import time from PyQt4.QtCore import * from PyQt4.QtGui import * from sface.config import config from sface.sfiprocess import SfiProcess class CreateWindow(QDialog): def __init__(self, parent=None): super(CreateWindow, self).__init__(parent) self.setWindowTitle("Create new Slice") self.renewProcess = None self.sliceWasCreated = False hrnLabel = QLabel("Slice HRN:") self.hrnEdit = QLineEdit() urlLabel = QLabel("Project URL:") self.urlEdit = QLineEdit() descLabel = QLabel("Description") self.descEdit = QTextEdit() self.status = QLabel("") self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.buttonBox.button(QDialogButtonBox.Ok).setDefault(True) layout = QVBoxLayout() layout.addWidget(hrnLabel) layout.addWidget(self.hrnEdit) layout.addWidget(urlLabel) layout.addWidget(self.urlEdit) layout.addWidget(descLabel) layout.addWidget(self.descEdit) layout.addWidget(self.status) layout.addWidget(self.buttonBox) self.setLayout(layout) self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()")) self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()")) def accept(self): auth = config.getAuthority() desc = str(self.descEdit.toPlainText()) hrn = str(self.hrnEdit.text()) type = "slice" url = str(self.urlEdit.text()) if not hrn.startswith(auth): QMessageBox.warning(self, "Invalid HRN", "HRN must be within your current authority (%s)" % auth) return if not (url.startswith("http://") or url.startswith("https://")): QMessageBox.warning(self, "Invalid URL", "URL must start with http:// or https://") return if not desc: QMessageBox.warning(self, "Invalid Description", "Description is too short") return self.setStatus("Registering Slice...") self.createProcess = SfiProcess(self) self.connect(self.createProcess, SIGNAL('finished()'), self.createFinished) self.buttonBox.setEnabled(False) newSliceRecord = os.path.expanduser("~/.sfi/newslice.record") file(newSliceRecord, "w").write('' % (auth, desc, hrn, type, url)) self.createProcess.addRecord(newSliceRecord) def setStatus(self, x): self.status.setText(x) def createFinished(self): if self.createProcess.faults==[]: # need to check for success/failure self.setStatus("Slice created.") self.sliceWasCreated = True self.buttonBox.setEnabled(True) self.buttonBox.clear() self.buttonBox.addButton(QDialogButtonBox.Close) else: faultString = self.createProcess.faults[0].get("faultString","") self.setStatus("Slice creation failed: %s" % (faultString)) self.sliceWasCreated = False self.buttonBox.setEnabled(True) self.disconnect(self.createProcess, SIGNAL('finished()'), self.createFinished) self.createProcess = None def getHrn(self): return self.hrnEdit.text()