root / kamaki / cli / commands / pithos_cli.py @ 852a22e7
History | View | Annotate | Download (45.8 kB)
1 | 7493ccb6 | Stavros Sachtouris | # Copyright 2011-2012 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 7493ccb6 | Stavros Sachtouris | #
|
3 | 7493ccb6 | Stavros Sachtouris | # Redistribution and use in source and binary forms, with or
|
4 | 7493ccb6 | Stavros Sachtouris | # without modification, are permitted provided that the following
|
5 | 7493ccb6 | Stavros Sachtouris | # conditions are met:
|
6 | 7493ccb6 | Stavros Sachtouris | #
|
7 | 7493ccb6 | Stavros Sachtouris | # 1. Redistributions of source code must retain the above
|
8 | 7493ccb6 | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
9 | 7493ccb6 | Stavros Sachtouris | # disclaimer.
|
10 | 7493ccb6 | Stavros Sachtouris | #
|
11 | 7493ccb6 | Stavros Sachtouris | # 2. Redistributions in binary form must reproduce the above
|
12 | 7493ccb6 | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
13 | 7493ccb6 | Stavros Sachtouris | # disclaimer in the documentation and/or other materials
|
14 | 7493ccb6 | Stavros Sachtouris | # provided with the distribution.
|
15 | 7493ccb6 | Stavros Sachtouris | #
|
16 | 7493ccb6 | Stavros Sachtouris | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 7493ccb6 | Stavros Sachtouris | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 7493ccb6 | Stavros Sachtouris | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 7493ccb6 | Stavros Sachtouris | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 7493ccb6 | Stavros Sachtouris | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 7493ccb6 | Stavros Sachtouris | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 7493ccb6 | Stavros Sachtouris | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 7493ccb6 | Stavros Sachtouris | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 7493ccb6 | Stavros Sachtouris | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 7493ccb6 | Stavros Sachtouris | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 7493ccb6 | Stavros Sachtouris | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 7493ccb6 | Stavros Sachtouris | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 7493ccb6 | Stavros Sachtouris | #
|
29 | 7493ccb6 | Stavros Sachtouris | # The views and conclusions contained in the software and
|
30 | 7493ccb6 | Stavros Sachtouris | # documentation are those of the authors and should not be
|
31 | 7493ccb6 | Stavros Sachtouris | # interpreted as representing official policies, either expressed
|
32 | 7493ccb6 | Stavros Sachtouris | # or implied, of GRNET S.A.command
|
33 | 7493ccb6 | Stavros Sachtouris | |
34 | 234954d1 | Stavros Sachtouris | from kamaki.cli import command |
35 | d486baec | Stavros Sachtouris | from kamaki.cli.command_tree import CommandTree |
36 | f997679d | Stavros Sachtouris | from kamaki.cli.errors import CLIError, raiseCLIError |
37 | 234954d1 | Stavros Sachtouris | from kamaki.cli.utils import format_size, print_dict, pretty_keys |
38 | e3d4d442 | Stavros Sachtouris | from kamaki.cli.argument import FlagArgument, ValueArgument, IntArgument |
39 | fd1f1d96 | Stavros Sachtouris | from kamaki.cli.argument import ProgressBarArgument |
40 | 0b9269d8 | Stavros Sachtouris | from kamaki.cli.commands import _command_init |
41 | 7493ccb6 | Stavros Sachtouris | from kamaki.clients.pithos import PithosClient, ClientError |
42 | 67cea04c | Stavros Sachtouris | from kamaki.cli.utils import bold |
43 | 234954d1 | Stavros Sachtouris | from sys import stdout |
44 | 234954d1 | Stavros Sachtouris | from time import localtime, strftime |
45 | e3d4d442 | Stavros Sachtouris | from datetime import datetime as dtm |
46 | 7493ccb6 | Stavros Sachtouris | |
47 | 234954d1 | Stavros Sachtouris | |
48 | d486baec | Stavros Sachtouris | pithos_cmds = CommandTree('store', 'Pithos+ storage commands') |
49 | d486baec | Stavros Sachtouris | _commands = [pithos_cmds] |
50 | 234954d1 | Stavros Sachtouris | |
51 | 7493ccb6 | Stavros Sachtouris | |
52 | 234954d1 | Stavros Sachtouris | # Argument functionality
|
53 | 234954d1 | Stavros Sachtouris | |
54 | 234954d1 | Stavros Sachtouris | |
55 | efdee310 | Stavros Sachtouris | class DelimiterArgument(ValueArgument): |
56 | efdee310 | Stavros Sachtouris | def __init__(self, caller_obj, help='', parsed_name=None, default=None): |
57 | efdee310 | Stavros Sachtouris | super(DelimiterArgument, self).__init__(help, parsed_name, default) |
58 | efdee310 | Stavros Sachtouris | self.caller_obj = caller_obj
|
59 | efdee310 | Stavros Sachtouris | |
60 | 234954d1 | Stavros Sachtouris | @property
|
61 | efdee310 | Stavros Sachtouris | def value(self): |
62 | efdee310 | Stavros Sachtouris | if self.caller_obj.get_argument('recursive'): |
63 | efdee310 | Stavros Sachtouris | return '/' |
64 | efdee310 | Stavros Sachtouris | return getattr(self, '_value', self.default) |
65 | 234954d1 | Stavros Sachtouris | |
66 | 234954d1 | Stavros Sachtouris | @value.setter
|
67 | efdee310 | Stavros Sachtouris | def value(self, newvalue): |
68 | efdee310 | Stavros Sachtouris | self._value = newvalue
|
69 | efdee310 | Stavros Sachtouris | |
70 | 234954d1 | Stavros Sachtouris | |
71 | 3a9478a8 | Stavros Sachtouris | class MetaArgument(ValueArgument): |
72 | 234954d1 | Stavros Sachtouris | @property
|
73 | 3a9478a8 | Stavros Sachtouris | def value(self): |
74 | 3a9478a8 | Stavros Sachtouris | if self._value is None: |
75 | 3a9478a8 | Stavros Sachtouris | return self.default |
76 | 3a9478a8 | Stavros Sachtouris | metadict = dict()
|
77 | 3a9478a8 | Stavros Sachtouris | for metastr in self._value.split('_'): |
78 | 234954d1 | Stavros Sachtouris | (key, val) = metastr.split(':')
|
79 | 234954d1 | Stavros Sachtouris | metadict[key] = val |
80 | 3a9478a8 | Stavros Sachtouris | return metadict
|
81 | 234954d1 | Stavros Sachtouris | |
82 | 0f653327 | Stavros Sachtouris | @value.setter
|
83 | 0f653327 | Stavros Sachtouris | def value(self, newvalue): |
84 | 0f653327 | Stavros Sachtouris | if newvalue is None: |
85 | 0f653327 | Stavros Sachtouris | self._value = self.default |
86 | 0f653327 | Stavros Sachtouris | self._value = newvalue
|
87 | 0f653327 | Stavros Sachtouris | |
88 | 234954d1 | Stavros Sachtouris | |
89 | e3d4d442 | Stavros Sachtouris | class SharingArgument(ValueArgument): |
90 | 234954d1 | Stavros Sachtouris | @property
|
91 | e3d4d442 | Stavros Sachtouris | def value(self): |
92 | e3d4d442 | Stavros Sachtouris | return getattr(self, '_value', self.default) |
93 | 234954d1 | Stavros Sachtouris | |
94 | e3d4d442 | Stavros Sachtouris | @value.setter
|
95 | e3d4d442 | Stavros Sachtouris | def value(self, newvalue): |
96 | e3d4d442 | Stavros Sachtouris | perms = {} |
97 | e3d4d442 | Stavros Sachtouris | try:
|
98 | e3d4d442 | Stavros Sachtouris | permlist = newvalue.split(' ')
|
99 | e3d4d442 | Stavros Sachtouris | except AttributeError: |
100 | e3d4d442 | Stavros Sachtouris | return
|
101 | e3d4d442 | Stavros Sachtouris | for p in permlist: |
102 | e3d4d442 | Stavros Sachtouris | try:
|
103 | 234954d1 | Stavros Sachtouris | (key, val) = p.split('=')
|
104 | e3d4d442 | Stavros Sachtouris | except ValueError: |
105 | 234954d1 | Stavros Sachtouris | raise CLIError(message='Error in --sharing', |
106 | 234954d1 | Stavros Sachtouris | details='Incorrect format',
|
107 | 234954d1 | Stavros Sachtouris | importance=1)
|
108 | e3d4d442 | Stavros Sachtouris | if key.lower() not in ('read', 'write'): |
109 | 234954d1 | Stavros Sachtouris | raise CLIError(message='Error in --sharing', |
110 | 234954d1 | Stavros Sachtouris | details='Invalid permition key %s' % key,
|
111 | 234954d1 | Stavros Sachtouris | importance=1)
|
112 | e3d4d442 | Stavros Sachtouris | val_list = val.split(',')
|
113 | 234954d1 | Stavros Sachtouris | if not key in perms: |
114 | 234954d1 | Stavros Sachtouris | perms[key] = [] |
115 | e3d4d442 | Stavros Sachtouris | for item in val_list: |
116 | e3d4d442 | Stavros Sachtouris | if item not in perms[key]: |
117 | e3d4d442 | Stavros Sachtouris | perms[key].append(item) |
118 | e3d4d442 | Stavros Sachtouris | self._value = perms
|
119 | e3d4d442 | Stavros Sachtouris | |
120 | 234954d1 | Stavros Sachtouris | |
121 | e3d4d442 | Stavros Sachtouris | class RangeArgument(ValueArgument): |
122 | 234954d1 | Stavros Sachtouris | @property
|
123 | e3d4d442 | Stavros Sachtouris | def value(self): |
124 | e3d4d442 | Stavros Sachtouris | return getattr(self, '_value', self.default) |
125 | 234954d1 | Stavros Sachtouris | |
126 | e3d4d442 | Stavros Sachtouris | @value.setter
|
127 | e3d4d442 | Stavros Sachtouris | def value(self, newvalue): |
128 | e3d4d442 | Stavros Sachtouris | if newvalue is None: |
129 | e3d4d442 | Stavros Sachtouris | self._value = self.default |
130 | e3d4d442 | Stavros Sachtouris | return
|
131 | 9ceec15a | Stavros Sachtouris | (start, end) = newvalue.split('-')
|
132 | e3d4d442 | Stavros Sachtouris | (start, end) = (int(start), int(end)) |
133 | 234954d1 | Stavros Sachtouris | self._value = '%s-%s' % (start, end) |
134 | 234954d1 | Stavros Sachtouris | |
135 | e3d4d442 | Stavros Sachtouris | |
136 | e3d4d442 | Stavros Sachtouris | class DateArgument(ValueArgument): |
137 | e3d4d442 | Stavros Sachtouris | DATE_FORMATS = ["%a %b %d %H:%M:%S %Y",
|
138 | e3d4d442 | Stavros Sachtouris | "%A, %d-%b-%y %H:%M:%S GMT",
|
139 | e3d4d442 | Stavros Sachtouris | "%a, %d %b %Y %H:%M:%S GMT"]
|
140 | e3d4d442 | Stavros Sachtouris | |
141 | e3d4d442 | Stavros Sachtouris | INPUT_FORMATS = DATE_FORMATS + ["%d-%m-%Y", "%H:%M:%S %d-%m-%Y"] |
142 | e3d4d442 | Stavros Sachtouris | |
143 | 234954d1 | Stavros Sachtouris | @property
|
144 | e3d4d442 | Stavros Sachtouris | def value(self): |
145 | e3d4d442 | Stavros Sachtouris | return getattr(self, '_value', self.default) |
146 | 234954d1 | Stavros Sachtouris | |
147 | e3d4d442 | Stavros Sachtouris | @value.setter
|
148 | e3d4d442 | Stavros Sachtouris | def value(self, newvalue): |
149 | e3d4d442 | Stavros Sachtouris | if newvalue is None: |
150 | e3d4d442 | Stavros Sachtouris | return
|
151 | e3d4d442 | Stavros Sachtouris | self._value = self.format_date(newvalue) |
152 | e3d4d442 | Stavros Sachtouris | |
153 | e3d4d442 | Stavros Sachtouris | def format_date(self, datestr): |
154 | e3d4d442 | Stavros Sachtouris | for format in self.INPUT_FORMATS: |
155 | e3d4d442 | Stavros Sachtouris | try:
|
156 | e3d4d442 | Stavros Sachtouris | t = dtm.strptime(datestr, format) |
157 | e3d4d442 | Stavros Sachtouris | except ValueError: |
158 | e3d4d442 | Stavros Sachtouris | continue
|
159 | e3d4d442 | Stavros Sachtouris | self._value = t.strftime(self.DATE_FORMATS[0]) |
160 | e3d4d442 | Stavros Sachtouris | return
|
161 | e3d4d442 | Stavros Sachtouris | raise CLIError('Date Argument Error', |
162 | 234954d1 | Stavros Sachtouris | details='%s not a valid date. correct formats:\n\t%s'\
|
163 | 234954d1 | Stavros Sachtouris | % (datestr, self.INPUT_FORMATS))
|
164 | 234954d1 | Stavros Sachtouris | |
165 | 234954d1 | Stavros Sachtouris | |
166 | 234954d1 | Stavros Sachtouris | # Command specs
|
167 | 234954d1 | Stavros Sachtouris | |
168 | e3d4d442 | Stavros Sachtouris | |
169 | 5eae854d | Stavros Sachtouris | class _pithos_init(_command_init): |
170 | 7493ccb6 | Stavros Sachtouris | def main(self): |
171 | 234954d1 | Stavros Sachtouris | self.token = self.config.get('store', 'token')\ |
172 | 234954d1 | Stavros Sachtouris | or self.config.get('global', 'token') |
173 | 234954d1 | Stavros Sachtouris | self.base_url = self.config.get('store', 'url')\ |
174 | 234954d1 | Stavros Sachtouris | or self.config.get('global', 'url') |
175 | 234954d1 | Stavros Sachtouris | self.account = self.config.get('store', 'account')\ |
176 | 234954d1 | Stavros Sachtouris | or self.config.get('global', 'account') |
177 | 234954d1 | Stavros Sachtouris | self.container = self.config.get('store', 'container')\ |
178 | 234954d1 | Stavros Sachtouris | or self.config.get('global', 'container') |
179 | 234954d1 | Stavros Sachtouris | self.client = PithosClient(base_url=self.base_url, |
180 | 234954d1 | Stavros Sachtouris | token=self.token,
|
181 | 234954d1 | Stavros Sachtouris | account=self.account,
|
182 | 7493ccb6 | Stavros Sachtouris | container=self.container)
|
183 | 7493ccb6 | Stavros Sachtouris | |
184 | 234954d1 | Stavros Sachtouris | |
185 | 7493ccb6 | Stavros Sachtouris | class _store_account_command(_pithos_init): |
186 | 7493ccb6 | Stavros Sachtouris | """Base class for account level storage commands"""
|
187 | 7493ccb6 | Stavros Sachtouris | |
188 | c41a86b2 | Stavros Sachtouris | def __init__(self, arguments={}): |
189 | c41a86b2 | Stavros Sachtouris | super(_store_account_command, self).__init__(arguments) |
190 | 234954d1 | Stavros Sachtouris | self.arguments['account'] =\ |
191 | 234954d1 | Stavros Sachtouris | ValueArgument('Specify the account', '--account') |
192 | c41a86b2 | Stavros Sachtouris | |
193 | 486f7af1 | Stavros Sachtouris | def generator(self, message): |
194 | 234954d1 | Stavros Sachtouris | return None |
195 | 7493ccb6 | Stavros Sachtouris | |
196 | 7493ccb6 | Stavros Sachtouris | def main(self): |
197 | 7493ccb6 | Stavros Sachtouris | super(_store_account_command, self).main() |
198 | c41a86b2 | Stavros Sachtouris | if self.arguments['account'].value is not None: |
199 | c41a86b2 | Stavros Sachtouris | self.client.account = self.arguments['account'].value |
200 | 7493ccb6 | Stavros Sachtouris | |
201 | 234954d1 | Stavros Sachtouris | |
202 | 7493ccb6 | Stavros Sachtouris | class _store_container_command(_store_account_command): |
203 | 7493ccb6 | Stavros Sachtouris | """Base class for container level storage commands"""
|
204 | 7493ccb6 | Stavros Sachtouris | |
205 | c41a86b2 | Stavros Sachtouris | def __init__(self, arguments={}): |
206 | c41a86b2 | Stavros Sachtouris | super(_store_container_command, self).__init__(arguments) |
207 | 234954d1 | Stavros Sachtouris | self.arguments['container'] =\ |
208 | 234954d1 | Stavros Sachtouris | ValueArgument('Specify the container name', '--container') |
209 | 7493ccb6 | Stavros Sachtouris | self.container = None |
210 | 7493ccb6 | Stavros Sachtouris | self.path = None |
211 | 7493ccb6 | Stavros Sachtouris | |
212 | 234954d1 | Stavros Sachtouris | def extract_container_and_path(self, |
213 | 234954d1 | Stavros Sachtouris | container_with_path, |
214 | 234954d1 | Stavros Sachtouris | path_is_optional=True):
|
215 | 7493ccb6 | Stavros Sachtouris | assert isinstance(container_with_path, str) |
216 | 7493ccb6 | Stavros Sachtouris | if ':' not in container_with_path: |
217 | c41a86b2 | Stavros Sachtouris | if self.get_argument('container') is not None: |
218 | c41a86b2 | Stavros Sachtouris | self.container = self.get_argument('container') |
219 | 7493ccb6 | Stavros Sachtouris | else:
|
220 | 7493ccb6 | Stavros Sachtouris | self.container = self.client.container |
221 | 7493ccb6 | Stavros Sachtouris | if self.container is None: |
222 | 7493ccb6 | Stavros Sachtouris | self.container = container_with_path
|
223 | 7493ccb6 | Stavros Sachtouris | else:
|
224 | 7493ccb6 | Stavros Sachtouris | self.path = container_with_path
|
225 | 7493ccb6 | Stavros Sachtouris | if not path_is_optional and self.path is None: |
226 | fd1f1d96 | Stavros Sachtouris | raise CLIError('Object path is missing\n', importance=1) |
227 | 7493ccb6 | Stavros Sachtouris | return
|
228 | 7493ccb6 | Stavros Sachtouris | cnp = container_with_path.split(':')
|
229 | 7493ccb6 | Stavros Sachtouris | self.container = cnp[0] |
230 | 7493ccb6 | Stavros Sachtouris | try:
|
231 | 7493ccb6 | Stavros Sachtouris | self.path = cnp[1] |
232 | 7493ccb6 | Stavros Sachtouris | except IndexError: |
233 | 7493ccb6 | Stavros Sachtouris | if path_is_optional:
|
234 | 7493ccb6 | Stavros Sachtouris | self.path = None |
235 | 7493ccb6 | Stavros Sachtouris | else:
|
236 | fd1f1d96 | Stavros Sachtouris | raise CLIError('Object path is missing\n', importance=1) |
237 | 7493ccb6 | Stavros Sachtouris | |
238 | 7493ccb6 | Stavros Sachtouris | def main(self, container_with_path=None, path_is_optional=True): |
239 | 7493ccb6 | Stavros Sachtouris | super(_store_container_command, self).main() |
240 | 7493ccb6 | Stavros Sachtouris | if container_with_path is not None: |
241 | 234954d1 | Stavros Sachtouris | self.extract_container_and_path(container_with_path,
|
242 | 234954d1 | Stavros Sachtouris | path_is_optional) |
243 | 7493ccb6 | Stavros Sachtouris | self.client.container = self.container |
244 | c41a86b2 | Stavros Sachtouris | elif self.get_argument('container') is not None: |
245 | c41a86b2 | Stavros Sachtouris | self.client.container = self.get_argument('container') |
246 | 7493ccb6 | Stavros Sachtouris | self.container = self.client.container |
247 | 7493ccb6 | Stavros Sachtouris | |
248 | 7493ccb6 | Stavros Sachtouris | |
249 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
250 | 7493ccb6 | Stavros Sachtouris | class store_list(_store_container_command): |
251 | 7493ccb6 | Stavros Sachtouris | """List containers, object trees or objects in a directory
|
252 | 7493ccb6 | Stavros Sachtouris | """
|
253 | 7493ccb6 | Stavros Sachtouris | |
254 | 234954d1 | Stavros Sachtouris | def __init__(self, arguments={}): |
255 | c41a86b2 | Stavros Sachtouris | super(store_list, self).__init__(arguments) |
256 | c41a86b2 | Stavros Sachtouris | self.arguments['detail'] = FlagArgument('show detailed output', '-l') |
257 | 234954d1 | Stavros Sachtouris | self.arguments['show_size'] =\ |
258 | 234954d1 | Stavros Sachtouris | ValueArgument('print output in chunks of size N', '-N') |
259 | e3d4d442 | Stavros Sachtouris | self.arguments['limit'] = IntArgument('show limited output', '-n') |
260 | 234954d1 | Stavros Sachtouris | self.arguments['marker'] =\ |
261 | 234954d1 | Stavros Sachtouris | ValueArgument('show output greater that marker', '--marker') |
262 | 234954d1 | Stavros Sachtouris | self.arguments['prefix'] =\ |
263 | 234954d1 | Stavros Sachtouris | ValueArgument('show output staritng with prefix', '--prefix') |
264 | 234954d1 | Stavros Sachtouris | self.arguments['delimiter'] =\ |
265 | 234954d1 | Stavros Sachtouris | ValueArgument('show output up to delimiter', '--delimiter') |
266 | 234954d1 | Stavros Sachtouris | self.arguments['path'] =\ |
267 | 234954d1 | Stavros Sachtouris | ValueArgument('show output starting with prefix up to /', '--path') |
268 | 234954d1 | Stavros Sachtouris | self.arguments['meta'] =\ |
269 | 234954d1 | Stavros Sachtouris | ValueArgument('show output haviung the specified meta keys',
|
270 | ce48608f | Stavros Sachtouris | '--meta', default=[])
|
271 | 234954d1 | Stavros Sachtouris | self.arguments['if_modified_since'] =\ |
272 | 234954d1 | Stavros Sachtouris | ValueArgument('show output modified since then',
|
273 | 234954d1 | Stavros Sachtouris | '--if-modified-since')
|
274 | 234954d1 | Stavros Sachtouris | self.arguments['if_unmodified_since'] =\ |
275 | 234954d1 | Stavros Sachtouris | ValueArgument('show output not modified since then',
|
276 | c41a86b2 | Stavros Sachtouris | '--if-unmodified-since')
|
277 | 234954d1 | Stavros Sachtouris | self.arguments['until'] =\ |
278 | 234954d1 | Stavros Sachtouris | DateArgument('show metadata until then', '--until') |
279 | 234954d1 | Stavros Sachtouris | self.arguments['format'] =\ |
280 | 234954d1 | Stavros Sachtouris | ValueArgument('format to parse until data (default: d/m/Y H:M:S',
|
281 | c41a86b2 | Stavros Sachtouris | '--format')
|
282 | c41a86b2 | Stavros Sachtouris | self.arguments['shared'] = FlagArgument('show only shared', '--shared') |
283 | c41a86b2 | Stavros Sachtouris | self.arguments['public'] = FlagArgument('show only public', '--public') |
284 | c41a86b2 | Stavros Sachtouris | |
285 | 7493ccb6 | Stavros Sachtouris | def print_objects(self, object_list): |
286 | 7493ccb6 | Stavros Sachtouris | import sys |
287 | 7493ccb6 | Stavros Sachtouris | try:
|
288 | c41a86b2 | Stavros Sachtouris | limit = self.get_argument('show_size') |
289 | 7493ccb6 | Stavros Sachtouris | limit = int(limit)
|
290 | 0f653327 | Stavros Sachtouris | except (AttributeError, TypeError): |
291 | 0f653327 | Stavros Sachtouris | limit = len(object_list) + 1 |
292 | 7493ccb6 | Stavros Sachtouris | #index = 0
|
293 | 234954d1 | Stavros Sachtouris | for index, obj in enumerate(object_list): |
294 | 234954d1 | Stavros Sachtouris | if 'content_type' not in obj: |
295 | 7493ccb6 | Stavros Sachtouris | continue
|
296 | 7493ccb6 | Stavros Sachtouris | pretty_obj = obj.copy() |
297 | 7493ccb6 | Stavros Sachtouris | index += 1
|
298 | 234954d1 | Stavros Sachtouris | empty_space = ' ' * (len(str(len(object_list))) - len(str(index))) |
299 | 7493ccb6 | Stavros Sachtouris | if obj['content_type'] == 'application/directory': |
300 | 7493ccb6 | Stavros Sachtouris | isDir = True
|
301 | 7493ccb6 | Stavros Sachtouris | size = 'D'
|
302 | 7493ccb6 | Stavros Sachtouris | else:
|
303 | 7493ccb6 | Stavros Sachtouris | isDir = False
|
304 | 7493ccb6 | Stavros Sachtouris | size = format_size(obj['bytes'])
|
305 | 234954d1 | Stavros Sachtouris | pretty_obj['bytes'] = '%s (%s)' % (obj['bytes'], size) |
306 | 7493ccb6 | Stavros Sachtouris | oname = bold(obj['name'])
|
307 | c41a86b2 | Stavros Sachtouris | if self.get_argument('detail'): |
308 | 234954d1 | Stavros Sachtouris | print('%s%s. %s' % (empty_space, index, oname))
|
309 | 7493ccb6 | Stavros Sachtouris | print_dict(pretty_keys(pretty_obj), exclude=('name'))
|
310 | 7493ccb6 | Stavros Sachtouris | print
|
311 | 7493ccb6 | Stavros Sachtouris | else:
|
312 | 234954d1 | Stavros Sachtouris | oname = '%s%s. %6s %s' % (empty_space, index, size, oname)
|
313 | 7493ccb6 | Stavros Sachtouris | oname += '/' if isDir else '' |
314 | 7493ccb6 | Stavros Sachtouris | print(oname) |
315 | 234954d1 | Stavros Sachtouris | if limit <= index < len(object_list) and index % limit == 0: |
316 | 7493ccb6 | Stavros Sachtouris | print('(press "enter" to continue)')
|
317 | 7493ccb6 | Stavros Sachtouris | sys.stdin.read(1)
|
318 | 7493ccb6 | Stavros Sachtouris | |
319 | 7493ccb6 | Stavros Sachtouris | def print_containers(self, container_list): |
320 | 7493ccb6 | Stavros Sachtouris | import sys |
321 | 7493ccb6 | Stavros Sachtouris | try:
|
322 | c41a86b2 | Stavros Sachtouris | limit = self.get_argument('show_size') |
323 | 7493ccb6 | Stavros Sachtouris | limit = int(limit)
|
324 | 0f653327 | Stavros Sachtouris | except (AttributeError, TypeError): |
325 | 234954d1 | Stavros Sachtouris | limit = len(container_list) + 1 |
326 | 234954d1 | Stavros Sachtouris | for index, container in enumerate(container_list): |
327 | 234954d1 | Stavros Sachtouris | if 'bytes' in container: |
328 | 234954d1 | Stavros Sachtouris | size = format_size(container['bytes'])
|
329 | 234954d1 | Stavros Sachtouris | cname = '%s. %s' % (index + 1, bold(container['name'])) |
330 | c41a86b2 | Stavros Sachtouris | if self.get_argument('detail'): |
331 | 7493ccb6 | Stavros Sachtouris | print(cname) |
332 | 7493ccb6 | Stavros Sachtouris | pretty_c = container.copy() |
333 | 234954d1 | Stavros Sachtouris | if 'bytes' in container: |
334 | 234954d1 | Stavros Sachtouris | pretty_c['bytes'] = '%s (%s)' % (container['bytes'], size) |
335 | 7493ccb6 | Stavros Sachtouris | print_dict(pretty_keys(pretty_c), exclude=('name'))
|
336 | 7493ccb6 | Stavros Sachtouris | print
|
337 | 7493ccb6 | Stavros Sachtouris | else:
|
338 | 234954d1 | Stavros Sachtouris | if 'count' in container and 'bytes' in container: |
339 | 234954d1 | Stavros Sachtouris | print('%s (%s, %s objects)'\
|
340 | 234954d1 | Stavros Sachtouris | % (cname, size, container['count']))
|
341 | 7493ccb6 | Stavros Sachtouris | else:
|
342 | 7493ccb6 | Stavros Sachtouris | print(cname) |
343 | 234954d1 | Stavros Sachtouris | if limit <= index < len(container_list) and index % limit == 0: |
344 | 7493ccb6 | Stavros Sachtouris | print('(press "enter" to continue)')
|
345 | 7493ccb6 | Stavros Sachtouris | sys.stdin.read(1)
|
346 | 7493ccb6 | Stavros Sachtouris | |
347 | 7493ccb6 | Stavros Sachtouris | def main(self, container____path__=None): |
348 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
349 | 7493ccb6 | Stavros Sachtouris | try:
|
350 | 7493ccb6 | Stavros Sachtouris | if self.container is None: |
351 | c41a86b2 | Stavros Sachtouris | r = self.client.account_get(limit=self.get_argument('limit'), |
352 | c41a86b2 | Stavros Sachtouris | marker=self.get_argument('marker'), |
353 | c41a86b2 | Stavros Sachtouris | if_modified_since=self.get_argument('if_modified_since'), |
354 | 234954d1 | Stavros Sachtouris | if_unmodified_since=self.get_argument(\
|
355 | 234954d1 | Stavros Sachtouris | 'if_unmodified_since'),
|
356 | 3a9478a8 | Stavros Sachtouris | until=self.get_argument('until'), |
357 | c41a86b2 | Stavros Sachtouris | show_only_shared=self.get_argument('shared')) |
358 | 7493ccb6 | Stavros Sachtouris | self.print_containers(r.json)
|
359 | 7493ccb6 | Stavros Sachtouris | else:
|
360 | c41a86b2 | Stavros Sachtouris | r = self.client.container_get(limit=self.get_argument('limit'), |
361 | 234954d1 | Stavros Sachtouris | marker=self.get_argument('marker'), |
362 | 234954d1 | Stavros Sachtouris | prefix=self.get_argument('prefix'), |
363 | 234954d1 | Stavros Sachtouris | delimiter=self.get_argument('delimiter'), |
364 | 234954d1 | Stavros Sachtouris | path=self.get_argument('path'), |
365 | c41a86b2 | Stavros Sachtouris | if_modified_since=self.get_argument('if_modified_since'), |
366 | 234954d1 | Stavros Sachtouris | if_unmodified_since=self.get_argument(\
|
367 | 234954d1 | Stavros Sachtouris | 'if_unmodified_since'),
|
368 | 3a9478a8 | Stavros Sachtouris | until=self.get_argument('until'), |
369 | 234954d1 | Stavros Sachtouris | meta=self.get_argument('meta'), |
370 | 234954d1 | Stavros Sachtouris | show_only_shared=self.get_argument('shared')) |
371 | 7493ccb6 | Stavros Sachtouris | self.print_objects(r.json)
|
372 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
373 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
374 | 7493ccb6 | Stavros Sachtouris | |
375 | 234954d1 | Stavros Sachtouris | |
376 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
377 | 7493ccb6 | Stavros Sachtouris | class store_mkdir(_store_container_command): |
378 | 7493ccb6 | Stavros Sachtouris | """Create a directory"""
|
379 | 7493ccb6 | Stavros Sachtouris | |
380 | 7493ccb6 | Stavros Sachtouris | def main(self, container___directory): |
381 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
382 | 234954d1 | Stavros Sachtouris | self).main(container___directory, path_is_optional=False) |
383 | 7493ccb6 | Stavros Sachtouris | try:
|
384 | 7493ccb6 | Stavros Sachtouris | self.client.create_directory(self.path) |
385 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
386 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
387 | 7493ccb6 | Stavros Sachtouris | |
388 | 234954d1 | Stavros Sachtouris | |
389 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
390 | 7493ccb6 | Stavros Sachtouris | class store_create(_store_container_command): |
391 | 7493ccb6 | Stavros Sachtouris | """Create a container or a directory object"""
|
392 | 7493ccb6 | Stavros Sachtouris | |
393 | 3a9478a8 | Stavros Sachtouris | def __init__(self, arguments={}): |
394 | 3a9478a8 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
395 | 234954d1 | Stavros Sachtouris | self.arguments['versioning'] = \ |
396 | 234954d1 | Stavros Sachtouris | ValueArgument('set container versioning (auto/none)',
|
397 | 3a9478a8 | Stavros Sachtouris | '--versioning')
|
398 | 234954d1 | Stavros Sachtouris | self.arguments['quota'] =\ |
399 | 234954d1 | Stavros Sachtouris | IntArgument('set default container quota', '--quota') |
400 | 234954d1 | Stavros Sachtouris | self.arguments['meta'] =\ |
401 | 234954d1 | Stavros Sachtouris | MetaArgument('set container metadata', '--meta') |
402 | 7493ccb6 | Stavros Sachtouris | |
403 | 7493ccb6 | Stavros Sachtouris | def main(self, container____directory__): |
404 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____directory__) |
405 | 7493ccb6 | Stavros Sachtouris | try:
|
406 | 7493ccb6 | Stavros Sachtouris | if self.path is None: |
407 | 3a9478a8 | Stavros Sachtouris | self.client.container_put(quota=self.get_argument('quota'), |
408 | 3a9478a8 | Stavros Sachtouris | versioning=self.get_argument('versioning'), |
409 | 0f653327 | Stavros Sachtouris | metadata=self.get_argument('meta')) |
410 | 7493ccb6 | Stavros Sachtouris | else:
|
411 | 7493ccb6 | Stavros Sachtouris | self.client.create_directory(self.path) |
412 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
413 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
414 | 7493ccb6 | Stavros Sachtouris | |
415 | 234954d1 | Stavros Sachtouris | |
416 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
417 | 7493ccb6 | Stavros Sachtouris | class store_copy(_store_container_command): |
418 | 7493ccb6 | Stavros Sachtouris | """Copy an object"""
|
419 | 7493ccb6 | Stavros Sachtouris | |
420 | efdee310 | Stavros Sachtouris | def __init__(self, arguments={}): |
421 | efdee310 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
422 | 234954d1 | Stavros Sachtouris | self.arguments['source_version'] = ValueArgument(\ |
423 | 234954d1 | Stavros Sachtouris | 'copy specific version', '--source-version') |
424 | 234954d1 | Stavros Sachtouris | self.arguments['public'] = ValueArgument(\ |
425 | 234954d1 | Stavros Sachtouris | 'make object publicly accessible', '--public') |
426 | 234954d1 | Stavros Sachtouris | self.arguments['content_type'] = ValueArgument(\ |
427 | 234954d1 | Stavros Sachtouris | 'change object\'s content type', '--content-type') |
428 | 234954d1 | Stavros Sachtouris | self.arguments['delimiter'] = DelimiterArgument(self, |
429 | 234954d1 | Stavros Sachtouris | parsed_name='--delimiter',
|
430 | 234954d1 | Stavros Sachtouris | help=u'copy objects prefixed as src_object + delimiter')
|
431 | 234954d1 | Stavros Sachtouris | self.arguments['recursive'] = FlagArgument( |
432 | 234954d1 | Stavros Sachtouris | 'mass copy with delimiter /', ('-r', '--recursive')) |
433 | efdee310 | Stavros Sachtouris | |
434 | 7493ccb6 | Stavros Sachtouris | def main(self, source_container___path, destination_container____path__): |
435 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
436 | 234954d1 | Stavros Sachtouris | self).main(source_container___path, path_is_optional=False) |
437 | 7493ccb6 | Stavros Sachtouris | try:
|
438 | 7493ccb6 | Stavros Sachtouris | dst = destination_container____path__.split(':')
|
439 | 7493ccb6 | Stavros Sachtouris | dst_cont = dst[0]
|
440 | 7493ccb6 | Stavros Sachtouris | dst_path = dst[1] if len(dst) > 1 else False |
441 | 234954d1 | Stavros Sachtouris | self.client.copy_object(src_container=self.container, |
442 | 234954d1 | Stavros Sachtouris | src_object=self.path,
|
443 | 234954d1 | Stavros Sachtouris | dst_container=dst_cont, |
444 | 234954d1 | Stavros Sachtouris | dst_object=dst_path, |
445 | efdee310 | Stavros Sachtouris | source_version=self.get_argument('source_version'), |
446 | efdee310 | Stavros Sachtouris | public=self.get_argument('public'), |
447 | efdee310 | Stavros Sachtouris | content_type=self.get_argument('content_type'), |
448 | efdee310 | Stavros Sachtouris | delimiter=self.get_argument('delimiter')) |
449 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
450 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
451 | 7493ccb6 | Stavros Sachtouris | |
452 | 234954d1 | Stavros Sachtouris | |
453 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
454 | 7493ccb6 | Stavros Sachtouris | class store_move(_store_container_command): |
455 | 7493ccb6 | Stavros Sachtouris | """Copy an object"""
|
456 | 7493ccb6 | Stavros Sachtouris | |
457 | 486f7af1 | Stavros Sachtouris | def __init__(self, arguments={}): |
458 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
459 | 486f7af1 | Stavros Sachtouris | |
460 | 234954d1 | Stavros Sachtouris | self.arguments['source_version'] = ValueArgument(\ |
461 | 234954d1 | Stavros Sachtouris | 'copy specific version', '--source-version') |
462 | 234954d1 | Stavros Sachtouris | self.arguments['public'] = FlagArgument(\ |
463 | 234954d1 | Stavros Sachtouris | 'make object publicly accessible', '--public') |
464 | 234954d1 | Stavros Sachtouris | self.arguments['content_type'] = ValueArgument(\ |
465 | 234954d1 | Stavros Sachtouris | 'change object\'s content type', '--content-type') |
466 | 234954d1 | Stavros Sachtouris | self.arguments['delimiter'] = DelimiterArgument(self, |
467 | 234954d1 | Stavros Sachtouris | parsed_name='--delimiter',
|
468 | 234954d1 | Stavros Sachtouris | help='move objects prefixed as src_object + delimiter')
|
469 | 234954d1 | Stavros Sachtouris | self.arguments['recursive'] = FlagArgument(\ |
470 | 234954d1 | Stavros Sachtouris | 'copy with delimiter /', ('-r', '--recursive')) |
471 | 7493ccb6 | Stavros Sachtouris | |
472 | 7493ccb6 | Stavros Sachtouris | def main(self, source_container___path, destination_container____path__): |
473 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
474 | 234954d1 | Stavros Sachtouris | self).main(source_container___path, path_is_optional=False) |
475 | 7493ccb6 | Stavros Sachtouris | try:
|
476 | 7493ccb6 | Stavros Sachtouris | dst = destination_container____path__.split(':')
|
477 | 7493ccb6 | Stavros Sachtouris | dst_cont = dst[0]
|
478 | 7493ccb6 | Stavros Sachtouris | dst_path = dst[1] if len(dst) > 1 else False |
479 | 234954d1 | Stavros Sachtouris | self.client.move_object(src_container=self.container, |
480 | 234954d1 | Stavros Sachtouris | src_object=self.path,
|
481 | 234954d1 | Stavros Sachtouris | dst_container=dst_cont, |
482 | 234954d1 | Stavros Sachtouris | dst_object=dst_path, |
483 | 486f7af1 | Stavros Sachtouris | source_version=self.get_argument('source_version'), |
484 | 486f7af1 | Stavros Sachtouris | public=self.get_argument('public'), |
485 | 486f7af1 | Stavros Sachtouris | content_type=self.get_argument('content_type'), |
486 | 486f7af1 | Stavros Sachtouris | delimiter=self.get_argument('delimiter')) |
487 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
488 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
489 | 7493ccb6 | Stavros Sachtouris | |
490 | 234954d1 | Stavros Sachtouris | |
491 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
492 | 7493ccb6 | Stavros Sachtouris | class store_append(_store_container_command): |
493 | 7493ccb6 | Stavros Sachtouris | """Append local file to (existing) remote object"""
|
494 | 7493ccb6 | Stavros Sachtouris | |
495 | 486f7af1 | Stavros Sachtouris | def __init__(self, arguments={}): |
496 | 486f7af1 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
497 | 234954d1 | Stavros Sachtouris | self.arguments['progress_bar'] = ProgressBarArgument(\ |
498 | f27ed9a0 | Stavros Sachtouris | 'do not show progress bar', '--no-progress-bar', False) |
499 | 486f7af1 | Stavros Sachtouris | |
500 | 7493ccb6 | Stavros Sachtouris | def main(self, local_path, container___path): |
501 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
502 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
503 | 7493ccb6 | Stavros Sachtouris | try:
|
504 | 7493ccb6 | Stavros Sachtouris | f = open(local_path, 'r') |
505 | 852a22e7 | Stavros Sachtouris | progress_bar = self.arguments['progress_bar'] |
506 | 5bfe1cda | Stavros Sachtouris | try:
|
507 | 234954d1 | Stavros Sachtouris | upload_cb = progress_bar.get_generator('Appending blocks')
|
508 | 5bfe1cda | Stavros Sachtouris | except Exception: |
509 | 234954d1 | Stavros Sachtouris | upload_cb = None
|
510 | 234954d1 | Stavros Sachtouris | self.client.append_object(object=self.path, |
511 | 234954d1 | Stavros Sachtouris | source_file=f, |
512 | 234954d1 | Stavros Sachtouris | upload_cb=upload_cb) |
513 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
514 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
515 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
516 | 852a22e7 | Stavros Sachtouris | finally:
|
517 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
518 | 7493ccb6 | Stavros Sachtouris | |
519 | 234954d1 | Stavros Sachtouris | |
520 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
521 | 7493ccb6 | Stavros Sachtouris | class store_truncate(_store_container_command): |
522 | 7493ccb6 | Stavros Sachtouris | """Truncate remote file up to a size"""
|
523 | 7493ccb6 | Stavros Sachtouris | |
524 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path, size=0): |
525 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
526 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
527 | 7493ccb6 | Stavros Sachtouris | try:
|
528 | 7493ccb6 | Stavros Sachtouris | self.client.truncate_object(self.path, size) |
529 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
530 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
531 | 7493ccb6 | Stavros Sachtouris | |
532 | 234954d1 | Stavros Sachtouris | |
533 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
534 | 7493ccb6 | Stavros Sachtouris | class store_overwrite(_store_container_command): |
535 | 7493ccb6 | Stavros Sachtouris | """Overwrite part (from start to end) of a remote file"""
|
536 | 7493ccb6 | Stavros Sachtouris | |
537 | 486f7af1 | Stavros Sachtouris | def __init__(self, arguments={}): |
538 | 486f7af1 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
539 | 234954d1 | Stavros Sachtouris | self.arguments['progress_bar'] = ProgressBarArgument(\ |
540 | f27ed9a0 | Stavros Sachtouris | 'do not show progress bar', '--no-progress-bar', False) |
541 | 486f7af1 | Stavros Sachtouris | |
542 | 7493ccb6 | Stavros Sachtouris | def main(self, local_path, container___path, start, end): |
543 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
544 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
545 | 7493ccb6 | Stavros Sachtouris | try:
|
546 | 7493ccb6 | Stavros Sachtouris | f = open(local_path, 'r') |
547 | 852a22e7 | Stavros Sachtouris | progress_bar = self.arguments['progress_bar'] |
548 | 5bfe1cda | Stavros Sachtouris | try:
|
549 | 234954d1 | Stavros Sachtouris | upload_cb = progress_bar.get_generator('Overwritting blocks')
|
550 | 5bfe1cda | Stavros Sachtouris | except Exception: |
551 | 5bfe1cda | Stavros Sachtouris | upload_cb = None
|
552 | 234954d1 | Stavros Sachtouris | self.client.overwrite_object(object=self.path, |
553 | 234954d1 | Stavros Sachtouris | start=start, |
554 | 234954d1 | Stavros Sachtouris | end=end, |
555 | 234954d1 | Stavros Sachtouris | source_file=f, |
556 | 234954d1 | Stavros Sachtouris | upload_cb=upload_cb) |
557 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
558 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
559 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
560 | 852a22e7 | Stavros Sachtouris | finally:
|
561 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
562 | 7493ccb6 | Stavros Sachtouris | |
563 | 234954d1 | Stavros Sachtouris | |
564 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
565 | 486f7af1 | Stavros Sachtouris | class store_manifest(_store_container_command): |
566 | 486f7af1 | Stavros Sachtouris | """Create a remote file with uploaded parts by manifestation"""
|
567 | 486f7af1 | Stavros Sachtouris | |
568 | 486f7af1 | Stavros Sachtouris | def __init__(self, arguments={}): |
569 | 486f7af1 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
570 | 486f7af1 | Stavros Sachtouris | self.arguments['etag'] = ValueArgument('check written data', '--etag') |
571 | 234954d1 | Stavros Sachtouris | self.arguments['content_encoding'] = ValueArgument(\ |
572 | 234954d1 | Stavros Sachtouris | 'provide the object MIME content type', '--content-encoding') |
573 | 234954d1 | Stavros Sachtouris | self.arguments['content_disposition'] = ValueArgument(\ |
574 | 234954d1 | Stavros Sachtouris | 'provide the presentation style of the object',
|
575 | 486f7af1 | Stavros Sachtouris | '--content-disposition')
|
576 | 234954d1 | Stavros Sachtouris | self.arguments['content_type'] = ValueArgument(\ |
577 | 234954d1 | Stavros Sachtouris | 'create object with specific content type', '--content-type') |
578 | 234954d1 | Stavros Sachtouris | self.arguments['sharing'] = SharingArgument(parsed_name='--sharing', |
579 | 234954d1 | Stavros Sachtouris | help='define object sharing policy ' +\
|
580 | 234954d1 | Stavros Sachtouris | '( "read=user1,grp1,user2,... write=user1,grp2,..." )')
|
581 | 234954d1 | Stavros Sachtouris | self.arguments['public'] = FlagArgument(\ |
582 | 234954d1 | Stavros Sachtouris | 'make object publicly accessible', '--public') |
583 | 234954d1 | Stavros Sachtouris | |
584 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path): |
585 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
586 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
587 | 7493ccb6 | Stavros Sachtouris | try:
|
588 | 7493ccb6 | Stavros Sachtouris | self.client.create_object_by_manifestation(self.path, |
589 | 486f7af1 | Stavros Sachtouris | content_encoding=self.get_argument('content_encoding'), |
590 | 486f7af1 | Stavros Sachtouris | content_disposition=self.get_argument('content_disposition'), |
591 | 486f7af1 | Stavros Sachtouris | content_type=self.get_argument('content_type'), |
592 | 234954d1 | Stavros Sachtouris | sharing=self.get_argument('sharing'), |
593 | 234954d1 | Stavros Sachtouris | public=self.get_argument('public')) |
594 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
595 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
596 | 7493ccb6 | Stavros Sachtouris | |
597 | 234954d1 | Stavros Sachtouris | |
598 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
599 | 7493ccb6 | Stavros Sachtouris | class store_upload(_store_container_command): |
600 | 7493ccb6 | Stavros Sachtouris | """Upload a file"""
|
601 | 7493ccb6 | Stavros Sachtouris | |
602 | e3d4d442 | Stavros Sachtouris | def __init__(self, arguments={}): |
603 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
604 | 234954d1 | Stavros Sachtouris | self.arguments['use_hashes'] = FlagArgument(\ |
605 | 234954d1 | Stavros Sachtouris | 'provide hashmap file instead of data', '--use-hashes') |
606 | e3d4d442 | Stavros Sachtouris | self.arguments['etag'] = ValueArgument('check written data', '--etag') |
607 | 234954d1 | Stavros Sachtouris | self.arguments['unchunked'] = FlagArgument(\ |
608 | 234954d1 | Stavros Sachtouris | 'avoid chunked transfer mode', '--unchunked') |
609 | 234954d1 | Stavros Sachtouris | self.arguments['content_encoding'] = ValueArgument(\ |
610 | 234954d1 | Stavros Sachtouris | 'provide the object MIME content type', '--content-encoding') |
611 | 234954d1 | Stavros Sachtouris | self.arguments['content_disposition'] = ValueArgument(\ |
612 | 234954d1 | Stavros Sachtouris | 'provide the presentation style of the object',
|
613 | e3d4d442 | Stavros Sachtouris | '--content-disposition')
|
614 | 234954d1 | Stavros Sachtouris | self.arguments['content_type'] = ValueArgument(\ |
615 | 234954d1 | Stavros Sachtouris | 'create object with specific content type', '--content-type') |
616 | 234954d1 | Stavros Sachtouris | self.arguments['sharing'] = SharingArgument(parsed_name='--sharing', |
617 | 234954d1 | Stavros Sachtouris | help='define sharing object policy ' +\
|
618 | 234954d1 | Stavros Sachtouris | '( "read=user1,grp1,user2,... write=user1,grp2,...')
|
619 | 234954d1 | Stavros Sachtouris | self.arguments['public'] = FlagArgument(\ |
620 | 234954d1 | Stavros Sachtouris | 'make object publicly accessible', '--public') |
621 | 234954d1 | Stavros Sachtouris | self.arguments['poolsize'] = IntArgument(\ |
622 | 234954d1 | Stavros Sachtouris | 'set pool size', '--with-pool-size') |
623 | 234954d1 | Stavros Sachtouris | self.arguments['progress_bar'] = ProgressBarArgument(\ |
624 | f27ed9a0 | Stavros Sachtouris | 'do not show progress bar', '--no-progress-bar', False) |
625 | 7493ccb6 | Stavros Sachtouris | |
626 | 7493ccb6 | Stavros Sachtouris | def main(self, local_path, container____path__): |
627 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
628 | 7493ccb6 | Stavros Sachtouris | remote_path = local_path if self.path is None else self.path |
629 | e3d4d442 | Stavros Sachtouris | poolsize = self.get_argument('poolsize') |
630 | 624ee36f | Stavros Sachtouris | if poolsize is not None: |
631 | cccff590 | Stavros Sachtouris | self.client.POOL_SIZE = int(poolsize) |
632 | 234954d1 | Stavros Sachtouris | params = dict(content_encoding=self.get_argument('content_encoding'), |
633 | 234954d1 | Stavros Sachtouris | content_type=self.get_argument('content_type'), |
634 | 234954d1 | Stavros Sachtouris | content_disposition=self.get_argument('content_disposition'), |
635 | 234954d1 | Stavros Sachtouris | sharing=self.get_argument('sharing'), |
636 | 234954d1 | Stavros Sachtouris | public=self.get_argument('public')) |
637 | 7493ccb6 | Stavros Sachtouris | try:
|
638 | 852a22e7 | Stavros Sachtouris | progress_bar = self.arguments['progress_bar'] |
639 | 852a22e7 | Stavros Sachtouris | hash_bar = progress_bar.clone() |
640 | 7493ccb6 | Stavros Sachtouris | with open(local_path) as f: |
641 | e3d4d442 | Stavros Sachtouris | if self.get_argument('unchunked'): |
642 | 7493ccb6 | Stavros Sachtouris | self.client.upload_object_unchunked(remote_path, f,
|
643 | 234954d1 | Stavros Sachtouris | etag=self.get_argument('etag'), |
644 | 234954d1 | Stavros Sachtouris | withHashFile=self.get_argument('use_hashes'), |
645 | 234954d1 | Stavros Sachtouris | **params) |
646 | 7493ccb6 | Stavros Sachtouris | else:
|
647 | 852a22e7 | Stavros Sachtouris | hash_cb = hash_bar.get_generator(\ |
648 | 234954d1 | Stavros Sachtouris | 'Calculating block hashes')
|
649 | 234954d1 | Stavros Sachtouris | upload_cb = progress_bar.get_generator('Uploading')
|
650 | 234954d1 | Stavros Sachtouris | self.client.upload_object(remote_path, f,
|
651 | 852a22e7 | Stavros Sachtouris | hash_cb=hash_cb, |
652 | 852a22e7 | Stavros Sachtouris | upload_cb=upload_cb, |
653 | 852a22e7 | Stavros Sachtouris | **params) |
654 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
655 | 852a22e7 | Stavros Sachtouris | hash_bar.finish() |
656 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
657 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
658 | 852a22e7 | Stavros Sachtouris | hash_bar.finish() |
659 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
660 | 436f2ce1 | Stavros Sachtouris | except IOError as err: |
661 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
662 | 852a22e7 | Stavros Sachtouris | hash_bar.finish() |
663 | 852a22e7 | Stavros Sachtouris | raise CLIError(
|
664 | 852a22e7 | Stavros Sachtouris | message='Failed to read form file %s' % local_path,
|
665 | 234954d1 | Stavros Sachtouris | importance=2,
|
666 | 234954d1 | Stavros Sachtouris | details=unicode(err))
|
667 | f364f960 | Stavros Sachtouris | print 'Upload completed' |
668 | 7493ccb6 | Stavros Sachtouris | |
669 | 234954d1 | Stavros Sachtouris | |
670 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
671 | 9ceec15a | Stavros Sachtouris | class store_cat(_store_container_command): |
672 | 9ceec15a | Stavros Sachtouris | """Print a file to console"""
|
673 | 9ceec15a | Stavros Sachtouris | |
674 | 9ceec15a | Stavros Sachtouris | def __init__(self, arguments={}): |
675 | 9ceec15a | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
676 | 234954d1 | Stavros Sachtouris | self.arguments['range'] =\ |
677 | 234954d1 | Stavros Sachtouris | RangeArgument('show range of data', '--range') |
678 | 234954d1 | Stavros Sachtouris | self.arguments['if_match'] =\ |
679 | 234954d1 | Stavros Sachtouris | ValueArgument('show output if ETags match', '--if-match') |
680 | 234954d1 | Stavros Sachtouris | self.arguments['if_none_match'] =\ |
681 | 234954d1 | Stavros Sachtouris | ValueArgument('show output if ETags match', '--if-none-match') |
682 | 234954d1 | Stavros Sachtouris | self.arguments['if_modified_since'] =\ |
683 | 234954d1 | Stavros Sachtouris | DateArgument('show output modified since then',
|
684 | 9ceec15a | Stavros Sachtouris | '--if-modified-since')
|
685 | 234954d1 | Stavros Sachtouris | self.arguments['if_unmodified_since'] =\ |
686 | 234954d1 | Stavros Sachtouris | DateArgument('show output unmodified since then',
|
687 | 9ceec15a | Stavros Sachtouris | '--if-unmodified-since')
|
688 | 234954d1 | Stavros Sachtouris | self.arguments['object_version'] =\ |
689 | 234954d1 | Stavros Sachtouris | ValueArgument('get the specific version', '--object-version') |
690 | 9ceec15a | Stavros Sachtouris | |
691 | 9ceec15a | Stavros Sachtouris | def main(self, container___path): |
692 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
693 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
694 | 0238c167 | Stavros Sachtouris | try:
|
695 | 0238c167 | Stavros Sachtouris | self.client.download_object(self.path, stdout, |
696 | 9ceec15a | Stavros Sachtouris | range=self.get_argument('range'), |
697 | 9ceec15a | Stavros Sachtouris | version=self.get_argument('object_version'), |
698 | 9ceec15a | Stavros Sachtouris | if_match=self.get_argument('if_match'), |
699 | 9ceec15a | Stavros Sachtouris | if_none_match=self.get_argument('if_none_match'), |
700 | 9ceec15a | Stavros Sachtouris | if_modified_since=self.get_argument('if_modified_since'), |
701 | 9ceec15a | Stavros Sachtouris | if_unmodified_since=self.get_argument('if_unmodified_since')) |
702 | 0238c167 | Stavros Sachtouris | except ClientError as err: |
703 | 0238c167 | Stavros Sachtouris | raiseCLIError(err) |
704 | 9ceec15a | Stavros Sachtouris | |
705 | 234954d1 | Stavros Sachtouris | |
706 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
707 | 7493ccb6 | Stavros Sachtouris | class store_download(_store_container_command): |
708 | 7493ccb6 | Stavros Sachtouris | """Download a file"""
|
709 | 7493ccb6 | Stavros Sachtouris | |
710 | e3d4d442 | Stavros Sachtouris | def __init__(self, arguments={}): |
711 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
712 | e3d4d442 | Stavros Sachtouris | self.arguments['resume'] = FlagArgument(parsed_name='--resume', |
713 | 234954d1 | Stavros Sachtouris | help='Resume a previous download instead of overwritting it')
|
714 | 234954d1 | Stavros Sachtouris | self.arguments['range'] = RangeArgument(\ |
715 | 234954d1 | Stavros Sachtouris | 'show range of data', '--range') |
716 | 234954d1 | Stavros Sachtouris | self.arguments['if_match'] = ValueArgument(\ |
717 | 234954d1 | Stavros Sachtouris | 'show output if ETags match', '--if-match') |
718 | 234954d1 | Stavros Sachtouris | self.arguments['if_none_match'] = ValueArgument(\ |
719 | 234954d1 | Stavros Sachtouris | 'show output if ETags match', '--if-none-match') |
720 | 234954d1 | Stavros Sachtouris | self.arguments['if_modified_since'] = DateArgument(\ |
721 | 234954d1 | Stavros Sachtouris | 'show output modified since then', '--if-modified-since') |
722 | 234954d1 | Stavros Sachtouris | self.arguments['if_unmodified_since'] = DateArgument(\ |
723 | 234954d1 | Stavros Sachtouris | 'show output unmodified since then', '--if-unmodified-since') |
724 | 234954d1 | Stavros Sachtouris | self.arguments['object_version'] = ValueArgument(\ |
725 | 234954d1 | Stavros Sachtouris | 'get the specific version', '--object-version') |
726 | 234954d1 | Stavros Sachtouris | self.arguments['poolsize'] = IntArgument(\ |
727 | 234954d1 | Stavros Sachtouris | 'set pool size', '--with-pool-size') |
728 | 234954d1 | Stavros Sachtouris | self.arguments['progress_bar'] = ProgressBarArgument(\ |
729 | f27ed9a0 | Stavros Sachtouris | 'do not show progress bar', '--no-progress-bar', False) |
730 | 7493ccb6 | Stavros Sachtouris | |
731 | 9ceec15a | Stavros Sachtouris | def main(self, container___path, local_path): |
732 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
733 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
734 | 7493ccb6 | Stavros Sachtouris | |
735 | 234954d1 | Stavros Sachtouris | # setup output stream
|
736 | 7493ccb6 | Stavros Sachtouris | if local_path is None: |
737 | 7493ccb6 | Stavros Sachtouris | out = stdout |
738 | 7493ccb6 | Stavros Sachtouris | else:
|
739 | 7493ccb6 | Stavros Sachtouris | try:
|
740 | e3d4d442 | Stavros Sachtouris | if self.get_argument('resume'): |
741 | 234954d1 | Stavros Sachtouris | out = open(local_path, 'rwb+') |
742 | fbfee225 | Stavros Sachtouris | else:
|
743 | 234954d1 | Stavros Sachtouris | out = open(local_path, 'wb+') |
744 | 7493ccb6 | Stavros Sachtouris | except IOError as err: |
745 | 234954d1 | Stavros Sachtouris | raise CLIError(message='Cannot write to file %s - %s'\ |
746 | 234954d1 | Stavros Sachtouris | % (local_path, unicode(err)),
|
747 | 7493ccb6 | Stavros Sachtouris | importance=1)
|
748 | e3d4d442 | Stavros Sachtouris | poolsize = self.get_argument('poolsize') |
749 | 624ee36f | Stavros Sachtouris | if poolsize is not None: |
750 | cccff590 | Stavros Sachtouris | self.client.POOL_SIZE = int(poolsize) |
751 | b1713259 | Stavros Sachtouris | |
752 | 7493ccb6 | Stavros Sachtouris | try:
|
753 | 852a22e7 | Stavros Sachtouris | progress_bar = self.arguments['progress_bar'] |
754 | 852a22e7 | Stavros Sachtouris | download_cb = progress_bar.get_generator('Downloading')
|
755 | 234954d1 | Stavros Sachtouris | self.client.download_object(self.path, out, |
756 | 234954d1 | Stavros Sachtouris | download_cb=download_cb, |
757 | 234954d1 | Stavros Sachtouris | range=self.get_argument('range'), |
758 | 234954d1 | Stavros Sachtouris | version=self.get_argument('object_version'), |
759 | 234954d1 | Stavros Sachtouris | if_match=self.get_argument('if_match'), |
760 | 234954d1 | Stavros Sachtouris | resume=self.get_argument('resume'), |
761 | e3d4d442 | Stavros Sachtouris | if_none_match=self.get_argument('if_none_match'), |
762 | e3d4d442 | Stavros Sachtouris | if_modified_since=self.get_argument('if_modified_since'), |
763 | e3d4d442 | Stavros Sachtouris | if_unmodified_since=self.get_argument('if_unmodified_since')) |
764 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
765 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
766 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
767 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
768 | 7493ccb6 | Stavros Sachtouris | except KeyboardInterrupt: |
769 | f27ed9a0 | Stavros Sachtouris | from threading import enumerate as activethreads |
770 | f27ed9a0 | Stavros Sachtouris | stdout.write('\nFinishing active threads ')
|
771 | f27ed9a0 | Stavros Sachtouris | for thread in activethreads(): |
772 | f27ed9a0 | Stavros Sachtouris | stdout.flush() |
773 | f27ed9a0 | Stavros Sachtouris | try:
|
774 | f27ed9a0 | Stavros Sachtouris | thread.join() |
775 | f27ed9a0 | Stavros Sachtouris | stdout.write('.')
|
776 | f27ed9a0 | Stavros Sachtouris | except RuntimeError: |
777 | f27ed9a0 | Stavros Sachtouris | continue
|
778 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
779 | 7493ccb6 | Stavros Sachtouris | print('\ndownload canceled by user')
|
780 | 7493ccb6 | Stavros Sachtouris | if local_path is not None: |
781 | 624ee36f | Stavros Sachtouris | print('to resume, re-run with --resume')
|
782 | 852a22e7 | Stavros Sachtouris | except Exception as e: |
783 | 852a22e7 | Stavros Sachtouris | progress_bar.finish() |
784 | 852a22e7 | Stavros Sachtouris | raise e
|
785 | 7493ccb6 | Stavros Sachtouris | print
|
786 | 7493ccb6 | Stavros Sachtouris | |
787 | 234954d1 | Stavros Sachtouris | |
788 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
789 | 7493ccb6 | Stavros Sachtouris | class store_hashmap(_store_container_command): |
790 | 7493ccb6 | Stavros Sachtouris | """Get the hashmap of an object"""
|
791 | 7493ccb6 | Stavros Sachtouris | |
792 | e3d4d442 | Stavros Sachtouris | def __init__(self, arguments={}): |
793 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
794 | 234954d1 | Stavros Sachtouris | self.arguments['if_match'] =\ |
795 | 234954d1 | Stavros Sachtouris | ValueArgument('show output if ETags match', '--if-match') |
796 | 234954d1 | Stavros Sachtouris | self.arguments['if_none_match'] =\ |
797 | 234954d1 | Stavros Sachtouris | ValueArgument('show output if ETags match', '--if-none-match') |
798 | 234954d1 | Stavros Sachtouris | self.arguments['if_modified_since'] =\ |
799 | 234954d1 | Stavros Sachtouris | DateArgument('show output modified since then',
|
800 | e3d4d442 | Stavros Sachtouris | '--if-modified-since')
|
801 | 234954d1 | Stavros Sachtouris | self.arguments['if_unmodified_since'] =\ |
802 | 234954d1 | Stavros Sachtouris | DateArgument('show output unmodified since then',
|
803 | e3d4d442 | Stavros Sachtouris | '--if-unmodified-since')
|
804 | 234954d1 | Stavros Sachtouris | self.arguments['object_version'] =\ |
805 | 234954d1 | Stavros Sachtouris | ValueArgument('get the specific version', '--object-version') |
806 | 7493ccb6 | Stavros Sachtouris | |
807 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path): |
808 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
809 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
810 | 7493ccb6 | Stavros Sachtouris | try:
|
811 | 7493ccb6 | Stavros Sachtouris | data = self.client.get_object_hashmap(self.path, |
812 | e3d4d442 | Stavros Sachtouris | version=self.arguments('object_version'), |
813 | e3d4d442 | Stavros Sachtouris | if_match=self.arguments('if_match'), |
814 | e3d4d442 | Stavros Sachtouris | if_none_match=self.arguments('if_none_match'), |
815 | e3d4d442 | Stavros Sachtouris | if_modified_since=self.arguments('if_modified_since'), |
816 | e3d4d442 | Stavros Sachtouris | if_unmodified_since=self.arguments('if_unmodified_since')) |
817 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
818 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
819 | 7493ccb6 | Stavros Sachtouris | print_dict(data) |
820 | 7493ccb6 | Stavros Sachtouris | |
821 | 234954d1 | Stavros Sachtouris | |
822 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
823 | 7493ccb6 | Stavros Sachtouris | class store_delete(_store_container_command): |
824 | 7493ccb6 | Stavros Sachtouris | """Delete a container [or an object]"""
|
825 | 7493ccb6 | Stavros Sachtouris | |
826 | e3d4d442 | Stavros Sachtouris | def __init__(self, arguments={}): |
827 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
828 | 234954d1 | Stavros Sachtouris | self.arguments['until'] = DateArgument(\ |
829 | 234954d1 | Stavros Sachtouris | 'remove history until that date', '--until') |
830 | 234954d1 | Stavros Sachtouris | self.arguments['recursive'] = FlagArgument(\ |
831 | 234954d1 | Stavros Sachtouris | 'empty dir or container and delete (if dir)',
|
832 | 234954d1 | Stavros Sachtouris | ('-r', '--recursive')) |
833 | 234954d1 | Stavros Sachtouris | self.arguments['delimiter'] = DelimiterArgument(self, |
834 | 234954d1 | Stavros Sachtouris | parsed_name='--delimiter',
|
835 | 234954d1 | Stavros Sachtouris | help='delete objects prefixed with <object><delimiter>')
|
836 | 7493ccb6 | Stavros Sachtouris | |
837 | 7493ccb6 | Stavros Sachtouris | def main(self, container____path__): |
838 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
839 | 7493ccb6 | Stavros Sachtouris | try:
|
840 | 7493ccb6 | Stavros Sachtouris | if self.path is None: |
841 | e3d4d442 | Stavros Sachtouris | self.client.del_container(until=self.get_argument('until'), |
842 | e3d4d442 | Stavros Sachtouris | delimiter=self.get_argument('delimiter')) |
843 | 7493ccb6 | Stavros Sachtouris | else:
|
844 | 234954d1 | Stavros Sachtouris | # self.client.delete_object(self.path)
|
845 | 234954d1 | Stavros Sachtouris | self.client.del_object(self.path, |
846 | 234954d1 | Stavros Sachtouris | until=self.get_argument('until'), |
847 | e3d4d442 | Stavros Sachtouris | delimiter=self.get_argument('delimiter')) |
848 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
849 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
850 | 7493ccb6 | Stavros Sachtouris | |
851 | 234954d1 | Stavros Sachtouris | |
852 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
853 | 7493ccb6 | Stavros Sachtouris | class store_purge(_store_container_command): |
854 | 7493ccb6 | Stavros Sachtouris | """Purge a container"""
|
855 | 234954d1 | Stavros Sachtouris | |
856 | 7493ccb6 | Stavros Sachtouris | def main(self, container): |
857 | ebdecdc7 | Stavros Sachtouris | super(self.__class__, self).main(container) |
858 | 7493ccb6 | Stavros Sachtouris | try:
|
859 | 7493ccb6 | Stavros Sachtouris | self.client.purge_container()
|
860 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
861 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
862 | 7493ccb6 | Stavros Sachtouris | |
863 | 234954d1 | Stavros Sachtouris | |
864 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
865 | 7493ccb6 | Stavros Sachtouris | class store_publish(_store_container_command): |
866 | 7493ccb6 | Stavros Sachtouris | """Publish an object"""
|
867 | 7493ccb6 | Stavros Sachtouris | |
868 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path): |
869 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
870 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
871 | 7493ccb6 | Stavros Sachtouris | try:
|
872 | 7493ccb6 | Stavros Sachtouris | self.client.publish_object(self.path) |
873 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
874 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
875 | 7493ccb6 | Stavros Sachtouris | |
876 | 234954d1 | Stavros Sachtouris | |
877 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
878 | 7493ccb6 | Stavros Sachtouris | class store_unpublish(_store_container_command): |
879 | 7493ccb6 | Stavros Sachtouris | """Unpublish an object"""
|
880 | 7493ccb6 | Stavros Sachtouris | |
881 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path): |
882 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
883 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
884 | 7493ccb6 | Stavros Sachtouris | try:
|
885 | 7493ccb6 | Stavros Sachtouris | self.client.unpublish_object(self.path) |
886 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
887 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
888 | 7493ccb6 | Stavros Sachtouris | |
889 | 234954d1 | Stavros Sachtouris | |
890 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
891 | 3dabe5d2 | Stavros Sachtouris | class store_permissions(_store_container_command): |
892 | 3dabe5d2 | Stavros Sachtouris | """Get object read/write permissions """
|
893 | 7493ccb6 | Stavros Sachtouris | |
894 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path): |
895 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
896 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
897 | 7493ccb6 | Stavros Sachtouris | try:
|
898 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_object_sharing(self.path) |
899 | 7493ccb6 | Stavros Sachtouris | print_dict(reply) |
900 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
901 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
902 | 7493ccb6 | Stavros Sachtouris | |
903 | 234954d1 | Stavros Sachtouris | |
904 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
905 | 3dabe5d2 | Stavros Sachtouris | class store_setpermissions(_store_container_command): |
906 | 3dabe5d2 | Stavros Sachtouris | """Set sharing permissions """
|
907 | 7493ccb6 | Stavros Sachtouris | |
908 | 3dabe5d2 | Stavros Sachtouris | def format_permition_dict(self, permissions): |
909 | 7493ccb6 | Stavros Sachtouris | read = False
|
910 | 7493ccb6 | Stavros Sachtouris | write = False
|
911 | 3dabe5d2 | Stavros Sachtouris | for perms in permissions: |
912 | 7493ccb6 | Stavros Sachtouris | splstr = perms.split('=')
|
913 | 7493ccb6 | Stavros Sachtouris | if 'read' == splstr[0]: |
914 | 7493ccb6 | Stavros Sachtouris | read = [user_or_group.strip() \ |
915 | 7493ccb6 | Stavros Sachtouris | for user_or_group in splstr[1].split(',')] |
916 | 7493ccb6 | Stavros Sachtouris | elif 'write' == splstr[0]: |
917 | 7493ccb6 | Stavros Sachtouris | write = [user_or_group.strip() \ |
918 | 7493ccb6 | Stavros Sachtouris | for user_or_group in splstr[1].split(',')] |
919 | 7493ccb6 | Stavros Sachtouris | else:
|
920 | 7493ccb6 | Stavros Sachtouris | read = False
|
921 | 7493ccb6 | Stavros Sachtouris | write = False
|
922 | 7493ccb6 | Stavros Sachtouris | if not read and not write: |
923 | 234954d1 | Stavros Sachtouris | raise CLIError(importance=0, |
924 | 234954d1 | Stavros Sachtouris | message='Usage:\tread=<groups,users> write=<groups,users>')
|
925 | 234954d1 | Stavros Sachtouris | return (read, write)
|
926 | 7493ccb6 | Stavros Sachtouris | |
927 | 3dabe5d2 | Stavros Sachtouris | def main(self, container___path, *permissions): |
928 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
929 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
930 | 3dabe5d2 | Stavros Sachtouris | (read, write) = self.format_permition_dict(permissions)
|
931 | 7493ccb6 | Stavros Sachtouris | try:
|
932 | 7493ccb6 | Stavros Sachtouris | self.client.set_object_sharing(self.path, |
933 | 7493ccb6 | Stavros Sachtouris | read_permition=read, write_permition=write) |
934 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
935 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
936 | 7493ccb6 | Stavros Sachtouris | |
937 | 234954d1 | Stavros Sachtouris | |
938 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
939 | 3dabe5d2 | Stavros Sachtouris | class store_delpermissions(_store_container_command): |
940 | 3dabe5d2 | Stavros Sachtouris | """Delete all sharing permissions"""
|
941 | 7493ccb6 | Stavros Sachtouris | |
942 | 7493ccb6 | Stavros Sachtouris | def main(self, container___path): |
943 | 234954d1 | Stavros Sachtouris | super(self.__class__, |
944 | 234954d1 | Stavros Sachtouris | self).main(container___path, path_is_optional=False) |
945 | 7493ccb6 | Stavros Sachtouris | try:
|
946 | 7493ccb6 | Stavros Sachtouris | self.client.del_object_sharing(self.path) |
947 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
948 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
949 | 7493ccb6 | Stavros Sachtouris | |
950 | 234954d1 | Stavros Sachtouris | |
951 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
952 | 7493ccb6 | Stavros Sachtouris | class store_info(_store_container_command): |
953 | 7493ccb6 | Stavros Sachtouris | """Get information for account [, container [or object]]"""
|
954 | 7493ccb6 | Stavros Sachtouris | |
955 | 6ac7f90f | Stavros Sachtouris | def __init__(self, arguments={}): |
956 | 6ac7f90f | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
957 | 6ac7f90f | Stavros Sachtouris | self.arguments['object_version'] =\ |
958 | 6ac7f90f | Stavros Sachtouris | ValueArgument(parsed_name='--object-version',
|
959 | 6ac7f90f | Stavros Sachtouris | help='show specific version \ (applies only for objects)')
|
960 | 6ac7f90f | Stavros Sachtouris | |
961 | 7493ccb6 | Stavros Sachtouris | def main(self, container____path__=None): |
962 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
963 | 7493ccb6 | Stavros Sachtouris | try:
|
964 | 7493ccb6 | Stavros Sachtouris | if self.container is None: |
965 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_account_info()
|
966 | 7493ccb6 | Stavros Sachtouris | elif self.path is None: |
967 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_container_info(self.container) |
968 | 7493ccb6 | Stavros Sachtouris | else:
|
969 | 6ac7f90f | Stavros Sachtouris | reply = self.client.get_object_info(self.path, |
970 | 6ac7f90f | Stavros Sachtouris | version=self.get_argument('object_version')) |
971 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
972 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
973 | 7493ccb6 | Stavros Sachtouris | print_dict(reply) |
974 | 7493ccb6 | Stavros Sachtouris | |
975 | 234954d1 | Stavros Sachtouris | |
976 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
977 | 7493ccb6 | Stavros Sachtouris | class store_meta(_store_container_command): |
978 | 7493ccb6 | Stavros Sachtouris | """Get custom meta-content for account [, container [or object]]"""
|
979 | 7493ccb6 | Stavros Sachtouris | |
980 | 234954d1 | Stavros Sachtouris | def __init__(self, arguments={}): |
981 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
982 | 234954d1 | Stavros Sachtouris | self.arguments['detail'] =\ |
983 | 234954d1 | Stavros Sachtouris | FlagArgument('show detailed output', '-l') |
984 | 234954d1 | Stavros Sachtouris | self.arguments['until'] =\ |
985 | 234954d1 | Stavros Sachtouris | DateArgument('show metadata until then', '--until') |
986 | 234954d1 | Stavros Sachtouris | self.arguments['object_version'] =\ |
987 | 234954d1 | Stavros Sachtouris | ValueArgument(parsed_name='--object-version',
|
988 | 7493ccb6 | Stavros Sachtouris | help='show specific version \ (applies only for objects)')
|
989 | 7493ccb6 | Stavros Sachtouris | |
990 | 234954d1 | Stavros Sachtouris | def main(self, container____path__=None): |
991 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
992 | 7493ccb6 | Stavros Sachtouris | |
993 | e3d4d442 | Stavros Sachtouris | detail = self.get_argument('detail') |
994 | 7493ccb6 | Stavros Sachtouris | try:
|
995 | d486baec | Stavros Sachtouris | until = self.get_argument('until') |
996 | 7493ccb6 | Stavros Sachtouris | if self.container is None: |
997 | 7493ccb6 | Stavros Sachtouris | print(bold(self.client.account))
|
998 | 7493ccb6 | Stavros Sachtouris | if detail:
|
999 | 234954d1 | Stavros Sachtouris | reply = self.client.get_account_info(until=until)
|
1000 | 7493ccb6 | Stavros Sachtouris | else:
|
1001 | 234954d1 | Stavros Sachtouris | reply = self.client.get_account_meta(until=until)
|
1002 | 7493ccb6 | Stavros Sachtouris | reply = pretty_keys(reply, '-')
|
1003 | 7493ccb6 | Stavros Sachtouris | elif self.path is None: |
1004 | d486baec | Stavros Sachtouris | print(bold('%s: %s' % (self.client.account, self.container))) |
1005 | 7493ccb6 | Stavros Sachtouris | if detail:
|
1006 | 234954d1 | Stavros Sachtouris | reply = self.client.get_container_info(until=until)
|
1007 | 7493ccb6 | Stavros Sachtouris | else:
|
1008 | 234954d1 | Stavros Sachtouris | cmeta = self.client.get_container_meta(until=until)
|
1009 | 234954d1 | Stavros Sachtouris | ometa = self.client.get_container_object_meta(until=until)
|
1010 | 234954d1 | Stavros Sachtouris | reply = {'container-meta': pretty_keys(cmeta, '-'), |
1011 | 234954d1 | Stavros Sachtouris | 'object-meta': pretty_keys(ometa, '-')} |
1012 | 7493ccb6 | Stavros Sachtouris | else:
|
1013 | d486baec | Stavros Sachtouris | print(bold('%s: %s:%s'\
|
1014 | d486baec | Stavros Sachtouris | % (self.client.account, self.container, self.path))) |
1015 | 234954d1 | Stavros Sachtouris | version = self.get_argument('object_version') |
1016 | 7493ccb6 | Stavros Sachtouris | if detail:
|
1017 | 234954d1 | Stavros Sachtouris | reply = self.client.get_object_info(self.path, |
1018 | 234954d1 | Stavros Sachtouris | version=version) |
1019 | 7493ccb6 | Stavros Sachtouris | else:
|
1020 | 234954d1 | Stavros Sachtouris | reply = self.client.get_object_meta(self.path, |
1021 | 234954d1 | Stavros Sachtouris | version=version) |
1022 | 7493ccb6 | Stavros Sachtouris | reply = pretty_keys(pretty_keys(reply, '-'))
|
1023 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1024 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1025 | 7493ccb6 | Stavros Sachtouris | print_dict(reply) |
1026 | 7493ccb6 | Stavros Sachtouris | |
1027 | 234954d1 | Stavros Sachtouris | |
1028 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1029 | 7493ccb6 | Stavros Sachtouris | class store_setmeta(_store_container_command): |
1030 | 7493ccb6 | Stavros Sachtouris | """Set a new metadatum for account [, container [or object]]"""
|
1031 | 7493ccb6 | Stavros Sachtouris | |
1032 | 7493ccb6 | Stavros Sachtouris | def main(self, metakey___metaval, container____path__=None): |
1033 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
1034 | 7493ccb6 | Stavros Sachtouris | try:
|
1035 | 7493ccb6 | Stavros Sachtouris | metakey, metavalue = metakey___metaval.split(':')
|
1036 | 7493ccb6 | Stavros Sachtouris | except ValueError: |
1037 | 234954d1 | Stavros Sachtouris | raise CLIError(message='Usage: metakey:metavalue', importance=1) |
1038 | 7493ccb6 | Stavros Sachtouris | try:
|
1039 | 7493ccb6 | Stavros Sachtouris | if self.container is None: |
1040 | 234954d1 | Stavros Sachtouris | self.client.set_account_meta({metakey: metavalue})
|
1041 | 7493ccb6 | Stavros Sachtouris | elif self.path is None: |
1042 | 234954d1 | Stavros Sachtouris | self.client.set_container_meta({metakey: metavalue})
|
1043 | 7493ccb6 | Stavros Sachtouris | else:
|
1044 | 234954d1 | Stavros Sachtouris | self.client.set_object_meta(self.path, {metakey: metavalue}) |
1045 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1046 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1047 | 7493ccb6 | Stavros Sachtouris | |
1048 | 234954d1 | Stavros Sachtouris | |
1049 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1050 | 7493ccb6 | Stavros Sachtouris | class store_delmeta(_store_container_command): |
1051 | 7493ccb6 | Stavros Sachtouris | """Delete an existing metadatum of account [, container [or object]]"""
|
1052 | 7493ccb6 | Stavros Sachtouris | |
1053 | 7493ccb6 | Stavros Sachtouris | def main(self, metakey, container____path__=None): |
1054 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main(container____path__) |
1055 | 7493ccb6 | Stavros Sachtouris | try:
|
1056 | 7493ccb6 | Stavros Sachtouris | if self.container is None: |
1057 | 7493ccb6 | Stavros Sachtouris | self.client.del_account_meta(metakey)
|
1058 | 7493ccb6 | Stavros Sachtouris | elif self.path is None: |
1059 | 7493ccb6 | Stavros Sachtouris | self.client.del_container_meta(metakey)
|
1060 | 7493ccb6 | Stavros Sachtouris | else:
|
1061 | 7493ccb6 | Stavros Sachtouris | self.client.del_object_meta(metakey, self.path) |
1062 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1063 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1064 | 7493ccb6 | Stavros Sachtouris | |
1065 | 234954d1 | Stavros Sachtouris | |
1066 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1067 | 7493ccb6 | Stavros Sachtouris | class store_quota(_store_account_command): |
1068 | 7493ccb6 | Stavros Sachtouris | """Get quota for account [or container]"""
|
1069 | 7493ccb6 | Stavros Sachtouris | |
1070 | 234954d1 | Stavros Sachtouris | def main(self, container=None): |
1071 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1072 | 7493ccb6 | Stavros Sachtouris | try:
|
1073 | 7493ccb6 | Stavros Sachtouris | if container is None: |
1074 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_account_quota()
|
1075 | 7493ccb6 | Stavros Sachtouris | else:
|
1076 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_container_quota(container)
|
1077 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1078 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1079 | 7493ccb6 | Stavros Sachtouris | print_dict(reply) |
1080 | 7493ccb6 | Stavros Sachtouris | |
1081 | 234954d1 | Stavros Sachtouris | |
1082 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1083 | 7493ccb6 | Stavros Sachtouris | class store_setquota(_store_account_command): |
1084 | 7493ccb6 | Stavros Sachtouris | """Set new quota (in KB) for account [or container]"""
|
1085 | 7493ccb6 | Stavros Sachtouris | |
1086 | 234954d1 | Stavros Sachtouris | def main(self, quota, container=None): |
1087 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1088 | 7493ccb6 | Stavros Sachtouris | try:
|
1089 | 7493ccb6 | Stavros Sachtouris | if container is None: |
1090 | 7493ccb6 | Stavros Sachtouris | self.client.set_account_quota(quota)
|
1091 | 7493ccb6 | Stavros Sachtouris | else:
|
1092 | 7493ccb6 | Stavros Sachtouris | self.client.container = container
|
1093 | 7493ccb6 | Stavros Sachtouris | self.client.set_container_quota(quota)
|
1094 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1095 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1096 | 7493ccb6 | Stavros Sachtouris | |
1097 | 234954d1 | Stavros Sachtouris | |
1098 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1099 | 7493ccb6 | Stavros Sachtouris | class store_versioning(_store_account_command): |
1100 | 7493ccb6 | Stavros Sachtouris | """Get versioning for account [or container ]"""
|
1101 | 7493ccb6 | Stavros Sachtouris | |
1102 | 234954d1 | Stavros Sachtouris | def main(self, container=None): |
1103 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1104 | 7493ccb6 | Stavros Sachtouris | try:
|
1105 | 7493ccb6 | Stavros Sachtouris | if container is None: |
1106 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_account_versioning()
|
1107 | 7493ccb6 | Stavros Sachtouris | else:
|
1108 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_container_versioning(container)
|
1109 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1110 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1111 | 7493ccb6 | Stavros Sachtouris | print_dict(reply) |
1112 | 7493ccb6 | Stavros Sachtouris | |
1113 | 234954d1 | Stavros Sachtouris | |
1114 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1115 | 7493ccb6 | Stavros Sachtouris | class store_setversioning(_store_account_command): |
1116 | 7493ccb6 | Stavros Sachtouris | """Set new versioning (auto, none) for account [or container]"""
|
1117 | 7493ccb6 | Stavros Sachtouris | |
1118 | 234954d1 | Stavros Sachtouris | def main(self, versioning, container=None): |
1119 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1120 | 7493ccb6 | Stavros Sachtouris | try:
|
1121 | 7493ccb6 | Stavros Sachtouris | if container is None: |
1122 | 7493ccb6 | Stavros Sachtouris | self.client.set_account_versioning(versioning)
|
1123 | 7493ccb6 | Stavros Sachtouris | else:
|
1124 | 7493ccb6 | Stavros Sachtouris | self.client.container = container
|
1125 | 7493ccb6 | Stavros Sachtouris | self.client.set_container_versioning(versioning)
|
1126 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1127 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1128 | 7493ccb6 | Stavros Sachtouris | |
1129 | 234954d1 | Stavros Sachtouris | |
1130 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1131 | 7493ccb6 | Stavros Sachtouris | class store_group(_store_account_command): |
1132 | 7493ccb6 | Stavros Sachtouris | """Get user groups details for account"""
|
1133 | 7493ccb6 | Stavros Sachtouris | |
1134 | 7493ccb6 | Stavros Sachtouris | def main(self): |
1135 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1136 | 7493ccb6 | Stavros Sachtouris | try:
|
1137 | 7493ccb6 | Stavros Sachtouris | reply = self.client.get_account_group()
|
1138 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1139 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1140 | 7493ccb6 | Stavros Sachtouris | print_dict(reply) |
1141 | 7493ccb6 | Stavros Sachtouris | |
1142 | 234954d1 | Stavros Sachtouris | |
1143 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1144 | 7493ccb6 | Stavros Sachtouris | class store_setgroup(_store_account_command): |
1145 | 7493ccb6 | Stavros Sachtouris | """Create/update a new user group on account"""
|
1146 | 7493ccb6 | Stavros Sachtouris | |
1147 | 7493ccb6 | Stavros Sachtouris | def main(self, groupname, *users): |
1148 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1149 | 7493ccb6 | Stavros Sachtouris | try:
|
1150 | 7493ccb6 | Stavros Sachtouris | self.client.set_account_group(groupname, users)
|
1151 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1152 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1153 | 7493ccb6 | Stavros Sachtouris | |
1154 | 234954d1 | Stavros Sachtouris | |
1155 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1156 | 7493ccb6 | Stavros Sachtouris | class store_delgroup(_store_account_command): |
1157 | 7493ccb6 | Stavros Sachtouris | """Delete a user group on an account"""
|
1158 | 7493ccb6 | Stavros Sachtouris | |
1159 | 7493ccb6 | Stavros Sachtouris | def main(self, groupname): |
1160 | 7493ccb6 | Stavros Sachtouris | super(self.__class__, self).main() |
1161 | 7493ccb6 | Stavros Sachtouris | try:
|
1162 | 7493ccb6 | Stavros Sachtouris | self.client.del_account_group(groupname)
|
1163 | 7493ccb6 | Stavros Sachtouris | except ClientError as err: |
1164 | 7493ccb6 | Stavros Sachtouris | raiseCLIError(err) |
1165 | a23f6ffe | Stavros Sachtouris | |
1166 | 234954d1 | Stavros Sachtouris | |
1167 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1168 | a23f6ffe | Stavros Sachtouris | class store_sharers(_store_account_command): |
1169 | a23f6ffe | Stavros Sachtouris | """List the accounts that share objects with default account"""
|
1170 | a23f6ffe | Stavros Sachtouris | |
1171 | 234954d1 | Stavros Sachtouris | def __init__(self, arguments={}): |
1172 | e3d4d442 | Stavros Sachtouris | super(self.__class__, self).__init__(arguments) |
1173 | 234954d1 | Stavros Sachtouris | self.arguments['detail'] =\ |
1174 | 234954d1 | Stavros Sachtouris | FlagArgument('show detailed output', '-l') |
1175 | 234954d1 | Stavros Sachtouris | self.arguments['limit'] =\ |
1176 | 234954d1 | Stavros Sachtouris | IntArgument('show limited output', '--n', default=1000) |
1177 | 234954d1 | Stavros Sachtouris | self.arguments['marker'] =\ |
1178 | 234954d1 | Stavros Sachtouris | ValueArgument('show output greater then marker', '--marker') |
1179 | a23f6ffe | Stavros Sachtouris | |
1180 | a23f6ffe | Stavros Sachtouris | def main(self): |
1181 | a23f6ffe | Stavros Sachtouris | super(self.__class__, self).main() |
1182 | a23f6ffe | Stavros Sachtouris | try:
|
1183 | 234954d1 | Stavros Sachtouris | marker = self.get_argument('marker') |
1184 | 234954d1 | Stavros Sachtouris | accounts = self.client.get_sharing_accounts(marker=marker)
|
1185 | a23f6ffe | Stavros Sachtouris | except ClientError as err: |
1186 | a23f6ffe | Stavros Sachtouris | raiseCLIError(err) |
1187 | a23f6ffe | Stavros Sachtouris | |
1188 | a23f6ffe | Stavros Sachtouris | for acc in accounts: |
1189 | 234954d1 | Stavros Sachtouris | stdout.write(bold(acc['name']) + ' ') |
1190 | e3d4d442 | Stavros Sachtouris | if self.get_argument('detail'): |
1191 | f551841a | Stavros Sachtouris | print_dict(acc, exclude='name', ident=4) |
1192 | e3d4d442 | Stavros Sachtouris | if not self.get_argument('detail'): |
1193 | a23f6ffe | Stavros Sachtouris | print
|
1194 | 38dc5d2f | Stavros Sachtouris | |
1195 | 234954d1 | Stavros Sachtouris | |
1196 | d486baec | Stavros Sachtouris | @command(pithos_cmds)
|
1197 | 38dc5d2f | Stavros Sachtouris | class store_versions(_store_container_command): |
1198 | 38dc5d2f | Stavros Sachtouris | """Get the version list of an object"""
|
1199 | 38dc5d2f | Stavros Sachtouris | |
1200 | 38dc5d2f | Stavros Sachtouris | def main(self, container___path): |
1201 | 38dc5d2f | Stavros Sachtouris | super(store_versions, self).main(container___path) |
1202 | 38dc5d2f | Stavros Sachtouris | try:
|
1203 | 38dc5d2f | Stavros Sachtouris | versions = self.client.get_object_versionlist(self.path) |
1204 | 38dc5d2f | Stavros Sachtouris | except ClientError as err: |
1205 | 38dc5d2f | Stavros Sachtouris | raise CLIError(err)
|
1206 | 38dc5d2f | Stavros Sachtouris | |
1207 | 234954d1 | Stavros Sachtouris | print('%s:%s versions' % (self.container, self.path)) |
1208 | 38dc5d2f | Stavros Sachtouris | for vitem in versions: |
1209 | 38dc5d2f | Stavros Sachtouris | t = localtime(float(vitem[1])) |
1210 | 38dc5d2f | Stavros Sachtouris | vid = bold(unicode(vitem[0])) |
1211 | 234954d1 | Stavros Sachtouris | print('\t%s \t(%s)' % (vid, strftime('%d-%m-%Y %H:%M:%S', t))) |