class AddInputPopUp(QDialog): def __init__(self, mainguihandle): super().__init__() uic.loadUi("Graphics/UI/AddInput.ui", self) # self.containerpathlbl.setText(path) mainguihandle.getContainerInfo(self.containerlisttable) self.containerlisttable.clicked.connect(self.showContainerFromList) self.refContainerPlot = ContainerPlot( self, self.refContainerView, container=Container.InitiateContainer()) self.buttonBox1.button(QDialogButtonBox.Ok).setEnabled(False) self.buttonBox1.button(QDialogButtonBox.Cancel).clicked.connect( self.close) self.buttonBox1.button(QDialogButtonBox.Ok).clicked.connect( self.accept) self.fileheader = None self.type = None self.curContainer = None def coolerRectangleFeedback(self, type, view, fileheader, curContainer: Container): self.fileheader = fileheader self.type = type self.curContainer = curContainer if type == typeOutput: self.fileheaderlbl.setText("FileHeader: " + fileheader) self.fromcontainerlbl.setText("From Container: " + curContainer.containerName) self.revlbl.setText("Rev: " + curContainer.workingFrame.FrameName) self.buttonBox1.button(QDialogButtonBox.Ok).setEnabled(True) else: self.fileheaderlbl.setText("FileHeader: ") self.fromcontainerlbl.setText("From Container: ") self.revlbl.setText("Rev: ") self.buttonBox1.button(QDialogButtonBox.Ok).setEnabled(False) def showContainerFromList(self, containerList): rownumber = containerList.row() index = containerList.model().index(rownumber, 0) containerId = containerList.model().data(index, 0) refcontainerpath = os.path.join('ContainerMapWorkDir', containerId, 'containerstate.yaml') if os.path.exists(refcontainerpath): self.selectedContainer = Container.LoadContainerFromYaml( refcontainerpath) else: refpath = os.path.join('ContainerMapWorkDir') Container.downloadContainerInfo(refpath, self.mainGuiHandle.authtoken, BASE, containerId) self.selectedContainer = Container.LoadContainerFromYaml( refcontainerpath) # self.tester.setText(self.selectedContainer.containerName) self.refContainerPlot.changeContainer(self.selectedContainer) self.refContainerPlot.plot({}) def getInputs(self): print('working') if self.exec_() == QDialog.Accepted: return { 'fileheader': self.fileheader, 'type': self.type, 'UpstreamContainer': self.curContainer } else: return None
class NewContainerTab(): def __init__(self, mainguihandle): self.index = 2 self.inputFileButton = mainguihandle.inputFileButton self.RequiredButton = mainguihandle.RequiredButton self.outputFileButton = mainguihandle.outputFileButton self.curContainerView = mainguihandle.curContainerView self.returncontlist_2 = mainguihandle.returncontlist_2 self.containerlisttable_2 = mainguihandle.containerlisttable_2 self.removeFileButton = mainguihandle.removeFileButton self.editFileButton = mainguihandle.editFileButton self.commitNewButton = mainguihandle.commitNewButton self.refContainerView = mainguihandle.refContainerView self.containerName_lineEdit = mainguihandle.containerName_lineEdit self.descriptionText = mainguihandle.descriptionText self.messageText = mainguihandle.messageText self.GuiTab = mainguihandle.NewContainerTab self.inputFileButton = mainguihandle.inputFileButton self.editFileButton = mainguihandle.editFileButton self.removeFileButton = mainguihandle.removeFileButton self.mainguihandle = mainguihandle self.indexView2 = mainguihandle.indexView2 # self.tester= mainguihandle.tester # self.authtoken= mainguihandle.authtoken letters = string.ascii_letters self.containerName_lineEdit.setText(''.join( random.choice(letters) for i in range(10))) self.descriptionText.setPlainText(''.join( random.choice(letters) for i in range(20))) self.messageText.setPlainText(''.join( random.choice(letters) for i in range(30))) self.inputFileButton.setEnabled(False) self.editFileButton.setEnabled(False) self.removeFileButton.setEnabled(False) self.selectedContainerId = '' self.refContainerPlot = ContainerPlot( self, self.refContainerView, container=Container.InitiateContainer()) self.returncontlist_2.clicked.connect( partial(mainguihandle.getContainerInfo, self.containerlisttable_2)) self.containerlisttable_2.clicked.connect(self.showContainerFromList) self.inputFileButton.clicked.connect(self.addInputFileToTempContainer) self.fileheader = '' self.removeFileButton.clicked.connect(self.removeFileInfo) self.editFileButton.clicked.connect(self.editFileInfo) self.commitNewButton.clicked.connect(self.commitNewContainer) self.RequiredButton.clicked.connect( partial(self.AddToTempContainer, 'Required')) self.outputFileButton.clicked.connect( partial(self.AddToTempContainer, 'Output')) AddIndexToView(self.indexView2) self.changes = {} def setTab(self, tabon): self.GuiTab.setEnabled(tabon) def initiate(self, inputs): os.mkdir(inputs['dir']) os.mkdir(os.path.join(inputs['dir'], 'Main')) self.tempContainer = Container.InitiateContainer() self.tempContainer.containerName = inputs['containername'] self.tempContainer.containerworkingfolder = inputs['dir'] self.tempContainer.save() self.containerName_lineEdit.setText(inputs['containername']) self.workingdir = inputs['dir'] self.tempContainer.workingFrame = Frame(localfilepath=inputs['dir']) self.tempContainer.workingFrame.parentcontainerid = inputs[ 'containername'] self.tempContainer.workingFrame.FrameName = 'Rev1' self.tempContainer.workingFrame.writeoutFrameYaml( os.path.join(inputs['dir'], 'Main', 'Rev1.yaml')) self.curContainerPlot = ContainerPlot( self, self.curContainerView, self.tempContainer) #Edit to use refContainer self.setTab(True) def AddToTempContainer(self, fileType: str): self.inputFileButton.setEnabled(False) fileInfoDialog = selectFileDialog( fileType, self.tempContainer.containerworkingfolder, self.mainguihandle.worldlist) fileInfo = fileInfoDialog.getInputs() if fileInfo: self.tempContainer.addFileObject(fileInfo['fileheader'], fileInfo['ContainerFileInfo'], fileType) if fileType == 'Required': self.tempContainer.workingFrame.addFileTotrack( fileInfo['FilePath'], fileInfo['fileheader'], fileType) if fileType == 'Output': self.tempContainer.workingFrame.addOutputFileTotrack( fileInfo, fileType) self.curContainerPlot.plot(self.changes) def showContainerFromList(self, containerList): rownumber = containerList.row() index = containerList.model().index(rownumber, 0) containerId = containerList.model().data(index, 0) refcontainerpath = os.path.join('ContainerMapWorkDir', containerId, 'containerstate.yaml') if os.path.exists(refcontainerpath): self.selectedContainer = Container.LoadContainerFromYaml( refcontainerpath) else: refpath = os.path.join('ContainerMapWorkDir') Container.downloadContainerInfo(refpath, self.mainguihandle.authtoken, BASE, containerId) self.selectedContainer = Container.LoadContainerFromYaml( refcontainerpath) # self.tester.setText(self.selectedContainer.containerName) self.refContainerPlot.changeContainer(self.selectedContainer) self.refContainerPlot.plot(self.changes) def addInputFileToTempContainer(self): dialogWindow = inputFileDialog(self.selectedContainer.containerId, self.curfileheader) fileInfo = dialogWindow.getInputs() if fileInfo: branch = 'Main' fullpath, filetrack = self.selectedContainer.workingFrame.downloadInputFile( self.curfileheader, self.workingdir) self.tempContainer.addInputFileObject( fileheader=self.curfileheader, reffiletrack=filetrack, fullpath=fullpath, refContainerId=self.selectedContainer.containerId, branch=branch, rev='Rev' + str(self.selectedContainer.revnum)) # self.curContainerPlot.createInputRect() self.curContainerPlot.plot(self.changes) self.inputFileButton.setEnabled(False) def coolerRectangleFeedback(self, type, view, fileheader, curContainer): # self.selectedContainerId = containerName if view == self.refContainerView: if type == typeOutput: self.inputFileButton.setEnabled(True) self.removeFileButton.setEnabled(False) self.editFileButton.setEnabled(False) else: self.inputFileButton.setEnabled(False) self.removeFileButton.setEnabled(True) self.editFileButton.setEnabled(True) self.curfileheader = fileheader self.selectedContainer = curContainer self.curfiletype = type # self.guiHandle.tester.setText(self.guiHandle.filetype) elif view == self.curContainerView: self.curfileheader = fileheader self.removeFileButton.setEnabled(True) if type == typeInput: self.editFileButton.setEnabled(True) def editFileInfo(self): editFileDialog = selectFileDialog( self.curfiletype, self.tempContainer.containerworkingfolder) editFileInfo = editFileDialog.getInputs() if editFileInfo: self.editFileButton.setEnabled(False) self.removeFileButton.setEnabled(False) self.tempContainer.FileHeaders[editFileInfo['FileObjHeader']] = \ self.tempContainer.FileHeaders.pop(self.curfileheader) del self.tempContainer.workingFrame.filestrack[self.curfileheader] self.tempContainer.workingFrame.addFileTotrack( editFileInfo['FilePath'], editFileInfo['FileObjHeader'], self.curfiletype) if self.curfileheader != editFileInfo['FileObjHeader']: self.curContainerPlot.editRect(self.curfileheader, editFileInfo['FileObjHeader']) self.curContainerPlot.plot(self.changes) def removeFileInfo(self): fileDialog = removeFileDialog(self.curfileheader) fileheader = fileDialog.removeFile() if fileheader: self.editFileButton.setEnabled(False) self.removeFileButton.setEnabled(False) newTempContainer = copy.deepcopy(self.tempContainer) newTempFrame = copy.deepcopy(self.tempContainer.workingFrame) for key, value in self.tempContainer.FileHeaders.items(): if key == fileheader: del newTempContainer.FileHeaders[key] self.tempContainer = newTempContainer for key, value in self.tempContainer.workingFrame.filestrack.items( ): if key == fileheader: del newTempFrame.filestrack[key] self.tempContainer.workingFrame = newTempFrame self.curContainerPlot.removeRect(fileheader) def commitNewContainer(self): if '' not in [ self.containerName_lineEdit.text(), self.descriptionText.toPlainText(), self.messageText.toPlainText() ]: commitCheck = commitDialog(self.containerName_lineEdit.text(), self.descriptionText.toPlainText(), self.messageText.toPlainText()) commited = commitCheck.commit() if commited: containerName = self.containerName_lineEdit.text() commitmessage = self.messageText.toPlainText() success = self.tempContainer.CommitNewContainer( containerName, commitmessage, self.mainguihandle.authtoken, BASE) if success: self.setTab(False) containeryaml = os.path.join( self.tempContainer.containerworkingfolder, 'containerstate.yaml') self.mainguihandle.maincontainertab.readcontainer( containeryaml) self.mainguihandle.tabWidget.setCurrentIndex( self.mainguihandle.maincontainertab.index) self.mainguihandle.maptab.updateContainerMap() else: print('Commit failed') else: self.errorMessage = ErrorMessage() self.errorMessage.showError()