[pkg-eucalyptus-commits] [SCM] managing cloud instances for Eucalyptus branch, master, updated. 3.0.0-alpha3-257-g1da8e3a

Garrett Holmstrom gholms at fedoraproject.org
Sun Jun 16 02:30:05 UTC 2013


The following commit has been merged in the master branch:
commit c2d3481034a88eae6eb81183e3c040b655b1a06b
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Thu Feb 14 15:55:18 2013 -0800

    Implement minimal bucket listing

diff --git a/euca2ools/commands/walrus/listbucket.py b/euca2ools/commands/walrus/listbucket.py
new file mode 100644
index 0000000..708545b
--- /dev/null
+++ b/euca2ools/commands/walrus/listbucket.py
@@ -0,0 +1,81 @@
+# Software License Agreement (BSD License)
+#
+# Copyright (c) 2013, Eucalyptus Systems, Inc.
+# All rights reserved.
+#
+# Redistribution and use of this software in source and binary forms, with or
+# without modification, are permitted provided that the following conditions
+# are met:
+#
+#   Redistributions of source code must retain the above
+#   copyright notice, this list of conditions and the
+#   following disclaimer.
+#
+#   Redistributions in binary form must reproduce the above
+#   copyright notice, this list of conditions and the
+#   following disclaimer in the documentation and/or other
+#   materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from requestbuilder import Arg
+from requestbuilder.mixins import TabifyingCommand
+from requestbuilder.response import PaginatedResponse
+from requestbuilder.xmlparse import parse_aws_xml
+from . import WalrusRequest, validate_generic_bucket_name
+
+class ListBucket(WalrusRequest, TabifyingCommand):
+    DESCRIPTION = 'List keys in one or more buckets'
+    ARGS = [Arg('paths', metavar='BUCKET[/KEY]', nargs='+', route_to=None)]
+
+    def configure(self):
+        WalrusRequest.configure(self)
+        for path in self.args['paths']:
+            if path.startswith('/'):
+                self._cli_parser.error(('argument \'{0}\' must not start with '
+                        '\'/\'; format is BUCKET[/KEY]').format(path))
+            bucket = path.split('/', 1)[0]
+            try:
+                validate_generic_bucket_name(bucket)
+            except ValueError as err:
+                self._cli_parser.error(
+                        'bucket \'{0}\': {1}'.format(bucket, err.message))
+
+    def main(self):
+        self.method = 'GET'
+        return PaginatedResponse(self, self.args['paths'], ('Contents',))
+
+    def get_page_markers(self, response):
+        if response.get('IsTruncated') == 'true':
+            return {'marker': response['Contents'][-1]['Key']}
+
+    def prepare_for_page(self, next_path, markers):
+        bucket, __, prefix = next_path.partition('/')
+        self.path = bucket
+        if prefix:
+            self.params['prefix'] = prefix
+        elif 'prefix' in self.params:
+            del self.params['prefix']
+        if markers is not None and markers.get('marker'):
+            self.params['marker'] = markers['marker']
+        elif 'marker' in self.params:
+            del self.params['marker']
+
+    def parse_response(self, response):
+        response_dict = self.log_and_parse_response(response,
+                parse_aws_xml, list_item_markers=('Contents', 'CommonPrefixes'))
+        return response_dict['ListBucketResult']
+
+    def print_result(self, result):
+        for obj in result.get('Contents', []):
+            print obj.get('Key')

-- 
managing cloud instances for Eucalyptus



More information about the pkg-eucalyptus-commits mailing list