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

Unified Diff: tools/telemetry/telemetry/decorators.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/core/util_unittest.py ('k') | tools/telemetry/telemetry/decorators_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/decorators.py
diff --git a/tools/telemetry/telemetry/decorators.py b/tools/telemetry/telemetry/decorators.py
deleted file mode 100644
index b9e172041d0cb6041a6a1685e6409d5577fee863..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/decorators.py
+++ /dev/null
@@ -1,248 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-# pylint: disable=protected-access
-
-import datetime
-import functools
-import os
-import inspect
-import types
-import warnings
-
-
-def Cache(obj):
- """Decorator for caching read-only properties.
-
- Example usage (always returns the same Foo instance):
- @Cache
- def CreateFoo():
- return Foo()
-
- If CreateFoo() accepts parameters, a separate cached value is maintained
- for each unique parameter combination.
-
- Cached methods maintain their cache for the lifetime of the /instance/, while
- cached functions maintain their cache for the lifetime of the /module/.
- """
- @functools.wraps(obj)
- def Cacher(*args, **kwargs):
- cacher = args[0] if inspect.getargspec(obj).args[:1] == ['self'] else obj
- cacher.__cache = cacher.__cache if hasattr(cacher, '__cache') else {}
- key = str(obj) + str(args) + str(kwargs)
- if key not in cacher.__cache:
- cacher.__cache[key] = obj(*args, **kwargs)
- return cacher.__cache[key]
- return Cacher
-
-
-class Deprecated(object):
-
- def __init__(self, year, month, day, extra_guidance=''):
- self._date_of_support_removal = datetime.date(year, month, day)
- self._extra_guidance = extra_guidance
-
- def _DisplayWarningMessage(self, target):
- target_str = ''
- if isinstance(target, types.FunctionType):
- target_str = 'Function %s' % target.__name__
- else:
- target_str = 'Class %s' % target.__name__
- warnings.warn('%s is deprecated. It will no longer be supported on %s. '
- 'Please remove it or switch to an alternative before '
- 'that time. %s\n'
- % (target_str,
- self._date_of_support_removal.strftime('%B %d, %Y'),
- self._extra_guidance),
- stacklevel=self._ComputeStackLevel())
-
- def _ComputeStackLevel(self):
- this_file, _ = os.path.splitext(__file__)
- frame = inspect.currentframe()
- i = 0
- while True:
- filename = frame.f_code.co_filename
- if not filename.startswith(this_file):
- return i
- frame = frame.f_back
- i += 1
-
- def __call__(self, target):
- if isinstance(target, types.FunctionType):
- @functools.wraps(target)
- def wrapper(*args, **kwargs):
- self._DisplayWarningMessage(target)
- return target(*args, **kwargs)
- return wrapper
- elif inspect.isclass(target):
- original_ctor = target.__init__
-
- # We have to handle case original_ctor is object.__init__ separately
- # since object.__init__ does not have __module__ defined, which
- # cause functools.wraps() to raise exception.
- if original_ctor == object.__init__:
- def new_ctor(*args, **kwargs):
- self._DisplayWarningMessage(target)
- return original_ctor(*args, **kwargs)
- else:
- @functools.wraps(original_ctor)
- def new_ctor(*args, **kwargs):
- self._DisplayWarningMessage(target)
- return original_ctor(*args, **kwargs)
-
- target.__init__ = new_ctor
- return target
- else:
- raise TypeError('@Deprecated is only applicable to functions or classes')
-
-
-def Disabled(*args):
- """Decorator for disabling tests/benchmarks.
-
-
- If args are given, the test will be disabled if ANY of the args match the
- browser type, OS name or OS version:
- @Disabled('canary') # Disabled for canary browsers
- @Disabled('win') # Disabled on Windows.
- @Disabled('win', 'linux') # Disabled on both Windows and Linux.
- @Disabled('mavericks') # Disabled on Mac Mavericks (10.9) only.
- @Disabled('all') # Unconditionally disabled.
- """
- def _Disabled(func):
- if not hasattr(func, '_disabled_strings'):
- func._disabled_strings = set()
- func._disabled_strings.update(disabled_strings)
- return func
- assert args, (
- "@Disabled(...) requires arguments. Use @Disabled('all') if you want to "
- 'unconditionally disable the test.')
- assert not callable(args[0]), 'Please use @Disabled(..).'
- disabled_strings = list(args)
- for disabled_string in disabled_strings:
- # TODO(tonyg): Validate that these strings are recognized.
- assert isinstance(disabled_string, str), '@Disabled accepts a list of strs'
- return _Disabled
-
-
-def Enabled(*args):
- """Decorator for enabling tests/benchmarks.
-
- The test will be enabled if ANY of the args match the browser type, OS name
- or OS version:
- @Enabled('canary') # Enabled only for canary browsers
- @Enabled('win') # Enabled only on Windows.
- @Enabled('win', 'linux') # Enabled only on Windows or Linux.
- @Enabled('mavericks') # Enabled only on Mac Mavericks (10.9).
- """
- def _Enabled(func):
- if not hasattr(func, '_enabled_strings'):
- func._enabled_strings = set()
- func._enabled_strings.update(enabled_strings)
- return func
- assert args, '@Enabled(..) requires arguments'
- assert not callable(args[0]), 'Please use @Enabled(..).'
- enabled_strings = list(args)
- for enabled_string in enabled_strings:
- # TODO(tonyg): Validate that these strings are recognized.
- assert isinstance(enabled_string, str), '@Enabled accepts a list of strs'
- return _Enabled
-
-
-# TODO(dpranke): Remove if we don't need this.
-def Isolated(*args):
- """Decorator for noting that tests must be run in isolation.
-
- The test will be run by itself (not concurrently with any other tests)
- if ANY of the args match the browser type, OS name, or OS version."""
- def _Isolated(func):
- if not isinstance(func, types.FunctionType):
- func._isolated_strings = isolated_strings
- return func
- @functools.wraps(func)
- def wrapper(*args, **kwargs):
- func(*args, **kwargs)
- wrapper._isolated_strings = isolated_strings
- return wrapper
- if len(args) == 1 and callable(args[0]):
- isolated_strings = []
- return _Isolated(args[0])
- isolated_strings = list(args)
- for isolated_string in isolated_strings:
- # TODO(tonyg): Validate that these strings are recognized.
- assert isinstance(isolated_string, str), 'Isolated accepts a list of strs'
- return _Isolated
-
-
-# TODO(nednguyen): Remove this and have call site just use ShouldSkip directly.
-def IsEnabled(test, possible_browser):
- """Returns True iff |test| is enabled given the |possible_browser|.
-
- Use to respect the @Enabled / @Disabled decorators.
-
- Args:
- test: A function or class that may contain _disabled_strings and/or
- _enabled_strings attributes.
- possible_browser: A PossibleBrowser to check whether |test| may run against.
- """
- should_skip, msg = ShouldSkip(test, possible_browser)
- return (not should_skip, msg)
-
-
-def ShouldSkip(test, possible_browser):
- """Returns whether the test should be skipped and the reason for it."""
- platform_attributes = _PlatformAttributes(possible_browser)
-
- if hasattr(test, '__name__'):
- name = test.__name__
- elif hasattr(test, '__class__'):
- name = test.__class__.__name__
- else:
- name = str(test)
-
- skip = 'Skipping %s (%s) because' % (name, str(test))
- running = 'You are running %r.' % platform_attributes
-
- if hasattr(test, '_disabled_strings'):
- if 'all' in test._disabled_strings:
- return (True, '%s it is unconditionally disabled.' % skip)
- if set(test._disabled_strings) & set(platform_attributes):
- return (True, '%s it is disabled for %s. %s' %
- (skip, ' and '.join(test._disabled_strings), running))
-
- if hasattr(test, '_enabled_strings'):
- if 'all' in test._enabled_strings:
- return False, None # No arguments to @Enabled means always enable.
- if not set(test._enabled_strings) & set(platform_attributes):
- return (True, '%s it is only enabled for %s. %s' %
- (skip, ' or '.join(test._enabled_strings), running))
-
- return False, None
-
-
-def ShouldBeIsolated(test, possible_browser):
- platform_attributes = _PlatformAttributes(possible_browser)
- if hasattr(test, '_isolated_strings'):
- isolated_strings = test._isolated_strings
- if not isolated_strings:
- return True # No arguments to @Isolated means always isolate.
- for isolated_string in isolated_strings:
- if isolated_string in platform_attributes:
- return True
- return False
- return False
-
-
-def _PlatformAttributes(possible_browser):
- """Returns a list of platform attribute strings."""
- attributes = [a.lower() for a in [
- possible_browser.browser_type,
- possible_browser.platform.GetOSName(),
- possible_browser.platform.GetOSVersionName(),
- ]]
- if possible_browser.supports_tab_control:
- attributes.append('has tabs')
- if 'content-shell' in possible_browser.browser_type:
- attributes.append('content-shell')
- if 'mandoline' in possible_browser.browser_type:
- attributes.append('mandoline')
- return attributes
« no previous file with comments | « tools/telemetry/telemetry/core/util_unittest.py ('k') | tools/telemetry/telemetry/decorators_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698