| Index: tools/telemetry/telemetry/util/file_handle.py
|
| diff --git a/tools/telemetry/telemetry/util/file_handle.py b/tools/telemetry/telemetry/util/file_handle.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6962186235ed111bb26c784ad2191d4d652bf150
|
| --- /dev/null
|
| +++ b/tools/telemetry/telemetry/util/file_handle.py
|
| @@ -0,0 +1,100 @@
|
| +# 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.
|
| +
|
| +import os
|
| +import shutil
|
| +
|
| +
|
| +_next_file_id = 0
|
| +
|
| +
|
| +class FileHandle(object):
|
| + def __init__(self, temp_file=None, absolute_path=None):
|
| + """Constructs a FileHandle object.
|
| +
|
| + This constructor should not be used by the user; rather it is preferred to
|
| + use the module-level GetAbsPath and FromTempFile functions.
|
| +
|
| + Args:
|
| + temp_file: An instance of a temporary file object.
|
| + absolute_path: A path; should not be passed if tempfile is and vice-versa.
|
| + extension: A string that specifies the file extension. It must starts with
|
| + ".".
|
| + """
|
| + # Exactly one of absolute_path or temp_file must be specified.
|
| + assert (absolute_path is None) != (temp_file is None)
|
| + self._temp_file = temp_file
|
| + self._absolute_path = absolute_path
|
| +
|
| + global _next_file_id
|
| + self._id = _next_file_id
|
| + _next_file_id += 1
|
| +
|
| + @property
|
| + def id(self):
|
| + return self._id
|
| +
|
| + @property
|
| + def extension(self):
|
| + return os.path.splitext(self.GetAbsPath())[1]
|
| +
|
| + def GetAbsPath(self):
|
| + """Returns the path to the pointed-to file relative to the given start path.
|
| +
|
| + Args:
|
| + start: A string representing a starting path.
|
| + Returns:
|
| + A string giving the relative path from path to this file.
|
| + """
|
| + if self._temp_file:
|
| + self._temp_file.close()
|
| + return self._temp_file.name
|
| + else:
|
| + return self._absolute_path
|
| +
|
| +
|
| +def FromTempFile(temp_file):
|
| + """Constructs a FileHandle pointing to a temporary file.
|
| +
|
| + Returns:
|
| + A FileHandle referring to a named temporary file.
|
| + """
|
| + return FileHandle(temp_file)
|
| +
|
| +
|
| +def FromFilePath(path):
|
| + """Constructs a FileHandle from an absolute file path.
|
| +
|
| + Args:
|
| + path: A string giving the absolute path to a file.
|
| + Returns:
|
| + A FileHandle referring to the file at the specified path.
|
| + """
|
| + return FileHandle(None, os.path.abspath(path))
|
| +
|
| +
|
| +def OutputFiles(file_handles, dir_name):
|
| + """Outputs a list of file_handles by ID with a given dir_name and extension.
|
| +
|
| + For the normal use case where we generate a collection of FileHandles
|
| + corresponding to temporary files, it is often necessary to collocate the
|
| + represented files into a single place. This function copies each file
|
| + referenced by an element of file_handles to a standardized location indicated
|
| + by dir_name.
|
| +
|
| + Args:
|
| + file_handles: A list of file handles
|
| + dir_name: A string that specifies the directory to output the files.
|
| + Returns:
|
| + A dict mapping IDs to output files' paths.
|
| + """
|
| + file_ids_to_paths = dict()
|
| +
|
| + for fh in file_handles:
|
| + file_name = str(fh.id) + fh.extension
|
| + file_path = os.path.abspath(os.path.join(dir_name, file_name))
|
| + shutil.copy(fh.GetAbsPath(), file_path)
|
| + file_ids_to_paths[fh.id] = file_path
|
| +
|
| + return file_ids_to_paths
|
|
|