|
@@ -9,8 +9,10 @@ import math
|
|
|
import uuid
|
|
import uuid
|
|
|
|
|
|
|
|
import cloudbridge as cb
|
|
import cloudbridge as cb
|
|
|
|
|
+import cloudbridge.cloud.base.helpers as cb_helpers
|
|
|
from cloudbridge.cloud.base.resources import BaseAttachmentInfo
|
|
from cloudbridge.cloud.base.resources import BaseAttachmentInfo
|
|
|
from cloudbridge.cloud.base.resources import BaseBucket
|
|
from cloudbridge.cloud.base.resources import BaseBucket
|
|
|
|
|
+from cloudbridge.cloud.base.resources import BaseBucketContainer
|
|
|
from cloudbridge.cloud.base.resources import BaseBucketObject
|
|
from cloudbridge.cloud.base.resources import BaseBucketObject
|
|
|
from cloudbridge.cloud.base.resources import BaseFloatingIP
|
|
from cloudbridge.cloud.base.resources import BaseFloatingIP
|
|
|
from cloudbridge.cloud.base.resources import BaseFloatingIPContainer
|
|
from cloudbridge.cloud.base.resources import BaseFloatingIPContainer
|
|
@@ -1587,7 +1589,7 @@ class GCESubnet(BaseSubnet):
|
|
|
def state(self):
|
|
def state(self):
|
|
|
if 'status' in self._subnet and self._subnet['status'] == 'UNKNOWN':
|
|
if 'status' in self._subnet and self._subnet['status'] == 'UNKNOWN':
|
|
|
return SubnetState.UNKNOWN
|
|
return SubnetState.UNKNOWN
|
|
|
- return SubnetState.AVAILABEL
|
|
|
|
|
|
|
+ return SubnetState.AVAILABLE
|
|
|
|
|
|
|
|
def refresh(self):
|
|
def refresh(self):
|
|
|
self._subnet = self._provider.get_resource('subnetworks', self.id)
|
|
self._subnet = self._provider.get_resource('subnetworks', self.id)
|
|
@@ -1947,29 +1949,18 @@ class GCSObject(BaseBucketObject):
|
|
|
return self._obj['mediaLink']
|
|
return self._obj['mediaLink']
|
|
|
|
|
|
|
|
|
|
|
|
|
-class GCSBucket(BaseBucket):
|
|
|
|
|
|
|
+class GCSBucketContainer(BaseBucketContainer):
|
|
|
|
|
|
|
|
def __init__(self, provider, bucket):
|
|
def __init__(self, provider, bucket):
|
|
|
- super(GCSBucket, self).__init__(provider)
|
|
|
|
|
- self._bucket = bucket
|
|
|
|
|
-
|
|
|
|
|
- @property
|
|
|
|
|
- def id(self):
|
|
|
|
|
- return self._bucket['selfLink']
|
|
|
|
|
-
|
|
|
|
|
- @property
|
|
|
|
|
- def name(self):
|
|
|
|
|
- """
|
|
|
|
|
- Get this bucket's name.
|
|
|
|
|
- """
|
|
|
|
|
- return self._bucket['name']
|
|
|
|
|
|
|
+ super(GCSBucketContainer, self).__init__(provider, bucket)
|
|
|
|
|
|
|
|
def get(self, name):
|
|
def get(self, name):
|
|
|
"""
|
|
"""
|
|
|
Retrieve a given object from this bucket.
|
|
Retrieve a given object from this bucket.
|
|
|
"""
|
|
"""
|
|
|
- obj = self._provider.get_resource('objects', name)
|
|
|
|
|
- return GCSObject(self._provider, self, obj) if obj else None
|
|
|
|
|
|
|
+ obj = self._provider.get_resource('objects', name,
|
|
|
|
|
+ bucket=self.bucket.name)
|
|
|
|
|
+ return GCSObject(self._provider, self.bucket, obj) if obj else None
|
|
|
|
|
|
|
|
def list(self, limit=None, marker=None, prefix=None):
|
|
def list(self, limit=None, marker=None, prefix=None):
|
|
|
"""
|
|
"""
|
|
@@ -1980,7 +1971,7 @@ class GCSBucket(BaseBucket):
|
|
|
response = (self._provider
|
|
response = (self._provider
|
|
|
.gcp_storage
|
|
.gcp_storage
|
|
|
.objects()
|
|
.objects()
|
|
|
- .list(bucket=self.name,
|
|
|
|
|
|
|
+ .list(bucket=self.bucket.name,
|
|
|
prefix=prefix if prefix else '',
|
|
prefix=prefix if prefix else '',
|
|
|
maxResults=max_result,
|
|
maxResults=max_result,
|
|
|
pageToken=marker)
|
|
pageToken=marker)
|
|
@@ -1989,7 +1980,7 @@ class GCSBucket(BaseBucket):
|
|
|
return ServerPagedResultList(False, None, False, data=[])
|
|
return ServerPagedResultList(False, None, False, data=[])
|
|
|
objects = []
|
|
objects = []
|
|
|
for obj in response.get('items', []):
|
|
for obj in response.get('items', []):
|
|
|
- objects.append(GCSObject(self._provider, self, obj))
|
|
|
|
|
|
|
+ objects.append(GCSObject(self._provider, self.bucket, obj))
|
|
|
if len(objects) > max_result:
|
|
if len(objects) > max_result:
|
|
|
cb.log.warning('Expected at most %d results; got %d',
|
|
cb.log.warning('Expected at most %d results; got %d',
|
|
|
max_result, len(objects))
|
|
max_result, len(objects))
|
|
@@ -2000,6 +1991,35 @@ class GCSBucket(BaseBucket):
|
|
|
cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
|
|
cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
|
|
|
return ServerPagedResultList(False, None, False, data=[])
|
|
return ServerPagedResultList(False, None, False, data=[])
|
|
|
|
|
|
|
|
|
|
+ def find(self, **kwargs):
|
|
|
|
|
+ obj_list = self.list()
|
|
|
|
|
+ filters = ['name']
|
|
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
+ return ClientPagedResultList(self._provider, list(matches),
|
|
|
|
|
+ limit=None, marker=None)
|
|
|
|
|
+
|
|
|
|
|
+ def create(self, name):
|
|
|
|
|
+ return self.bucket.create_object(name)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class GCSBucket(BaseBucket):
|
|
|
|
|
+
|
|
|
|
|
+ def __init__(self, provider, bucket):
|
|
|
|
|
+ super(GCSBucket, self).__init__(provider)
|
|
|
|
|
+ self._bucket = bucket
|
|
|
|
|
+ self._object_container = GCSBucketContainer(provider, self)
|
|
|
|
|
+
|
|
|
|
|
+ @property
|
|
|
|
|
+ def id(self):
|
|
|
|
|
+ return self._bucket['selfLink']
|
|
|
|
|
+
|
|
|
|
|
+ @property
|
|
|
|
|
+ def name(self):
|
|
|
|
|
+ """
|
|
|
|
|
+ Get this bucket's name.
|
|
|
|
|
+ """
|
|
|
|
|
+ return self._bucket['name']
|
|
|
|
|
+
|
|
|
def delete(self, delete_contents=False):
|
|
def delete(self, delete_contents=False):
|
|
|
"""
|
|
"""
|
|
|
Delete this bucket.
|
|
Delete this bucket.
|