|  | # Copyright 2017 The Chromium Authors | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | import time | 
|  | import os | 
|  | import shutil | 
|  |  | 
|  | try: | 
|  | from urllib.parse import quote | 
|  | except ImportError: | 
|  | from urllib import quote | 
|  |  | 
|  | from pylib.base import output_manager | 
|  |  | 
|  |  | 
|  | class LocalOutputManager(output_manager.OutputManager): | 
|  | """Saves and manages test output files locally in output directory. | 
|  |  | 
|  | Location files will be saved in {output_dir}/TEST_RESULTS_{timestamp}. | 
|  | """ | 
|  |  | 
|  | def __init__(self, output_dir): | 
|  | super().__init__() | 
|  | timestamp = time.strftime( | 
|  | '%Y_%m_%dT%H_%M_%S', time.localtime()) | 
|  | self._output_root = os.path.abspath(os.path.join( | 
|  | output_dir, 'TEST_RESULTS_%s' % timestamp)) | 
|  |  | 
|  | #override | 
|  | def _CreateArchivedFile(self, out_filename, out_subdir, datatype): | 
|  | return LocalArchivedFile( | 
|  | out_filename, out_subdir, datatype, self._output_root) | 
|  |  | 
|  |  | 
|  | class LocalArchivedFile(output_manager.ArchivedFile): | 
|  |  | 
|  | def __init__(self, out_filename, out_subdir, datatype, out_root): | 
|  | super().__init__(out_filename, out_subdir, datatype) | 
|  | self._output_path = os.path.join(out_root, out_subdir, out_filename) | 
|  |  | 
|  | def _Link(self): | 
|  | return 'file://%s' % quote(self._output_path) | 
|  |  | 
|  | def _Archive(self): | 
|  | if not os.path.exists(os.path.dirname(self._output_path)): | 
|  | os.makedirs(os.path.dirname(self._output_path)) | 
|  | shutil.copy(self.name, self._output_path) |