Chromium Code Reviews| Index: build/android/pylib/output/remote_output_manager.py |
| diff --git a/build/android/pylib/output/remote_output_manager.py b/build/android/pylib/output/remote_output_manager.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a393cdfa80db7de5975f76b0c2a13dfcc2417886 |
| --- /dev/null |
| +++ b/build/android/pylib/output/remote_output_manager.py |
| @@ -0,0 +1,87 @@ |
| +# Copyright 2017 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 hashlib |
| +import os |
| + |
| +from pylib.base import output_manager |
| +from pylib.output import noop_output_manager |
| +from pylib.utils import logdog_helper |
| +from pylib.utils import google_storage_helper |
| + |
| + |
| +class RemoteOutputManager(output_manager.OutputManager): |
| + |
| + def __init__(self, bucket): |
| + """Uploads output files to Google Storage or LogDog. |
| + |
| + Files will either be uploaded directly to Google Storage or LogDog |
| + depending on the datatype. |
| + |
| + Args |
| + bucket: Bucket to use when saving to Google Storage. |
| + """ |
| + super(RemoteOutputManager, self).__init__() |
| + self._bucket = bucket |
| + |
| + #override |
| + def _CreateArchivedFile(self, out_filename, out_subdir, datatype): |
| + if datatype == output_manager.Datatype.TEXT: |
| + return LogdogArchivedFile(out_filename, out_subdir, datatype) |
| + else: |
| + if self._bucket is None: |
| + return noop_output_manager.NoopArchivedFile() |
| + return GoogleStorageArchivedFile( |
| + out_filename, out_subdir, datatype, self._bucket) |
| + |
| + |
| +class LogdogArchivedFile(output_manager.ArchivedFile): |
| + |
| + def __init__(self, out_filename, out_subdir, datatype): |
| + super(LogdogArchivedFile, self).__init__(out_filename, out_subdir, datatype) |
| + self._stream_name = '%s_%s' % (out_subdir, out_filename) |
| + |
| + def _Link(self): |
| + return logdog_helper.get_viewer_url(self._stream_name) |
| + |
| + def _Archive(self): |
| + with open(self.name, 'r') as f: |
| + logdog_helper.text(self._stream_name, f.read()) |
| + |
| + |
| +class GoogleStorageArchivedFile(output_manager.ArchivedFile): |
| + |
| + def __init__(self, out_filename, out_subdir, datatype, bucket): |
| + super(GoogleStorageArchivedFile, self).__init__( |
| + out_filename, out_subdir, datatype) |
| + self._bucket = bucket |
| + self._upload_path = None |
| + self._content_addressed = None |
| + |
| + def _PrepareArchive(self): |
| + self._content_addressed = (self._datatype in ( |
| + output_manager.Datatype.HTML, |
| + output_manager.Datatype.IMAGE)) |
| + if self._content_addressed: |
| + sha1 = hashlib.sha1() |
| + with open(self.name, 'rb') as f: |
| + sha1.update(f.read()) |
| + self._upload_path = sha1.hexdigest() |
| + else: |
| + self._upload_path = os.path.join(self._out_subdir, self._out_filename) |
| + |
| + def _Link(self): |
| + return google_storage_helper.get_url_link( |
| + self._upload_path, self._bucket) |
| + |
| + def _Archive(self): |
| + if self._content_addressed: |
|
jbudorick
2017/08/23 16:16:20
nit:
if (self._content_addressed
and goog
mikecase (-- gone --)
2017/08/24 05:29:08
Done
|
| + if google_storage_helper.exists(self._upload_path, self._bucket): |
| + return |
| + |
| + content_type = None |
| + if self._datatype == output_manager.Datatype.HTML: |
| + content_type = 'text/html' |
| + google_storage_helper.upload( |
| + self._upload_path, self.name, self._bucket, content_type) |