示例#1
0
    def readEncoding(self, encoding_dict):

        # Create a encoding from parameters
        encoding = Encoding()
        encoding.data_source_field_name = encoding_dict['data_source_field_name']
        encoding.data_source_field_data_type = encoding_dict['data_source_field_data_type']
        encoding.enable_inference = encoding_dict['enable_inference']
        encoding.encoder_module = encoding_dict['encoder_module']
        encoding.encoder_class = encoding_dict['encoder_class']
        encoding.encoder_params = encoding_dict['encoder_params']
        encoding.encoder_field_name = encoding_dict['encoder_field_name']
        encoding.encoder_field_data_type = encoding_dict['encoder_field_data_type']

        return encoding
    def buttonOk_click(self, event):
        """
        Check if values changed and save the,.
        """

        encoder_params = collections.OrderedDict()
        if self.text_box_data_source_field_name.text() == '':
            QtWidgets.QMessageBox.warning(
                self, "Warning", "Record field name was not specified.")
            return
        elif self.text_box_encoder_module.text() == '':
            QtWidgets.QMessageBox.warning(self, "Warning",
                                          "Encoder module was not specified.")
            return
        elif self.text_box_encoder_class.text() == '':
            QtWidgets.QMessageBox.warning(self, "Warning",
                                          "Encoder class was not specified.")
            return
        elif self.text_box_encoder_field_name.text() == '':
            QtWidgets.QMessageBox.warning(
                self, "Warning", "Encoder field name was not specified.")
            return
        elif self.duplicatedFieldName(self.text_box_encoder_field_name.text()):
            QtWidgets.QMessageBox.warning(
                self, "Warning",
                "Encoder field name already is used by other encoding.")
            return
        else:
            grid_data = self.data_grid_encoder_params.model().data
            for row in range(len(grid_data)):
                if grid_data[row][0] != '':
                    # Valid parameter name
                    try:
                        grid_data[row][0] = grid_data[row][0].toString()
                    except:
                        pass
                    param = str(grid_data[row][0])
                    valid_expr = QtCore.QRegExp('[a-zA-Z0-9_]+')
                    if not valid_expr.exactMatch(param):
                        QtWidgets.QMessageBox.warning(
                            self, "Warning",
                            "'" + param + "' is not a valid name.")
                        return

                    # Valid parameter value
                    try:
                        grid_data[row][1] = grid_data[row][1].toString()
                    except:
                        pass
                    value = str(grid_data[row][1])
                    if len(value) == 0:
                        QtWidgets.QMessageBox.warning(
                            self, "Warning", "'" + param + "' value is empty.")
                        return

                    # Add param name and its value to dictionary
                    encoder_params[param] = value

        data_source_field_name = str(
            self.text_box_data_source_field_name.text())
        data_source_field_data_type = str(
            self.combo_box_data_source_field_data_type.currentText())
        enable_inference = self.check_box_enable_inference.isChecked()
        encoder_module = str(self.text_box_encoder_module.text())
        encoder_class = str(self.text_box_encoder_class.text())
        encoder_field_name = str(self.text_box_encoder_field_name.text())
        encoder_field_data_type = str(
            self.combo_box_encoder_field_data_type.currentText())

        # If this is a new encoding get it from list else create a new one
        if self.encoding_idx >= 0:
            encoding = self.encodings[self.encoding_idx]
        else:
            encoding = Encoding()
            self.encodings.append(encoding)

        # If anything has changed
        if encoding.data_source_field_name != data_source_field_name or encoding.data_source_field_data_type != data_source_field_data_type or encoding.enable_inference != enable_inference or encoding.encoder_module != encoder_module or encoding.encoder_class != encoder_class or encoding.encoder_params != encoder_params or encoding.encoder_field_name != encoder_field_name or encoding.encoder_field_data_type != encoder_field_data_type:

            # Set encoding params with controls values
            encoding.data_source_field_name = data_source_field_name
            encoding.data_source_field_data_type = data_source_field_data_type
            encoding.enable_inference = enable_inference
            encoding.encoder_module = encoder_module
            encoding.encoder_class = encoder_class
            encoding.encoder_params = encoder_params
            encoding.encoder_field_name = encoder_field_name
            encoding.encoder_field_data_type = encoder_field_data_type

            self.accept()

        self.close()