create dialog code
authorsmbaker <smbaker@fc8clean.lan>
Tue, 6 Sep 2011 10:31:03 +0000 (03:31 -0700)
committersmbaker <smbaker@fc8clean.lan>
Tue, 6 Sep 2011 10:31:03 +0000 (03:31 -0700)
sface/sficreate.py [new file with mode: 0644]

diff --git a/sface/sficreate.py b/sface/sficreate.py
new file mode 100644 (file)
index 0000000..b4db34a
--- /dev/null
@@ -0,0 +1,100 @@
+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('<record authority="%s" description="%s" hrn="%s" type="%s" url="%s"></record>' % (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("<font color='green'>Slice created.</font>")
+            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("<font color='red'>Slice creation failed: %s</font>" % (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()
+