Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / test / ispy / server / gs_bucket.py
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))