From 5187d5dc0239b15b190127aca8428759b78536ca Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Sat, 18 Apr 2020 18:33:09 +0100 Subject: [PATCH] Improve performance of rules templates by not calling the "and" function if there is only one condition. --- src/calibre/library/coloring.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/calibre/library/coloring.py b/src/calibre/library/coloring.py index bd3b21f8b7..30240df8e6 100644 --- a/src/calibre/library/coloring.py +++ b/src/calibre/library/coloring.py @@ -62,14 +62,22 @@ class Rule(object): # {{{ return None conditions = [x for x in map(self.apply_condition, self.conditions) if x is not None] conditions = (',\n' + ' '*9).join(conditions) - return dedent('''\ - program: - {sig} - test(and( - {conditions} - ), '{color}', ''); - ''').format(sig=self.signature, conditions=conditions, - color=self.color) + if len(self.conditions) > 1: + return dedent('''\ + program: + {sig} + test(and( + {conditions} + ), '{color}', ''); + ''').format(sig=self.signature, conditions=conditions, + color=self.color) + else: + return dedent('''\ + program: + {sig} + test({conditions}, '{color}', ''); + ''').format(sig=self.signature, conditions=conditions, + color=self.color) def apply_condition(self, condition): col, action, val = condition