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

Unified Diff: tools/telemetry/telemetry/util/file_handle.py

Issue 663023005: [Telemetry] Add file handle & trace value. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ready to land ^^ Created 6 years, 2 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
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

Powered by Google App Engine
This is Rietveld 408576698