class Exporter(): def __init__(self): self.__export_keyword_model = ExportKeywordModel() def runExport(self, values): keyword = values["keyword"] file_name = self.createExportFileNameMask(keyword, values["selected_case"], values["report_step"], values["path"]) if self.__export_keyword_model.isFieldKw(keyword): self.exportField(keyword, file_name, values["iactive"], values["file_type_key"], values["report_step"], values["selected_case"]) elif self.__export_keyword_model.isGenKw(keyword): self.exportGenKw(keyword, file_name, values["iactive"], values["file_type_key"], values["report_step"], values["selected_case"]) elif self.__export_keyword_model.isGenParamKw(keyword) or self.__export_keyword_model.isGenDataKw(keyword): self.exportGenData(keyword, file_name, values["iactive"], values["file_type_key"], values["report_step"], values["selected_case"]) else: sys.stderr.write('** WARNING: Cannot export unknown keyword type "%s".\n' % keyword) def exportField(self, keyword, file_name, iactive, file_type_key, report_step, selected_case): if file_type_key == "Eclipse GRDECL": file_type = EnkfFieldFileFormatEnum.ECL_GRDECL_FILE else: file_type = EnkfFieldFileFormatEnum.RMS_ROFF_FILE result = ExportModel().exportField(keyword, file_name, iactive, file_type, report_step, selected_case) if not result: QMessageBox.warning(self, "Warning", '''Something did not work!''', QMessageBox.Ok) def exportGenData(self, keyword, file_name, iactive, file_type_key, report_step, selected_case): ExportModel().exportGenData(keyword, file_name, iactive, file_type_key, report_step, selected_case) def exportGenKw(self, keyword, file_name, iactive, file_type_key, report_step, selected_case): ExportModel().exportGenKw(keyword, file_name, iactive, file_type_key, report_step, selected_case) def createExportFileNameMask(self, keyword, current_case, report_step, path): impl_type = None if self.__export_keyword_model.isFieldKw(keyword): impl_type = self.__export_keyword_model.getImplementationType(keyword) elif self.__export_keyword_model.isGenDataKw(keyword): impl_type = "Gen_Data" elif self.__export_keyword_model.isGenKw(keyword): impl_type = "Gen_Kw" elif self.__export_keyword_model.isGenParamKw(keyword): impl_type = "Gen_Param" path = os.path.join(str(path), str(current_case), str(impl_type), str(keyword)) if self.__export_keyword_model.isGenDataKw(keyword): path = path + "_" + str(report_step) if not QDir(path).exists(): os.makedirs(path) return path
def __init__(self): super(ExportTool, self).__init__("Export Data", "tools/export", resourceIcon("ide/table_export")) self.__export_widget = None self.__dialog = None self.__exporter = None self.setEnabled(ExportKeywordModel().hasKeywords())
def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Export data") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Select case:", self._case_combo) self._export_keyword_model = ExportKeywordModel() self._kw_model = self._export_keyword_model.getKeyWords() self._keywords = QComboBox() self._keywords.addItems(self._kw_model) layout.addRow("Select keyword:", self._keywords) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument()) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.validateExportDialog) layout.addRow("Active realizations:", self._active_realizations_field) file_name_button = QToolButton() file_name_button.setText("Browse") file_name_button.clicked.connect(self.selectFileDirectory) self._defaultPath = QDir.currentPath() + "/export" self._file_name = QLineEdit() self._file_name.setEnabled(False) self._file_name.setText(self._defaultPath) self._file_name.textChanged.connect(self.validateExportDialog) self._file_name.setMinimumWidth(250) file_name_layout = QHBoxLayout() file_name_layout.addWidget(self._file_name) file_name_layout.addWidget(file_name_button) layout.addRow("Select directory to save files to:", file_name_layout) self._gen_kw_file_types = ["Parameter list", "Template based"] self._field_kw_file_types = ["Eclipse GRDECL", "RMS roff"] self._gen_data_file_types = ["Gen data"] self._file_type_model = self._field_kw_file_types self._file_type_combo = QComboBox() self._file_type_combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self._file_type_combo.addItems(self._file_type_model) layout.addRow("Select file format:", self._file_type_combo) self._report_step = QLineEdit() layout.addRow("Report step:", self._report_step) self._gen_data_report_step_model = [] self._gen_data_report_step = QComboBox() layout.addRow("Report step:", self._gen_data_report_step) self.setLayout(layout) self._keywords.currentIndexChanged.connect(self.keywordSelected) self.keywordSelected()
class ExportPanel(QWidget): updateExportButton = Signal(str, bool) runExport = Signal(dict) def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Export data") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Select case:", self._case_combo) self._export_keyword_model = ExportKeywordModel() self._kw_model = self._export_keyword_model.getKeyWords() self._keywords = QComboBox() self._keywords.addItems(self._kw_model) layout.addRow("Select keyword:", self._keywords) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument()) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.validateExportDialog) layout.addRow("Active realizations:", self._active_realizations_field) file_name_button = QToolButton() file_name_button.setText("Browse") file_name_button.clicked.connect(self.selectFileDirectory) self._defaultPath = QDir.currentPath() + "/export" self._file_name = QLineEdit() self._file_name.setEnabled(False) self._file_name.setText(self._defaultPath) self._file_name.textChanged.connect(self.validateExportDialog) self._file_name.setMinimumWidth(250) file_name_layout = QHBoxLayout() file_name_layout.addWidget(self._file_name) file_name_layout.addWidget(file_name_button) layout.addRow("Select directory to save files to:", file_name_layout) self._gen_kw_file_types = ["Parameter list", "Template based"] self._field_kw_file_types = ["Eclipse GRDECL", "RMS roff"] self._gen_data_file_types = ["Gen data"] self._file_type_model = self._field_kw_file_types self._file_type_combo = QComboBox() self._file_type_combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self._file_type_combo.addItems(self._file_type_model) layout.addRow("Select file format:", self._file_type_combo) self._report_step = QLineEdit() layout.addRow("Report step:", self._report_step) self._gen_data_report_step_model = [] self._gen_data_report_step = QComboBox() layout.addRow("Report step:", self._gen_data_report_step) self.setLayout(layout) self._keywords.currentIndexChanged.connect(self.keywordSelected) self.keywordSelected() def selectFileDirectory(self): directory = QFileDialog().getExistingDirectory(self, "Directory", self._file_name.text(), QFileDialog.ShowDirsOnly) if str(directory).__len__() > 0: self._file_name.setText(str(directory)) def updateFileExportType(self, keyword): self._file_type_combo.clear() if self._export_keyword_model.isGenKw(keyword): self._file_type_model = self._gen_kw_file_types elif self._export_keyword_model.isGenParamKw(keyword): self._file_type_model = self._gen_data_file_types elif self._export_keyword_model.isGenDataKw(keyword): self._file_type_model = self._gen_data_file_types else: self._file_type_model = self._field_kw_file_types self._file_type_combo.addItems(self._file_type_model) def export(self): keyword = self._kw_model[self._keywords.currentIndex()] try: report_step = self.getReportStep(keyword) except IndexError as e: QMessageBox.question(self, 'Error', e.args[0], QMessageBox.NoButton) return all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] path = self._file_name.text() iactive = self._active_realizations_model.getActiveRealizationsMask() file_type_key = self._file_type_model[self._file_type_combo.currentIndex()] values = {"keyword": keyword, "report_step": report_step, "iactive": iactive, "file_type_key": file_type_key, "path": path, "selected_case": selected_case} self.runExport.emit(values) def getReportStep(self, key): report_step = 0 if self._dynamic: report_step = self._report_step.text() if self._export_keyword_model.isGenParamKw(key): return report_step if self._export_keyword_model.isGenDataKw(key): lst = self._gen_data_report_step_model idx = self._gen_data_report_step.currentIndex() if lst and len(lst) > idx: report_step = lst[idx] else: raise IndexError('No such model step: %d. Valid range: [0, %d)' % (idx, len(lst))) return report_step def keywordSelected(self): key = self._kw_model[self._keywords.currentIndex()] self.updateFileExportType(key) self._dynamic = False if self._export_keyword_model.isFieldKw(key): self._dynamic = self._export_keyword_model.isDynamicField(key) self._report_step.setVisible(self._dynamic) self.layout().labelForField(self._report_step).setVisible(self._dynamic) self._gen_data_report_step.setVisible(self._export_keyword_model.isGenDataKw(key)) self.layout().labelForField(self._gen_data_report_step).setVisible(self._export_keyword_model.isGenDataKw(key)) if self._export_keyword_model.isGenDataKw(key): data = self._export_keyword_model.getGenDataReportSteps(key) self._gen_data_report_step_model = data self._gen_data_report_step.clear() self._gen_data_report_step.addItems(self._gen_data_report_step_model) def setSelectedCase(self, selected_case): self._case_combo.setCurrentIndex(self._case_model.indexOf(selected_case)) def validateExportDialog(self): validRealizations = False if self._active_realizations_field.isValid(): validRealizations = True path = str(self._file_name.text()) validPath = len(path) > 0 if validRealizations and validPath: self.updateExportButton.emit("export", True) else: self.updateExportButton.emit("export", False)
class ExportPanel(QWidget): updateExportButton = pyqtSignal(str, bool) runExport = pyqtSignal(dict) def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Export data") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Select case:", self._case_combo) self._export_keyword_model = ExportKeywordModel() self._kw_model = self._export_keyword_model.getKeyWords() self._keywords = QComboBox() self._keywords.addItems(self._kw_model) layout.addRow("Select keyword:", self._keywords) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument()) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.validateExportDialog) layout.addRow("Active realizations:", self._active_realizations_field) file_name_button = QToolButton() file_name_button.setText("Browse") file_name_button.clicked.connect(self.selectFileDirectory) self._defaultPath = QDir.currentPath() + "/export" self._file_name = QLineEdit() self._file_name.setEnabled(False) self._file_name.setText(self._defaultPath) self._file_name.textChanged.connect(self.validateExportDialog) self._file_name.setMinimumWidth(250) file_name_layout = QHBoxLayout() file_name_layout.addWidget(self._file_name) file_name_layout.addWidget(file_name_button) layout.addRow("Select directory to save files to:", file_name_layout) self._gen_kw_file_types = ["Parameter list", "Template based"] self._field_kw_file_types = ["Eclipse GRDECL", "RMS roff"] self._gen_data_file_types = ["Gen data"] self._file_type_model = self._field_kw_file_types self._file_type_combo = QComboBox() self._file_type_combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self._file_type_combo.addItems(self._file_type_model) layout.addRow("Select file format:", self._file_type_combo) self._report_step = QLineEdit() layout.addRow("Report step:", self._report_step) self._gen_data_report_step_model = [] self._gen_data_report_step = QComboBox() layout.addRow("Report step:", self._gen_data_report_step) self.setLayout(layout) self._keywords.currentIndexChanged.connect(self.keywordSelected) self.keywordSelected() def selectFileDirectory(self): directory = QFileDialog().getExistingDirectory(self, "Directory", self._file_name.text(), QFileDialog.ShowDirsOnly) if str(directory).__len__() > 0: self._file_name.setText(str(directory)) def updateFileExportType(self, keyword): self._file_type_combo.clear() if self._export_keyword_model.isGenKw(keyword): self._file_type_model = self._gen_kw_file_types elif self._export_keyword_model.isGenParamKw(keyword): self._file_type_model = self._gen_data_file_types elif self._export_keyword_model.isGenDataKw(keyword): self._file_type_model = self._gen_data_file_types else: self._file_type_model = self._field_kw_file_types self._file_type_combo.addItems(self._file_type_model) def export(self): keyword = self._kw_model[self._keywords.currentIndex()] try: report_step = self.getReportStep(keyword) except IndexError as e: QMessageBox.question(self, 'Error', e.args[0], QMessageBox.NoButton) return all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] path = self._file_name.text() iactive = self._active_realizations_model.getActiveRealizationsMask() file_type_key = self._file_type_model[self._file_type_combo.currentIndex()] values = {"keyword": keyword, "report_step": report_step, "iactive": iactive, "file_type_key": file_type_key, "path": path, "selected_case": selected_case} self.runExport.emit(values) def getReportStep(self, key): report_step = 0 if self._dynamic: report_step = self._report_step.text() if self._export_keyword_model.isGenParamKw(key): return report_step if self._export_keyword_model.isGenDataKw(key): lst = self._gen_data_report_step_model idx = self._gen_data_report_step.currentIndex() if lst and len(lst) > idx: report_step = lst[idx] else: raise IndexError('No such model step: %d. Valid range: [0, %d)' % (idx, len(lst))) return report_step def keywordSelected(self): key = self._kw_model[self._keywords.currentIndex()] self.updateFileExportType(key) self._dynamic = False if self._export_keyword_model.isFieldKw(key): self._dynamic = self._export_keyword_model.isDynamicField(key) self._report_step.setVisible(self._dynamic) self.layout().labelForField(self._report_step).setVisible(self._dynamic) self._gen_data_report_step.setVisible(self._export_keyword_model.isGenDataKw(key)) self.layout().labelForField(self._gen_data_report_step).setVisible(self._export_keyword_model.isGenDataKw(key)) if self._export_keyword_model.isGenDataKw(key): data = self._export_keyword_model.getGenDataReportSteps(key) self._gen_data_report_step_model = data self._gen_data_report_step.clear() self._gen_data_report_step.addItems(self._gen_data_report_step_model) def setSelectedCase(self, selected_case): self._case_combo.setCurrentIndex(self._case_model.indexOf(selected_case)) def validateExportDialog(self): validRealizations = False if self._active_realizations_field.isValid(): validRealizations = True path = str(self._file_name.text()) validPath = len(path) > 0 if validRealizations and validPath: self.updateExportButton.emit("export", True) else: self.updateExportButton.emit("export", False)
def __init__(self): self.__export_keyword_model = ExportKeywordModel()