Revision 023d5ada kamaki/cli/commands/pithos.py
b/kamaki/cli/commands/pithos.py | ||
---|---|---|
48 | 48 |
CLISyntaxError) |
49 | 49 |
from kamaki.cli.argument import ( |
50 | 50 |
FlagArgument, IntArgument, ValueArgument, DateArgument, KeyValueArgument, |
51 |
ProgressBarArgument, RepeatableArgument, DataSizeArgument) |
|
51 |
ProgressBarArgument, RepeatableArgument, DataSizeArgument, |
|
52 |
UserAccountArgument) |
|
52 | 53 |
from kamaki.cli.utils import ( |
53 | 54 |
format_size, bold, get_path_size, guess_mime_type) |
54 | 55 |
|
... | ... | |
119 | 120 |
|
120 | 121 |
def __init__(self, arguments={}, auth_base=None, cloud=None): |
121 | 122 |
super(_pithos_account, self).__init__(arguments, auth_base, cloud) |
122 |
self['account'] = ValueArgument( |
|
123 |
'Use (a different) user uuid', ('-A', '--account')) |
|
123 |
self['account'] = UserAccountArgument( |
|
124 |
'A user UUID or name', ('-A', '--account')) |
|
125 |
self.arguments['account'].account_client = auth_base |
|
124 | 126 |
|
125 | 127 |
def print_objects(self, object_list): |
126 | 128 |
for index, obj in enumerate(object_list): |
... | ... | |
329 | 331 |
"""Modify the attributes of a file or directory object""" |
330 | 332 |
|
331 | 333 |
arguments = dict( |
332 |
publish=FlagArgument( |
|
333 |
'Make an object public (returns the public URL)', '--publish'), |
|
334 |
unpublish=FlagArgument( |
|
335 |
'Make an object unpublic', '--unpublish'), |
|
336 | 334 |
uuid_for_read_permission=RepeatableArgument( |
337 | 335 |
'Give read access to user/group (can be repeated, accumulative). ' |
338 | 336 |
'Format for users: UUID . Format for groups: UUID:GROUP . ' |
... | ... | |
349 | 347 |
'Delete object metadata (can be repeated)', '--metadata-del'), |
350 | 348 |
) |
351 | 349 |
required = [ |
352 |
'publish', 'unpublish', 'uuid_for_read_permission', 'metadata_to_set',
|
|
350 |
'uuid_for_read_permission', 'metadata_to_set', |
|
353 | 351 |
'uuid_for_write_permission', 'no_permissions', |
354 | 352 |
'metadata_key_to_delete'] |
355 | 353 |
|
... | ... | |
358 | 356 |
@errors.pithos.container |
359 | 357 |
@errors.pithos.object_path |
360 | 358 |
def _run(self): |
361 |
if self['publish']: |
|
362 |
self.writeln(self.client.publish_object(self.path)) |
|
363 |
if self['unpublish']: |
|
364 |
self.client.unpublish_object(self.path) |
|
365 | 359 |
if self['uuid_for_read_permission'] or self[ |
366 | 360 |
'uuid_for_write_permission']: |
367 | 361 |
perms = self.client.get_object_sharing(self.path) |
... | ... | |
398 | 392 |
self._run() |
399 | 393 |
|
400 | 394 |
|
395 |
@command(file_cmds) |
|
396 |
class file_publish(_pithos_container): |
|
397 |
"""Publish an object (creates a public URL)""" |
|
398 |
|
|
399 |
@errors.generic.all |
|
400 |
@errors.pithos.connection |
|
401 |
@errors.pithos.container |
|
402 |
@errors.pithos.object_path |
|
403 |
def _run(self): |
|
404 |
self.writeln(self.client.publish_object(self.path)) |
|
405 |
|
|
406 |
def main(self, path_or_url): |
|
407 |
super(self.__class__, self)._run(path_or_url) |
|
408 |
self._run() |
|
409 |
|
|
410 |
|
|
411 |
@command(file_cmds) |
|
412 |
class file_unpublish(_pithos_container): |
|
413 |
"""Unpublish an object""" |
|
414 |
|
|
415 |
@errors.generic.all |
|
416 |
@errors.pithos.connection |
|
417 |
@errors.pithos.container |
|
418 |
@errors.pithos.object_path |
|
419 |
def _run(self): |
|
420 |
self.client.unpublish_object(self.path) |
|
421 |
|
|
422 |
def main(self, path_or_url): |
|
423 |
super(self.__class__, self)._run(path_or_url) |
|
424 |
self._run() |
|
425 |
|
|
426 |
|
|
401 | 427 |
def _assert_path(self, path_or_url): |
402 | 428 |
if not self.path: |
403 | 429 |
raiseCLIError( |
... | ... | |
488 | 514 |
class _source_destination(_pithos_container, _optional_output_cmd): |
489 | 515 |
|
490 | 516 |
sd_arguments = dict( |
491 |
destination_user_uuid=ValueArgument(
|
|
492 |
'default: current user uuid', '--to-account'),
|
|
517 |
destination_user=UserAccountArgument(
|
|
518 |
'UUID or username, default: current user', '--to-account'),
|
|
493 | 519 |
destination_container=ValueArgument( |
494 | 520 |
'default: pithos', '--to-container'), |
495 | 521 |
source_prefix=FlagArgument( |
... | ... | |
508 | 534 |
self.arguments.update(self.sd_arguments) |
509 | 535 |
super(_source_destination, self).__init__( |
510 | 536 |
self.arguments, auth_base, cloud) |
537 |
self.arguments['destination_user'].account_client = self.auth_base |
|
511 | 538 |
|
512 | 539 |
def _report_transfer(self, src, dst, transfer_name): |
513 | 540 |
if not dst: |
... | ... | |
636 | 663 |
base_url=self.client.base_url, token=self.client.token, |
637 | 664 |
container=self[ |
638 | 665 |
'destination_container'] or dst_con or self.client.container, |
639 |
account=self[ |
|
640 |
'destination_user_uuid'] or dst_acc or self.account) |
|
666 |
account=self['destination_user'] or dst_acc or self.account) |
|
641 | 667 |
self.dst_path = dst_path or self.path |
642 | 668 |
|
643 | 669 |
|
... | ... | |
1640 | 1666 |
def _run(self): |
1641 | 1667 |
self._print(self.client.get_account_info(), self.print_dict) |
1642 | 1668 |
|
1643 |
def main(self, account_uuid=None): |
|
1669 |
def main(self, account_uuid_or_name=None):
|
|
1644 | 1670 |
super(self.__class__, self)._run() |
1645 |
if account_uuid: |
|
1646 |
self.client.account, self.account = account_uuid, account_uuid |
|
1671 |
if account_uuid_or_name: |
|
1672 |
arg = UserAccountArgument('Check', ' ') |
|
1673 |
arg.account_client = self.auth_base |
|
1674 |
arg.value = account_uuid_or_name |
|
1675 |
self.client.account, self.account = arg.value, arg.value |
|
1647 | 1676 |
self._run() |
1648 | 1677 |
|
1649 | 1678 |
|
... | ... | |
1721 | 1750 |
def main(self, groupname): |
1722 | 1751 |
super(self.__class__, self)._run() |
1723 | 1752 |
self._run(groupname) |
1724 |
|
|
1725 |
|
|
1726 |
# Deprecated commands |
|
1727 |
|
|
1728 |
@command(file_cmds) |
|
1729 |
class file_publish(_pithos_init): |
|
1730 |
"""DEPRECATED, replaced by [kamaki] file modify OBJECT --publish""" |
|
1731 |
|
|
1732 |
def main(self, *args): |
|
1733 |
raise CLISyntaxError('DEPRECATED', details=[ |
|
1734 |
'This command is replaced by:', |
|
1735 |
' [kamaki] file modify OBJECT --publish']) |
|
1736 |
|
|
1737 |
|
|
1738 |
@command(file_cmds) |
|
1739 |
class file_unpublish(_pithos_init): |
|
1740 |
"""DEPRECATED, replaced by [kamaki] file modify OBJECT --unpublish""" |
|
1741 |
|
|
1742 |
def main(self, *args): |
|
1743 |
raise CLISyntaxError('DEPRECATED', details=[ |
|
1744 |
'This command is replaced by:', |
|
1745 |
' [kamaki] file modify OBJECT --unpublish']) |
Also available in: Unified diff