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 |