Index: scripts/slave/recipe_modules/raw_io/api.py |
diff --git a/scripts/slave/recipe_modules/raw_io/api.py b/scripts/slave/recipe_modules/raw_io/api.py |
deleted file mode 100644 |
index 2cbece1950d9ab0e6ebfa02a891ee8855bb196d8..0000000000000000000000000000000000000000 |
--- a/scripts/slave/recipe_modules/raw_io/api.py |
+++ /dev/null |
@@ -1,159 +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. |
- |
-from recipe_engine import recipe_api |
-from recipe_engine import util as recipe_util |
- |
-import os |
-import shutil |
-import tempfile |
- |
- |
-class InputDataPlaceholder(recipe_util.Placeholder): |
- def __init__(self, data, suffix): |
- assert isinstance(data, basestring) |
- self.data = data |
- self.suffix = suffix |
- self._backing_file = None |
- super(InputDataPlaceholder, self).__init__() |
- |
- @property |
- def backing_file(self): |
- return self._backing_file |
- |
- def render(self, test): |
- assert not self._backing_file, 'Placeholder can be used only once' |
- if test.enabled: |
- # cheat and pretend like we're going to pass the data on the |
- # cmdline for test expectation purposes. |
- self._backing_file = self.data |
- else: # pragma: no cover |
- input_fd, self._backing_file = tempfile.mkstemp(suffix=self.suffix) |
- os.write(input_fd, self.data) |
- os.close(input_fd) |
- return [self._backing_file] |
- |
- def result(self, presentation, test): |
- assert self._backing_file |
- exists = os.path.exists(self._backing_file) |
- if not test.enabled and exists: # pragma: no cover |
- os.unlink(self._backing_file) |
- self._backing_file = None |
- |
- |
-class OutputDataPlaceholder(recipe_util.Placeholder): |
- def __init__(self, suffix, leak_to): |
- self.suffix = suffix |
- self.leak_to = leak_to |
- self._backing_file = None |
- super(OutputDataPlaceholder, self).__init__() |
- |
- @property |
- def backing_file(self): |
- return self._backing_file |
- |
- def render(self, test): |
- assert not self._backing_file, 'Placeholder can be used only once' |
- if self.leak_to: |
- self._backing_file = str(self.leak_to) |
- return [self._backing_file] |
- if test.enabled: |
- self._backing_file = '/path/to/tmp/' + self.suffix.lstrip('.') |
- else: # pragma: no cover |
- output_fd, self._backing_file = tempfile.mkstemp(suffix=self.suffix) |
- os.close(output_fd) |
- return [self._backing_file] |
- |
- def result(self, presentation, test): |
- assert self._backing_file |
- if test.enabled: |
- self._backing_file = None |
- return test.data |
- else: # pragma: no cover |
- try: |
- with open(self._backing_file, 'rb') as f: |
- return f.read() |
- finally: |
- if not self.leak_to: |
- os.unlink(self._backing_file) |
- self._backing_file = None |
- |
- |
-class OutputDataDirPlaceholder(recipe_util.Placeholder): |
- def __init__(self, suffix, leak_to): |
- self.suffix = suffix |
- self.leak_to = leak_to |
- self._backing_dir = None |
- super(OutputDataDirPlaceholder, self).__init__() |
- |
- @property |
- def backing_file(self): # pragma: no cover |
- raise ValueError('Output dir placeholders can not be used for stdin, ' |
- 'stdout or stderr') |
- |
- def render(self, test): |
- assert not self._backing_dir, 'Placeholder can be used only once' |
- if self.leak_to: |
- self._backing_dir = str(self.leak_to) |
- return [self._backing_dir] |
- if test.enabled: |
- self._backing_dir = '/path/to/tmp/' + self.suffix |
- else: # pragma: no cover |
- self._backing_dir = tempfile.mkdtemp(suffix=self.suffix) |
- return [self._backing_dir] |
- |
- def result(self, presentation, test): |
- assert self._backing_dir |
- if test.enabled: |
- self._backing_dir = None |
- return test.data or {} |
- else: # pragma: no cover |
- try: |
- all_files = {} |
- for dir_path, _, files in os.walk(self._backing_dir): |
- for filename in files: |
- abs_path = os.path.join(dir_path, filename) |
- rel_path = os.path.relpath(abs_path, self._backing_dir) |
- with open(abs_path, 'rb') as f: |
- all_files[rel_path] = f.read() |
- return all_files |
- finally: |
- if not self.leak_to: |
- shutil.rmtree(self._backing_dir) |
- self._backing_dir = None |
- |
- |
-class RawIOApi(recipe_api.RecipeApi): |
- @recipe_util.returns_placeholder |
- @staticmethod |
- def input(data, suffix=''): |
- return InputDataPlaceholder(data, suffix) |
- |
- @recipe_util.returns_placeholder |
- @staticmethod |
- def output(suffix='', leak_to=None): |
- """Returns a Placeholder for use as a step argument, or for std{out,err}. |
- |
- If 'leak_to' is None, the placeholder is backed by a temporary file with |
- a suffix 'suffix'. The file is deleted when the step finishes. |
- |
- If 'leak_to' is not None, then it should be a Path and placeholder |
- redirects IO to a file at that path. Once step finishes, the file is |
- NOT deleted (i.e. it's 'leaking'). 'suffix' is ignored in that case. |
- """ |
- return OutputDataPlaceholder(suffix, leak_to) |
- |
- @recipe_util.returns_placeholder |
- @staticmethod |
- def output_dir(suffix='', leak_to=None): |
- """Returns a directory Placeholder for use as a step argument. |
- |
- If 'leak_to' is None, the placeholder is backed by a temporary dir with |
- a suffix 'suffix'. The dir is deleted when the step finishes. |
- |
- If 'leak_to' is not None, then it should be a Path and placeholder |
- redirects IO to a dir at that path. Once step finishes, the dir is |
- NOT deleted (i.e. it's 'leaking'). 'suffix' is ignored in that case. |
- """ |
- return OutputDataDirPlaceholder(suffix, leak_to) |