Index: third_party/recipe_engine/util.py |
diff --git a/third_party/recipe_engine/util.py b/third_party/recipe_engine/util.py |
deleted file mode 100644 |
index 3a72385a8eeeeb17766a643e3cbe9473bb6ed3e3..0000000000000000000000000000000000000000 |
--- a/third_party/recipe_engine/util.py |
+++ /dev/null |
@@ -1,148 +0,0 @@ |
-# Copyright 2013-2015 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. |
- |
-import functools |
-import os |
- |
-from cStringIO import StringIO |
- |
-class RecipeAbort(Exception): |
- pass |
- |
- |
-class ModuleInjectionError(AttributeError): |
- pass |
- |
- |
-class ModuleInjectionSite(object): |
- def __init__(self, owner_module=None): |
- self.owner_module = owner_module |
- |
- def __getattr__(self, key): |
- if self.owner_module is None: |
- raise ModuleInjectionError( |
- "RecipeApi has no dependency %r. (Add it to DEPS?)" % (key,)) |
- else: |
- raise ModuleInjectionError( |
- "Recipe Module %r has no dependency %r. (Add it to __init__.py:DEPS?)" |
- % (self.owner_module.name, key)) |
- |
- |
-class Placeholder(object): |
- """Base class for json placeholders. Do not use directly.""" |
- def __init__(self): |
- self.name_pieces = None |
- |
- @property |
- def backing_file(self): # pragma: no cover |
- """Return path to a temp file that holds or receives the data. |
- |
- Valid only after 'render' has been called. |
- """ |
- raise NotImplementedError |
- |
- def render(self, test): # pragma: no cover |
- """Return [cmd items]*""" |
- raise NotImplementedError |
- |
- def result(self, presentation, test): |
- """Called after step completion. |
- |
- Args: |
- presentation (StepPresentation) - for the current step. |
- test (PlaceholderTestData) - test data for this placeholder. |
- |
- Returns value to add to step result. |
- |
- May optionally modify presentation as a side-effect. |
- """ |
- pass |
- |
- @property |
- def name(self): |
- assert self.name_pieces |
- return "%s.%s" % self.name_pieces |
- |
- |
-def static_wraps(func): |
- wrapped_fn = func |
- if isinstance(func, staticmethod): |
- # __get__(obj) is the way to get the function contained in the staticmethod. |
- # python 2.7+ has a __func__ member, but previous to this the attribute |
- # doesn't exist. It doesn't matter what the obj is, as long as it's not |
- # None. |
- wrapped_fn = func.__get__(object) |
- return functools.wraps(wrapped_fn) |
- |
- |
-def static_call(obj, func, *args, **kwargs): |
- if isinstance(func, staticmethod): |
- return func.__get__(obj)(*args, **kwargs) |
- else: |
- return func(obj, *args, **kwargs) |
- |
- |
-def static_name(obj, func): |
- if isinstance(func, staticmethod): |
- return func.__get__(obj).__name__ |
- else: |
- return func.__name__ |
- |
- |
-def returns_placeholder(func): |
- @static_wraps(func) |
- def inner(self, *args, **kwargs): |
- ret = static_call(self, func, *args, **kwargs) |
- assert isinstance(ret, Placeholder) |
- ret.name_pieces = (self.name, static_name(self, func)) |
- return ret |
- # prevent this placeholder-returning function from becoming a composite_step. |
- inner._non_step = True # pylint: disable=protected-access |
- return inner |
- |
- |
-def cached_unary(f): |
- """Decorator that caches/memoizes an unary function result. |
- |
- If the function throws an exception, the cache table will not be updated. |
- """ |
- cache = {} |
- empty = object() |
- |
- @functools.wraps(f) |
- def cached_f(inp): |
- cache_entry = cache.get(inp, empty) |
- if cache_entry is empty: |
- cache_entry = f(inp) |
- cache[inp] = cache_entry |
- return cache_entry |
- return cached_f |
- |
- |
-def scan_directory(path, predicate): |
- """Recursively scans a directory and yields paths that match predicate.""" |
- for root, _dirs, files in os.walk(path): |
- for file_name in (f for f in files if predicate(f)): |
- file_path = os.path.join(root, file_name) |
- yield file_path |
- |
- |
-class StringListIO(object): |
- def __init__(self): |
- self.lines = [StringIO()] |
- |
- def write(self, s): |
- while s: |
- i = s.find('\n') |
- if i == -1: |
- self.lines[-1].write(s) |
- break |
- self.lines[-1].write(s[:i]) |
- self.lines[-1] = self.lines[-1].getvalue() |
- self.lines.append(StringIO()) |
- s = s[i+1:] |
- |
- def close(self): |
- if not isinstance(self.lines[-1], basestring): |
- self.lines[-1] = self.lines[-1].getvalue() |