diff --git a/src/calibre/gui2/catalog/catalog_epub_mobi.py b/src/calibre/gui2/catalog/catalog_epub_mobi.py index 7f76406718..54e8bf5db9 100644 --- a/src/calibre/gui2/catalog/catalog_epub_mobi.py +++ b/src/calibre/gui2/catalog/catalog_epub_mobi.py @@ -112,131 +112,6 @@ class PluginWidget(QWidget,Ui_Form): 'datatype':field_md['datatype']} self.eligible_custom_fields = custom_fields - def generatePrefixList(self): - def prefix_sorter(item): - key = item - if item[0] == "_": - key = 'zzz' + item - return key - - - # Create a list of prefixes for user selection - raw_prefix_list = [ - ('Ampersand',u'&'), - ('Angle left double',u'\u00ab'), - ('Angle left',u'\u2039'), - ('Angle right double',u'\u00bb'), - ('Angle right',u'\u203a'), - ('Arrow double',u'\u2194'), - ('Arrow down',u'\u2193'), - ('Arrow left',u'\u2190'), - ('Arrow right',u'\u2192'), - ('Arrow up',u'\u2191'), - ('Asterisk',u'*'), - ('At sign',u'@'), - ('Bullet smallest',u'\u22c5'), - ('Bullet small',u'\u00b7'), - ('Bullet',u'\u2022'), - ('Caret',u'^'), - ('Checkmark',u'\u2713'), - ('Copyright',u'\u00a9'), - ('Currency dollar',u'$'), - ('Currency euro',u'\u20ac'), - ('Dagger double',u'\u2021'), - ('Dagger',u'\u2020'), - ('Degree',u'\u00b0'), - ('Dots3',u'\u2234'), - ('Hash',u'#'), - ('Infinity',u'\u221e'), - ('Lozenge',u'\u25ca'), - ('Math divide',u'\u00f7'), - ('Math empty',u'\u2205'), - ('Math equals',u'='), - ('Math minus',u'\u2212'), - ('Math plus circled',u'\u2295'), - ('Math times circled',u'\u2297'), - ('Math times',u'\u00d7'), - ('O slash',u'\u00d8'), - ('Paragraph',u'\u00b6'), - ('Percent',u'%'), - ('Plus-or-minus',u'\u00b1'), - ('Plus',u'+'), - ('Punctuation colon',u':'), - ('Punctuation colon-semi',u';'), - ('Punctuation exclamation',u'!'), - ('Punctuation question',u'?'), - ('Registered trademark',u'\u00ae'), - ('Section',u'\u00a7'), - ('Tilde',u'~'), - ('Vertical bar',u'|'), - ('Vertical bar broken',u'\u00a6'), - ('_0',u'0'), - ('_1',u'1'), - ('_2',u'2'), - ('_3',u'3'), - ('_4',u'4'), - ('_5',u'5'), - ('_6',u'6'), - ('_7',u'7'), - ('_8',u'8'), - ('_9',u'9'), - ('_A',u'A'), - ('_B',u'B'), - ('_C',u'C'), - ('_D',u'D'), - ('_E',u'E'), - ('_F',u'F'), - ('_G',u'G'), - ('_H',u'H'), - ('_I',u'I'), - ('_J',u'J'), - ('_K',u'K'), - ('_L',u'L'), - ('_M',u'M'), - ('_N',u'N'), - ('_O',u'O'), - ('_P',u'P'), - ('_Q',u'Q'), - ('_R',u'R'), - ('_S',u'S'), - ('_T',u'T'), - ('_U',u'U'), - ('_V',u'V'), - ('_W',u'W'), - ('_X',u'X'), - ('_Y',u'Y'), - ('_Z',u'Z'), - ('_a',u'a'), - ('_b',u'b'), - ('_c',u'c'), - ('_d',u'd'), - ('_e',u'e'), - ('_f',u'f'), - ('_g',u'g'), - ('_h',u'h'), - ('_i',u'i'), - ('_j',u'j'), - ('_k',u'k'), - ('_l',u'l'), - ('_m',u'm'), - ('_n',u'n'), - ('_o',u'o'), - ('_p',u'p'), - ('_q',u'q'), - ('_r',u'r'), - ('_s',u's'), - ('_t',u't'), - ('_u',u'u'), - ('_v',u'v'), - ('_w',u'w'), - ('_x',u'x'), - ('_y',u'y'), - ('_z',u'z'), - ] - #raw_prefix_list = sorted(raw_prefix_list, key=lambda k: sort_key(k[0])) - raw_prefix_list = sorted(raw_prefix_list, key=prefix_sorter) - self.prefixes = [x[1] for x in raw_prefix_list] - def initialize(self, name, db): ''' @@ -259,7 +134,6 @@ class PluginWidget(QWidget,Ui_Form): self.name = name self.db = db self.fetchEligibleCustomFields() - self.generatePrefixList() self.populate_combo_boxes() @@ -315,41 +189,8 @@ class PluginWidget(QWidget,Ui_Form): # Hook changes to Description section self.generate_descriptions.stateChanged.connect(self.generate_descriptions_changed) - # Neaten up the prefix rules - self.prefix_rules_initialize() - self.populate_prefix_rules(prefix_rules) - self.prefix_rules_tw.resizeColumnsToContents() - self.prefix_rules_resize_name(1.5) - self.prefix_rules_tw.horizontalHeader().setStretchLastSection(True) - - def prefix_rules_initialize(self): - # Assign icons to buttons, hook clicks - self.move_rule_up_tb.setToolTip('Move rule up') - self.move_rule_up_tb.setIcon(QIcon(I('arrow-up.png'))) - self.move_rule_up_tb.clicked.connect(self.prefix_rules_move_row_up) - - self.add_rule_tb.setToolTip('Add a new rule') - self.add_rule_tb.setIcon(QIcon(I('plus.png'))) - self.add_rule_tb.clicked.connect(self.prefix_rules_add_row) - - self.delete_rule_tb.setToolTip('Delete selected rule') - self.delete_rule_tb.setIcon(QIcon(I('list_remove.png'))) - self.delete_rule_tb.clicked.connect(self.prefix_rules_delete_row) - - self.move_rule_down_tb.setToolTip('Move rule down') - self.move_rule_down_tb.setIcon(QIcon(I('arrow-down.png'))) - self.move_rule_down_tb.clicked.connect(self.prefix_rules_move_row_down) - - # Configure the QTableWidget - # enabled/rule name/source field/pattern/prefix - self.prefix_rules_tw.clear() - header_labels = ['','Name','Prefix','Source','Pattern'] - self.prefix_rules_tw.setColumnCount(len(header_labels)) - self.prefix_rules_tw.setHorizontalHeaderLabels(header_labels) - self.prefix_rules_tw.setSortingEnabled(False) - self.prefix_rules_tw.setSelectionBehavior(QAbstractItemView.SelectRows) - - self.prefix_rules_tw.cellDoubleClicked.connect(self.prefix_rules_cell_double_clicked) + # Initialize prefix rules + self.prefix_rules_initialize(prefix_rules) def options(self): # Save/return the current options @@ -505,75 +346,18 @@ class PluginWidget(QWidget,Ui_Form): self.merge_after.setEnabled(False) self.include_hr.setEnabled(False) - def populate_prefix_rules(self,rules): - # Format of rules list is different if default values vs retrieved JSON - # Hack to normalize list style - if type(rules[0]) is list: - rules = rules[0] - self.prefix_rules_tw.setFocus() - for row, rule in enumerate(rules): - self.prefix_rules_tw.insertRow(row) - self.prefix_rules_select_and_scroll_to_row(row) - self.populate_prefix_rules_table_row(row, rule) - self.prefix_rules_tw.selectRow(0) - - def populate_prefix_rules_table_row(self, row, data): - - def set_prefix_field_in_row(row, col, field=''): - prefix_combo = PrefixRulesComboBox(self, self.prefixes, field) - self.prefix_rules_tw.setCellWidget(row, col, prefix_combo) - - def set_rule_name_in_row(row, col, name=''): - rule_name = QLineEdit(name) - rule_name.home(False) - rule_name.editingFinished.connect(self.prefix_rules_rule_name_edited) - self.prefix_rules_tw.setCellWidget(row, col, rule_name) - - def set_source_field_in_row(row, col, field=''): - source_combo = PrefixRulesComboBox(self, sorted(self.eligible_custom_fields.keys(), key=sort_key), field) - source_combo.currentIndexChanged.connect(partial(self.prefix_rules_source_index_changed, source_combo, row)) - #source_combo.currentIndexChanged.connect(self.prefix_rules_source_index_changed, source_combo, row) - self.prefix_rules_tw.setCellWidget(row, col, source_combo) - return source_combo - - - # Entry point - self.prefix_rules_tw.blockSignals(True) - #print("populate_prefix_rules_table_row processing rule:\n%s\n" % data) - - # Column 0: Enabled - self.prefix_rules_tw.setItem(row, 0, CheckableTableWidgetItem(data['enabled'])) - - # Column 1: Rule name - #rule_name = QTableWidgetItem(data['name']) - #self.prefix_rules_tw.setItem(row, 1, rule_name) - set_rule_name_in_row(row, 1, name=data['name']) - - # Column 2: Prefix - set_prefix_field_in_row(row, 2, field=data['prefix']) - - # Column 3: Source field - source_combo = set_source_field_in_row(row, 3, field=data['field']) - - # Column 4: Pattern - # The contents of the Pattern field is driven by the Source field - self.prefix_rules_source_index_changed(source_combo, row, 4, pattern=data['pattern']) - - self.prefix_rules_tw.blockSignals(False) def prefix_rules_add_row(self): # Called when '+' clicked self.prefix_rules_tw.setFocus() row = self.prefix_rules_tw.currentRow() + 1 self.prefix_rules_tw.insertRow(row) - self.populate_prefix_rules_table_row(row, self.prefix_rules_create_blank_row_data()) + self.prefix_rules_populate_table_row(row, self.prefix_rules_create_blank_row_data()) self.prefix_rules_select_and_scroll_to_row(row) self.prefix_rules_tw.resizeColumnsToContents() + # Just in case table was empty self.prefix_rules_tw.horizontalHeader().setStretchLastSection(True) - def prefix_rules_cell_double_clicked(self, row, col): - print("prefix_rules_cell_double_clicked: row:%d col:%d" % (row, col)) - def prefix_rules_convert_row_to_data(self, row): data = self.prefix_rules_create_blank_row_data() data['ordinal'] = row @@ -612,6 +396,142 @@ class PluginWidget(QWidget,Ui_Form): elif self.prefix_rules_tw.rowCount() > 0: self.prefix_rules_select_and_scroll_to_row(first_sel_row - 1) + def prefix_rules_generate_prefix_list(self): + def prefix_sorter(item): + key = item + if item[0] == "_": + key = 'zzz' + item + return key + + + # Create a list of prefixes for user selection + raw_prefix_list = [ + ('Ampersand',u'&'), + ('Angle left double',u'\u00ab'), + ('Angle left',u'\u2039'), + ('Angle right double',u'\u00bb'), + ('Angle right',u'\u203a'), + ('Arrow carriage return',u'\u21b5'), + ('Arrow double',u'\u2194'), + ('Arrow down',u'\u2193'), + ('Arrow left',u'\u2190'), + ('Arrow right',u'\u2192'), + ('Arrow up',u'\u2191'), + ('Asterisk',u'*'), + ('At sign',u'@'), + ('Bullet smallest',u'\u22c5'), + ('Bullet small',u'\u00b7'), + ('Bullet',u'\u2022'), + ('Cards clubs',u'\u2663'), + ('Cards diamonds',u'\u2666'), + ('Cards hearts',u'\u2665'), + ('Cards spades',u'\u2660'), + ('Caret',u'^'), + ('Checkmark',u'\u2713'), + ('Copyright circle c',u'\u00a9'), + ('Copyright circle r',u'\u00ae'), + ('Copyright trademark',u'\u2122'), + ('Currency cent',u'\u00a2'), + ('Currency dollar',u'$'), + ('Currency euro',u'\u20ac'), + ('Currency pound',u'\u00a3'), + ('Currency yen',u'\u00a5'), + ('Dagger double',u'\u2021'), + ('Dagger',u'\u2020'), + ('Degree',u'\u00b0'), + ('Dots3',u'\u2234'), + ('Hash',u'#'), + ('Infinity',u'\u221e'), + ('Lozenge',u'\u25ca'), + ('Math divide',u'\u00f7'), + ('Math empty',u'\u2205'), + ('Math equals',u'='), + ('Math minus',u'\u2212'), + ('Math plus circled',u'\u2295'), + ('Math times circled',u'\u2297'), + ('Math times',u'\u00d7'), + ('O slash',u'\u00d8'), + ('Paragraph',u'\u00b6'), + ('Percent',u'%'), + ('Plus-or-minus',u'\u00b1'), + ('Plus',u'+'), + ('Punctuation colon',u':'), + ('Punctuation colon-semi',u';'), + ('Punctuation exclamation',u'!'), + ('Punctuation question',u'?'), + ('Punctuation period',u'.'), + ('Punctuation slash back',u'\\'), + ('Punctuation slash forward',u'/'), + ('Section',u'\u00a7'), + ('Tilde',u'~'), + ('Vertical bar',u'|'), + ('Vertical bar broken',u'\u00a6'), + ('_0',u'0'), + ('_1',u'1'), + ('_2',u'2'), + ('_3',u'3'), + ('_4',u'4'), + ('_5',u'5'), + ('_6',u'6'), + ('_7',u'7'), + ('_8',u'8'), + ('_9',u'9'), + ('_A',u'A'), + ('_B',u'B'), + ('_C',u'C'), + ('_D',u'D'), + ('_E',u'E'), + ('_F',u'F'), + ('_G',u'G'), + ('_H',u'H'), + ('_I',u'I'), + ('_J',u'J'), + ('_K',u'K'), + ('_L',u'L'), + ('_M',u'M'), + ('_N',u'N'), + ('_O',u'O'), + ('_P',u'P'), + ('_Q',u'Q'), + ('_R',u'R'), + ('_S',u'S'), + ('_T',u'T'), + ('_U',u'U'), + ('_V',u'V'), + ('_W',u'W'), + ('_X',u'X'), + ('_Y',u'Y'), + ('_Z',u'Z'), + ('_a',u'a'), + ('_b',u'b'), + ('_c',u'c'), + ('_d',u'd'), + ('_e',u'e'), + ('_f',u'f'), + ('_g',u'g'), + ('_h',u'h'), + ('_i',u'i'), + ('_j',u'j'), + ('_k',u'k'), + ('_l',u'l'), + ('_m',u'm'), + ('_n',u'n'), + ('_o',u'o'), + ('_p',u'p'), + ('_q',u'q'), + ('_r',u'r'), + ('_s',u's'), + ('_t',u't'), + ('_u',u'u'), + ('_v',u'v'), + ('_w',u'w'), + ('_x',u'x'), + ('_y',u'y'), + ('_z',u'z'), + ] + raw_prefix_list = sorted(raw_prefix_list, key=prefix_sorter) + self.prefixes = [x[1] for x in raw_prefix_list] + def prefix_rules_get_data(self): data_items = [] for row in range(self.prefix_rules_tw.rowCount()): @@ -625,6 +545,42 @@ class PluginWidget(QWidget,Ui_Form): 'prefix':data['prefix']}) return data_items + def prefix_rules_initialize(self, prefix_rules): + # Assign icons to buttons, hook clicks + self.move_rule_up_tb.setToolTip('Move rule up') + self.move_rule_up_tb.setIcon(QIcon(I('arrow-up.png'))) + self.move_rule_up_tb.clicked.connect(self.prefix_rules_move_row_up) + + self.add_rule_tb.setToolTip('Add a new rule') + self.add_rule_tb.setIcon(QIcon(I('plus.png'))) + self.add_rule_tb.clicked.connect(self.prefix_rules_add_row) + + self.delete_rule_tb.setToolTip('Delete selected rule') + self.delete_rule_tb.setIcon(QIcon(I('list_remove.png'))) + self.delete_rule_tb.clicked.connect(self.prefix_rules_delete_row) + + self.move_rule_down_tb.setToolTip('Move rule down') + self.move_rule_down_tb.setIcon(QIcon(I('arrow-down.png'))) + self.move_rule_down_tb.clicked.connect(self.prefix_rules_move_row_down) + + # Configure the QTableWidget + # enabled/prefix/rule name/source field/pattern + self.prefix_rules_tw.clear() + header_labels = ['','Name','Prefix','Source','Pattern'] + self.prefix_rules_tw.setColumnCount(len(header_labels)) + self.prefix_rules_tw.setHorizontalHeaderLabels(header_labels) + self.prefix_rules_tw.setSortingEnabled(False) + self.prefix_rules_tw.setSelectionBehavior(QAbstractItemView.SelectRows) + + # Generate the prefix list + self.prefix_rules_generate_prefix_list() + + # Populate the table + self.prefix_rules_populate(prefix_rules) + self.prefix_rules_tw.resizeColumnsToContents() + self.prefix_rules_resize_name(1.5) + self.prefix_rules_tw.horizontalHeader().setStretchLastSection(True) + def prefix_rules_move_row_down(self): self.prefix_rules_tw.setFocus() rows = self.prefix_rules_tw.selectionModel().selectedRows() @@ -649,7 +605,7 @@ class PluginWidget(QWidget,Ui_Form): self.prefix_rules_tw.insertRow(src_row) # Populate it with the saved data - self.populate_prefix_rules_table_row(src_row, saved_data) + self.prefix_rules_populate_table_row(src_row, saved_data) self.blockSignals(False) scroll_to_row = last_sel_row + 1 if scroll_to_row < self.prefix_rules_tw.rowCount() - 1: @@ -671,7 +627,7 @@ class PluginWidget(QWidget,Ui_Form): # Add a row below us with the source data self.prefix_rules_tw.insertRow(selrow.row() + 1) - self.populate_prefix_rules_table_row(selrow.row() + 1, saved_data) + self.prefix_rules_populate_table_row(selrow.row() + 1, saved_data) # Delete the row above self.prefix_rules_tw.removeRow(selrow.row() - 1) @@ -682,6 +638,63 @@ class PluginWidget(QWidget,Ui_Form): scroll_to_row = scroll_to_row - 1 self.prefix_rules_tw.scrollToItem(self.prefix_rules_tw.item(scroll_to_row, 0)) + def prefix_rules_populate(self,rules): + # Format of rules list is different if default values vs retrieved JSON + # Hack to normalize list style + if type(rules[0]) is list: + rules = rules[0] + self.prefix_rules_tw.setFocus() + rules = sorted(rules, key=lambda k: k['ordinal']) + for row, rule in enumerate(rules): + self.prefix_rules_tw.insertRow(row) + self.prefix_rules_select_and_scroll_to_row(row) + self.prefix_rules_populate_table_row(row, rule) + self.prefix_rules_tw.selectRow(0) + + def prefix_rules_populate_table_row(self, row, data): + + def set_prefix_field_in_row(row, col, field=''): + prefix_combo = PrefixRulesComboBox(self, self.prefixes, field) + self.prefix_rules_tw.setCellWidget(row, col, prefix_combo) + + def set_rule_name_in_row(row, col, name=''): + rule_name = QLineEdit(name) + rule_name.home(False) + rule_name.editingFinished.connect(self.prefix_rules_rule_name_edited) + self.prefix_rules_tw.setCellWidget(row, col, rule_name) + + def set_source_field_in_row(row, col, field=''): + source_combo = PrefixRulesComboBox(self, sorted(self.eligible_custom_fields.keys(), key=sort_key), field) + source_combo.currentIndexChanged.connect(partial(self.prefix_rules_source_index_changed, source_combo, row)) + #source_combo.currentIndexChanged.connect(self.prefix_rules_source_index_changed, source_combo, row) + self.prefix_rules_tw.setCellWidget(row, col, source_combo) + return source_combo + + + # Entry point + self.prefix_rules_tw.blockSignals(True) + #print("prefix_rules_populate_table_row processing rule:\n%s\n" % data) + + # Column 0: Enabled + self.prefix_rules_tw.setItem(row, 0, CheckableTableWidgetItem(data['enabled'])) + + # Column 1: Rule name + #rule_name = QTableWidgetItem(data['name']) + #self.prefix_rules_tw.setItem(row, 1, rule_name) + set_rule_name_in_row(row, 1, name=data['name']) + + # Column 2: Prefix + set_prefix_field_in_row(row, 2, field=data['prefix']) + + # Column 3: Source field + source_combo = set_source_field_in_row(row, 3, field=data['field']) + + # Column 4: Pattern + # The contents of the Pattern field is driven by the Source field + self.prefix_rules_source_index_changed(source_combo, row, 4, pattern=data['pattern']) + + self.prefix_rules_tw.blockSignals(False) + def prefix_rules_resize_name(self, scale): current_width = self.prefix_rules_tw.columnWidth(1) self.prefix_rules_tw.setColumnWidth(1, min(225,int(current_width * scale))) @@ -719,6 +732,7 @@ class PluginWidget(QWidget,Ui_Form): values_combo = PrefixRulesComboBox(self, values, pattern) self.prefix_rules_tw.setCellWidget(row, 4, values_combo) + def read_source_field_changed(self,new_index): ''' Process changes in the read_source_field combo box @@ -873,5 +887,3 @@ class PrefixRulesComboBox(NoWheelComboBox): self.setCurrentIndex(idx) else: self.setCurrentIndex(0) - - diff --git a/src/calibre/gui2/catalog/catalog_epub_mobi.ui b/src/calibre/gui2/catalog/catalog_epub_mobi.ui index 31c5063a12..eb39415a81 100644 --- a/src/calibre/gui2/catalog/catalog_epub_mobi.ui +++ b/src/calibre/gui2/catalog/catalog_epub_mobi.ui @@ -107,10 +107,11 @@ - <p>Default pattern -\[.+\] -excludes tags of the form [tag], -e.g., [Project Gutenberg]</p> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Project Gutenberg], and '+', the default tag for a read book.</p></body></html> Excluded genres @@ -333,6 +334,9 @@ Default: ~,Catalog 0 + + The first matching rule will be used to add a prefix to book listings in the generated catalog. + Prefix rules diff --git a/src/calibre/library/catalogs/epub_mobi_builder.py b/src/calibre/library/catalogs/epub_mobi_builder.py index edb9567d93..6cc94c0e08 100644 --- a/src/calibre/library/catalogs/epub_mobi_builder.py +++ b/src/calibre/library/catalogs/epub_mobi_builder.py @@ -3117,32 +3117,24 @@ Author '{0}': def discoverPrefix(self, record): ''' - Given a field:pattern spec, discover if this book marked as read - - if field == tag, scan tags for pattern - if custom field, try regex match for pattern - This allows maximum flexibility with fields of type - datatype bool: #field_name:True - datatype text: #field_name: - datatype datetime: #field_name:.* - + Evaluate conditions for including prefixes in various listings ''' - if self.opts.verbose: - self.opts.log.info("\tevaluating %s (%s)" % (record['title'], record['authors'])) + def log_prefix_rule_match_info(rule, record): + self.opts.log.info(" %s %s by %s (Prefix rule '%s': %s:%s)" % + (rule['prefix'],record['title'], + record['authors'][0], rule['name'], + rule['field'],rule['pattern'])) + # Compare the record to each rule looking for a match for rule in self.prefixRules: - if self.opts.verbose: - self.opts.log.info("\t prefix_rule '%s': %s" % (rule['name'], rule)) - # Literal comparison for Tags field if rule['field'].lower() == 'tags': if rule['pattern'].lower() in map(unicode.lower,record['tags']): if self.opts.verbose: - self.opts.log.info("\t '%s' found in '%s' (%s)" % - (rule['pattern'], rule['field'], rule['name'])) + log_prefix_rule_match_info(rule, record) return rule['prefix'] - # Regex comparison for custom field + # Regex match for custom field elif rule['field'].startswith('#'): field_contents = self.__db.get_field(record['id'], rule['field'], @@ -3150,30 +3142,23 @@ Author '{0}': if field_contents == '': field_contents = None - if self.opts.verbose: - self.opts.log.info("\t field_contents: %s" % repr(field_contents)) - if field_contents is not None: try: if re.search(rule['pattern'], unicode(field_contents), re.IGNORECASE) is not None: if self.opts.verbose: - self.opts.log.info("\t '%s' matches '%s' value (%s)" % - (rule['pattern'], rule['field'], rule['name'])) + log_prefix_rule_match_info(rule, record) return rule['prefix'] except: # Compiling of pat failed, ignore it if self.opts.verbose: - self.opts.log.info("pattern failed to compile: %s" % rule['pattern']) + self.opts.log.error("pattern failed to compile: %s" % rule['pattern']) pass elif field_contents is None and rule['pattern'] == 'None': if self.opts.verbose: - self.opts.log.info("\t '%s' found in '%s' (%s)" % - (rule['pattern'], rule['field'], rule['name'])) + log_prefix_rule_match_info(rule, record) return rule['prefix'] - if False and self.opts.verbose: - self.opts.log.info("\t No prefix match found") return None def filterDbTags(self, tags):