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

Unified Diff: tools/telemetry/telemetry/core/discover.py

Issue 1244223002: Create classes_util API, change discover to return a list instead of a dict. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 4 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
« no previous file with comments | « tools/telemetry/telemetry/benchmark_runner.py ('k') | tools/telemetry/telemetry/core/discover_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/discover.py
diff --git a/tools/telemetry/telemetry/core/discover.py b/tools/telemetry/telemetry/core/discover.py
index 546aa6372327899f6fa4e8535dba88010d4eeaef..53393200acea97da5606898005e0efd6d93d5f35 100644
--- a/tools/telemetry/telemetry/core/discover.py
+++ b/tools/telemetry/telemetry/core/discover.py
@@ -7,12 +7,9 @@ import inspect
import os
import re
-from telemetry import decorators
-from telemetry.internal.util import camel_case
from telemetry.internal.util import classes as classes_module
-@decorators.Cache
def DiscoverModules(start_dir, top_level_dir, pattern='*'):
"""Discover all modules in |start_dir| which match |pattern|.
@@ -49,12 +46,8 @@ def DiscoverModules(start_dir, top_level_dir, pattern='*'):
modules.append(module)
return modules
-
-# TODO(dtu): Normalize all discoverable classes to have corresponding module
-# and class names, then always index by class name.
-@decorators.Cache
def DiscoverClasses(start_dir, top_level_dir, base_class, pattern='*',
- index_by_class_name=True, directly_constructable=False):
+ one_class_per_module=False, directly_constructable=False):
"""Discover all classes in |start_dir| which subclass |base_class|.
Base classes that contain subclasses are ignored by default.
@@ -64,24 +57,21 @@ def DiscoverClasses(start_dir, top_level_dir, base_class, pattern='*',
top_level_dir: The top level of the package, for importing.
base_class: The base class to search for.
pattern: Unix shell-style pattern for filtering the filenames to import.
- index_by_class_name: If True, use class name converted to
- lowercase_with_underscores instead of module name in return dict keys.
+ one_class_per_module: If True, will only include the first class found in
+ each module.
directly_constructable: If True, will only return classes that can be
constructed without arguments
- Returns:
- dict of {module_name: class} or {underscored_class_name: class}
+ Returns: A list of classes.
"""
modules = DiscoverModules(start_dir, top_level_dir, pattern)
- classes = {}
+ classes = []
for module in modules:
- new_classes = DiscoverClassesInModule(
- module, base_class, index_by_class_name, directly_constructable)
- classes = dict(classes.items() + new_classes.items())
+ classes.extend(DiscoverClassesInModule(
+ module, base_class, one_class_per_module, directly_constructable))
return classes
-@decorators.Cache
-def DiscoverClassesInModule(module, base_class, index_by_class_name=False,
+def DiscoverClassesInModule(module, base_class, one_class_per_module=False,
directly_constructable=False):
"""Discover all classes in |module| which subclass |base_class|.
@@ -90,13 +80,12 @@ def DiscoverClassesInModule(module, base_class, index_by_class_name=False,
Args:
module: The module to search.
base_class: The base class to search for.
- index_by_class_name: If True, use class name converted to
- lowercase_with_underscores instead of module name in return dict keys.
+ one_class_per_module: If True, will only include the first class found in
+ each module.
- Returns:
- dict of {module_name: class} or {underscored_class_name: class}
+ Returns: A list of classes.
"""
- classes = {}
+ classes = []
for _, obj in inspect.getmembers(module):
# Ensure object is a class.
if not inspect.isclass(obj):
@@ -115,14 +104,11 @@ def DiscoverClassesInModule(module, base_class, index_by_class_name=False,
if obj.__module__ != module.__name__:
continue
- if index_by_class_name:
- key_name = camel_case.ToUnderscore(obj.__name__)
- else:
- key_name = module.__name__.split('.')[-1]
if (not directly_constructable or
classes_module.IsDirectlyConstructable(obj)):
- classes[key_name] = obj
-
+ classes.append(obj)
+ if one_class_per_module:
+ return classes
return classes
« no previous file with comments | « tools/telemetry/telemetry/benchmark_runner.py ('k') | tools/telemetry/telemetry/core/discover_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698