| OLD | NEW |
| (Empty) |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 """Implementation of CloudBucket using Google Cloud Storage as the backend.""" | |
| 6 import os | |
| 7 import sys | |
| 8 | |
| 9 import cloudstorage | |
| 10 | |
| 11 from common import cloud_bucket | |
| 12 | |
| 13 | |
| 14 class GoogleCloudStorageBucket(cloud_bucket.BaseCloudBucket): | |
| 15 """Subclass of cloud_bucket.CloudBucket with actual GS commands.""" | |
| 16 | |
| 17 def __init__(self, bucket): | |
| 18 """Initializes the bucket. | |
| 19 | |
| 20 Args: | |
| 21 bucket: the name of the bucket to connect to. | |
| 22 """ | |
| 23 self.bucket = '/' + bucket | |
| 24 | |
| 25 def _full_path(self, path): | |
| 26 return self.bucket + '/' + path.lstrip('/') | |
| 27 | |
| 28 # override | |
| 29 def UploadFile(self, path, contents, content_type): | |
| 30 gs_file = cloudstorage.open( | |
| 31 self._full_path(path), 'w', content_type=content_type) | |
| 32 gs_file.write(contents) | |
| 33 gs_file.close() | |
| 34 | |
| 35 # override | |
| 36 def DownloadFile(self, path): | |
| 37 try: | |
| 38 gs_file = cloudstorage.open(self._full_path(path), 'r') | |
| 39 r = gs_file.read() | |
| 40 gs_file.close() | |
| 41 except Exception as e: | |
| 42 raise Exception('%s: %s' % (self._full_path(path), str(e))) | |
| 43 return r | |
| 44 | |
| 45 # override | |
| 46 def UpdateFile(self, path, contents): | |
| 47 if not self.FileExists(path): | |
| 48 raise cloud_bucket.FileNotFoundError | |
| 49 gs_file = cloudstorage.open(self._full_path(path), 'w') | |
| 50 gs_file.write(contents) | |
| 51 gs_file.close() | |
| 52 | |
| 53 # override | |
| 54 def RemoveFile(self, path): | |
| 55 cloudstorage.delete(self._full_path(path)) | |
| 56 | |
| 57 # override | |
| 58 def FileExists(self, path): | |
| 59 try: | |
| 60 cloudstorage.stat(self._full_path(path)) | |
| 61 except cloudstorage.NotFoundError: | |
| 62 return False | |
| 63 return True | |
| 64 | |
| 65 # override | |
| 66 def GetImageURL(self, path): | |
| 67 return '/image?file_path=%s' % path | |
| 68 | |
| 69 # override | |
| 70 def GetAllPaths(self, prefix): | |
| 71 return (f.filename[len(self.bucket) + 1:] for f in | |
| 72 cloudstorage.listbucket(self.bucket, prefix=prefix)) | |
| OLD | NEW |