code: def parse_rules(self):
          
          # Load patterns: an app is removed when has no defined patterns.
          try:
              rule_options = self.config.items('rules')
          except configparser.NoSectionError:
              raise LogRaptorConfigError("the app %r has no defined rules!" % self.name)
  
          rules = []
          for option, value in rule_options:
              pattern = value.replace('\n', '')  # Strip newlines for multi-line declarations
              if not self.args.filters:
                  # No filters case: substitute the filter fields with the corresponding patterns.
                  pattern = string.Template(pattern).safe_substitute(self.fields)
                  rules.append(AppRule(option, pattern, self.args))
                  continue
  
              for filter_group in self.args.filters:
                  _pattern, filter_keys = exact_sub(pattern, filter_group)
                  _pattern = string.Template(_pattern).safe_substitute(self.fields)
                  if len(filter_keys) >= len(filter_group):
                      rules.append(AppRule(option, _pattern, self.args, filter_keys))
                  elif self._thread:
                      rules.append(AppRule(option, _pattern, self.args))
          return rules
docs: Add a set of rules to the app, dividing between filter and other rule set