| 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
|
|
|
|
|
|
|