Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(393)

Unified Diff: tools/telemetry/telemetry/user_story/user_story_filter.py

Issue 994683003: Rename page filter options to story options. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename filter options in benchmarks. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/user_story/user_story_filter.py
diff --git a/tools/telemetry/telemetry/user_story/user_story_filter.py b/tools/telemetry/telemetry/user_story/user_story_filter.py
index 1c28beb7b5ea9b7970ecef93289f4e7459b5d4ab..fce696b6f08cea13ff22823763e50fcbfb00d1d7 100644
--- a/tools/telemetry/telemetry/user_story/user_story_filter.py
+++ b/tools/telemetry/telemetry/user_story/user_story_filter.py
@@ -8,73 +8,76 @@ import re
from telemetry.core import command_line
-def HasLabelIn(user_story, labels):
- return bool(user_story.labels.intersection(labels))
+class _StoryMatcher(object):
+ def __init__(self, pattern):
+ self._regex = None
+ self.has_compile_error = False
+ if pattern:
+ try:
+ self._regex = re.compile(pattern)
+ except re.error:
+ self.has_compile_error = True
+
+ def __nonzero__(self):
+ return self._regex is not None
+
+ def HasMatch(self, user_story):
+ return self and bool(
+ self._regex.search(user_story.display_name) or
+ (user_story.name and self._regex.search(user_story.name)))
+
+
+class _StoryLabelMatcher(object):
+ def __init__(self, labels_str):
+ self._labels = labels_str.split(',') if labels_str else None
+
+ def __nonzero__(self):
+ return self._labels is not None
+
+ def HasLabelIn(self, user_story):
+ return self and bool(user_story.labels.intersection(self._labels))
class UserStoryFilter(command_line.ArgumentHandlerMixIn):
- """Filters pages in the page set based on command-line flags."""
+ """Filters user stories in the user story set based on command-line flags."""
@classmethod
def AddCommandLineArgs(cls, parser):
- group = optparse.OptionGroup(parser, 'Page filtering options')
- group.add_option('--page-filter',
- help='Use only pages whose URLs match the given filter regexp.')
- group.add_option('--page-filter-exclude',
- help='Exclude pages whose URLs match the given filter regexp.')
- group.add_option('--page-label-filter',
- help='Use only pages that have any of these labels')
- group.add_option('--page-label-filter-exclude',
- help='Exclude pages that have any of these labels')
-
+ group = optparse.OptionGroup(parser, 'User story filtering options')
+ group.add_option('--story-filter',
+ help='Use only user stories whose names match the given filter regexp.')
+ group.add_option('--page-filter', dest='story_filter',
+ help='Deprecated. Use --story-filter instead.')
+ group.add_option('--story-filter-exclude',
+ help='Exclude user stories whose names match the given filter regexp.')
+ group.add_option('--story-label-filter',
+ help='Use only user stories that have any of these labels')
+ group.add_option('--story-label-filter-exclude',
+ help='Exclude user stories that have any of these labels')
parser.add_option_group(group)
@classmethod
def ProcessCommandLineArgs(cls, parser, args):
- cls._page_regex = None
- cls._page_exclude_regex = None
- cls._include_labels = None
- cls._exclude_labels = None
-
- if args.page_filter:
- try:
- cls._page_regex = re.compile(args.page_filter)
- except re.error:
- raise parser.error('--page-filter: invalid regex')
-
- if args.page_filter_exclude:
- try:
- cls._page_exclude_regex = re.compile(args.page_filter_exclude)
- except re.error:
- raise parser.error('--page-filter-exclude: invalid regex')
+ cls._include_regex = _StoryMatcher(args.story_filter)
+ cls._exclude_regex = _StoryMatcher(args.story_filter_exclude)
+ cls._include_labels = _StoryLabelMatcher(args.story_label_filter)
+ cls._exclude_labels = _StoryLabelMatcher(args.story_label_filter_exclude)
- if args.page_label_filter:
- cls._include_labels = args.page_label_filter.split(',')
-
- if args.page_label_filter_exclude:
- cls._exclude_labels = args.page_label_filter_exclude.split(',')
+ if cls._include_regex.has_compile_error:
+ raise parser.error('--story-filter: Invalid regex.')
+ if cls._exclude_regex.has_compile_error:
+ raise parser.error('--story-filter-exclude: Invalid regex.')
@classmethod
def IsSelected(cls, user_story):
# Exclude filters take priority.
- if cls._exclude_labels and HasLabelIn(user_story, cls._exclude_labels):
+ if cls._exclude_labels.HasLabelIn(user_story):
+ return False
+ if cls._exclude_regex.HasMatch(user_story):
+ return False
+
+ if cls._include_labels and not cls._include_labels.HasLabelIn(user_story):
+ return False
+ if cls._include_regex and not cls._include_regex.HasMatch(user_story):
return False
- if cls._page_exclude_regex:
- matches_display_name = cls._page_exclude_regex.search(
- user_story.display_name)
- matches_name = user_story.name and cls._page_exclude_regex.search(
- user_story.name)
- if matches_display_name or matches_name:
- return False
-
- # Apply all filters.
- filter_result = True
- if cls._include_labels:
- filter_result = filter_result and HasLabelIn(
- user_story, cls._include_labels)
- if cls._page_regex:
- matches_display_name = cls._page_regex.search(user_story.display_name)
- matches_name = user_story.name and cls._page_regex.search(user_story.name)
- filter_result = filter_result and (matches_display_name or matches_name)
-
- return filter_result
+ return True
« no previous file with comments | « tools/perf/benchmarks/thread_times.py ('k') | tools/telemetry/telemetry/user_story/user_story_filter_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698