Merge "Reformat help outputs"

This commit is contained in:
Jenkins 2013-08-26 23:42:48 +00:00 committed by Gerrit Code Review
commit 6c041058da

262
bin/swift

@ -67,13 +67,28 @@ def immediate_exit(signum, frame):
stderr.write(" Aborted\n")
os_exit(2)
st_delete_options = '''[-all] [--leave-segments]
[--object-threads <threads>]
[--container-threads <threads>]
<container> <object>
'''
st_delete_help = '''
delete [options] --all OR delete container [options] [object] [object] ...
Deletes everything in the account (with --all), or everything in a
container, or a list of objects depending on the args given. Segments of
manifest objects will be deleted as well, unless you specify the
--leave-segments option.'''.strip('\n')
Delete a container or objects within a container
Positional arguments:
<container> Name of container to delete from
<object> Name of object to delete. Specify multiple times
for multiple objects
Optional arguments:
--all Delete all containers and objects
--leave-segments Do not delete segments of manifest objects
--object-threads <threads>
Number of threads to use for deleting objects
--container-threads <threads>
Number of threads to use for deleting containers
'''.strip("\n")
def st_delete(parser, args, thread_manager):
@ -95,8 +110,9 @@ def st_delete(parser, args, thread_manager):
(options, args) = parse_args(parser, args)
args = args[1:]
if (not args and not options.yes_all) or (args and options.yes_all):
thread_manager.error('Usage: %s [options] %s',
basename(argv[0]), st_delete_help)
thread_manager.error('Usage: %s delete %s\n%s',
basename(argv[0]), st_delete_options,
st_delete_help)
return
def _delete_segment((container, obj), conn):
@ -218,17 +234,36 @@ def st_delete(parser, args, thread_manager):
for obj in args[1:]:
object_queue.put((args[0], obj))
st_download_options = '''[--all] [--marker] [--prefix <prefix>]
[--output <out_file>] [--object-threads <threads>]
[--container-threads <threads>] [--no-download]
<container> <object>
'''
st_download_help = '''
download --all [options] OR download container [options] [object] [object] ...
Downloads everything in the account (with --all), or everything in all
containers in the account matching a prefix (with --all and -p [--prefix]),
or everything in a container, or a subset of a container with -p
[--prefix], or a list of objects depending on the args given. -p or
--prefix is an option that will only download items beginning with that
prefix. For a single object download, you may use the -o [--output]
<filename> option to redirect the output to a specific file or if "-" then
just redirect to stdout.'''.strip('\n')
Download objects from containers
Positional arguments:
<container> Name of container to download from
<object> Name of object to download. Specify multiple times
for multiple objects
Optional arguments:
--all Indicates that you really want to download
everything in the account
--marker Marker to use when starting a container or account
download
--prefix <prefix> Only download items beginning with <prefix>
--output <out_file> For a single file download, stream the output to
<out_file>. Specifying "-" as <out_file> will
redirect to stdout
--object-threads <threads>
Number of threads to use for downloading objects
--container-threads <threads>
Number of threads to use for deleting containers
--no-download Perform download(s), but don't actually write anything
to disk
'''.strip("\n")
def st_download(parser, args, thread_manager):
@ -263,8 +298,8 @@ def st_download(parser, args, thread_manager):
if options.out_file and len(args) != 2:
exit('-o option only allowed for single file downloads')
if (not args and not options.yes_all) or (args and options.yes_all):
thread_manager.error('Usage: %s [options] %s', basename(argv[0]),
st_download_help)
thread_manager.error('Usage: %s download %s\n%s', basename(argv[0]),
st_download_options, st_download_help)
return
def _download_object(queue_arg, conn):
@ -448,16 +483,23 @@ def prt_bytes(bytes, human_flag):
return(bytes)
st_list_options = '''[--long] [--lh] [--totals]
[--container-threads <threads>]
'''
st_list_help = '''
list [options] [container]
Lists the containers for the account or the objects for a container. -p or
--prefix is an option that will only list items beginning with that prefix.
-l produces output formatted like 'ls -l' and --lh like 'ls -lh'.
-t used with -l or --lh, only report totals
-d or --delimiter is option (for container listings only) that will roll up
items with the given delimiter (see http://docs.openstack.org/
api/openstack-object-storage/1.0/content/list-objects.html)
Lists the containers for the account or the objects for a container
Positional arguments:
<container> Name of container to list object in
Optional arguments:
--long Long listing format, similar to ls -l
--lh Report sizes in human readable format similar to ls -lh
--totals Used with -l or --ls, only report totals
--prefix Only list items beginning with the prefix
--delimiter Roll up items with the given delimiter. For containers
only. See OpenStack Swift API documentation for what
this means.
'''.strip('\n')
@ -470,7 +512,8 @@ def st_list(parser, args, thread_manager):
"similar to ls -lh switch, but -h taken", action='store_true',
default=False)
parser.add_option(
'-t', dest='totals', help='used with -l or --ls, only report totals',
'-t', '--totals', dest='totals', help='used with -l or --ls, '
'only report totals',
action='store_true', default=False)
parser.add_option(
'-p', '--prefix', dest='prefix',
@ -484,8 +527,8 @@ def st_list(parser, args, thread_manager):
if options.delimiter and not args:
exit('-d option only allowed for container listings')
if len(args) > 1 or len(args) == 1 and args[0].find('/') >= 0:
thread_manager.error('Usage: %s [options] %s', basename(argv[0]),
st_list_help)
thread_manager.error('Usage: %s list %s\n%s', basename(argv[0]),
st_list_options, st_list_help)
return
conn = get_conn(options)
@ -559,11 +602,21 @@ def st_list(parser, args, thread_manager):
else:
thread_manager.error('Container %r not found', args[0])
st_stat_options = '''[--lh]
<container> <object>
'''
st_stat_help = '''
stat [container] [object]
Displays information for the account, container, or object depending on the
args given (if any). --lh will print number of objects and total sizes
like 'list --lh' noting number of objs a multiple of 1024'''.strip('\n')
Displays information for the account, container, or object
Positional arguments:
<container> Name of container to stat from
<object> Name of object to stat. Specify multiple times
for multiple objects
Optional arguments:
--lh Report sizes in human readable format similar to ls -lh
'''.strip('\n')
def st_stat(parser, args, thread_manager):
@ -687,19 +740,38 @@ Write ACL: %s
raise
thread_manager.error("Object %s/%s not found", args[0], args[1])
else:
thread_manager.error('Usage: %s [options] %s', basename(argv[0]),
st_stat_help)
thread_manager.error('Usage: %s stat %s\n%s', basename(argv[0]),
st_stat_options, st_stat_help)
st_post_options = '''[--read-acl <acl>] [--write-acl <acl>] [--sync-to]
[--sync-key <sync-key>] [--meta <name:value>]
[--header <header>]
<container> <object>
'''
st_post_help = '''
post [options] [container] [object]
Updates meta information for the account, container, or object depending on
the args given. If the container is not found, it will be created
automatically; but this is not true for accounts and objects. Containers
also allow the -r (or --read-acl) and -w (or --write-acl) options. The -m
or --meta option is allowed on all and used to define the user meta data
items to set in the form Name:Value. This option can be repeated. Example:
post -m Color:Blue -m Size:Large'''.strip('\n')
Updates meta information for the account, container, or object.
If the container is not found, it will be created automatically.
Positional arguments:
<container> Name of container to post to
<object> Name of object to post. Specify multiple times
for multiple objects
Optional arguments:
--read-acl <acl> Read ACL for containers. Quick summary of ACL syntax:
.r:*, .r:-.example.com, .r:www.example.com, account1,
account2:user2
--write-acl <acl> Write ACL for containers. Quick summary of ACL syntax:
account1 account2:user2
--sync-to <sync-to> Sync To for containers, for multi-cluster replication
--sync-key <sync-key> Sync Key for containers, for multi-cluster replication
--meta <name:value> Sets a meta data item. This option may be repeated.
Example: -m Color:Blue -m Size:Large
--header <header> Set request headers. This option may be repeated.
Example -H "content-type:text/plain"
'''.strip('\n')
def st_post(parser, args, thread_manager):
@ -724,7 +796,7 @@ def st_post(parser, args, thread_manager):
parser.add_option(
'-H', '--header', action='append', dest='header',
default=[], help='Set request headers with the syntax header:value. '
' This option may be repeated. Example -H content-type:text/plain '
' This option may be repeated. Example -H "content-type:text/plain" '
'-H "Content-Length: 4000"')
(options, args) = parse_args(parser, args)
args = args[1:]
@ -773,18 +845,49 @@ def st_post(parser, args, thread_manager):
raise
thread_manager.error("Object '%s/%s' not found", args[0], args[1])
else:
thread_manager.error('Usage: %s [options] %s', basename(argv[0]),
st_post_help)
thread_manager.error('Usage: %s post %s\n%s', basename(argv[0]),
st_post_options, st_post_help)
st_upload_options = '''[--changed] [--segment-size <size>]
[--segment-container <container>] [--leave-segments]
[--object-threads <thread>] [--segment-threads <threads>]
[--header <header>] [--use-slo]
<container> <file_or_directory>
'''
st_upload_help = '''
upload [options] container file_or_directory [file_or_directory] [...]
Uploads to the given container the files and directories specified by the
remaining args. -c or --changed is an option that will only upload files
that have changed since the last upload. -S <size> or --segment-size <size>
will upload the files in segments no larger than size. -C <container> or
--segment-container <container> will specify the location of the segments
to <container>. --leave-segments are options as well (see --help for more).
Uploads specified files and directories to the given container
Positional arguments:
<container> Name of container to upload to
<file_or_directory> Name of file or directory to upload. Specify multiple
times for multiple uploads
Optional arguments:
--changed Only upload files that have changed since the last
upload
--segment-size <size> Upload files in segments no larger than <size> and
then create a "manifest" file that will download all
the segments as if it were the original file
--segment-container <container>
Upload the segments into the specified container. If
not specified, the segments will be uploaded to a
<container>_segments container so as to not pollute the
main <container> listings.
--leave-segments Indicates that you want the older segments of manifest
objects left alone (in the case of overwrites)
--object-threads <threads>
Number of threads to use for uploading full objects.
Default is 10.
--segment-threads <threads>
Number of threads to use for uploading object segments.
Default is 10.
--header <header> Set request headers with the syntax header:value.
This option may be repeated.
Example -H "content-type:text/plain".
--use-slo When used in conjunction with --segment-size will
create a Static Large Object instead of the default
Dynamic Large Object.
'''.strip('\n')
@ -818,17 +921,19 @@ def st_upload(parser, args, thread_manager):
parser.add_option(
'-H', '--header', action='append', dest='header',
default=[], help='Set request headers with the syntax header:value. '
' This option may be repeated. Example -H content-type:text/plain '
' This option may be repeated. Example -H "content-type:text/plain" '
'-H "Content-Length: 4000"')
parser.add_option('', '--use-slo', action='store_true', default=False,
help='When used in conjuction with --segment-size will '
'create a Static Large Object instead of the default '
'Dynamic Large Object.')
parser.add_option(
'', '--use-slo', action='store_true', default=False,
help='When used in conjunction with --segment-size will '
'create a Static Large Object instead of the default '
'Dynamic Large Object.')
(options, args) = parse_args(parser, args)
args = args[1:]
if len(args) < 2:
thread_manager.error(
'Usage: %s [options] %s', basename(argv[0]), st_upload_help)
'Usage: %s upload %s\n%s', basename(argv[0]), st_upload_options,
st_upload_help)
return
def _segment_job(job, conn):
@ -1160,18 +1265,37 @@ if __name__ == '__main__':
version = version_info.version_string()
parser = OptionParser(version='%%prog %s' % version,
usage='''
Usage: %%prog <command> [options] [args]
usage: %%prog [--version] [--help] [--snet] [--verbose]
[--debug] [--quiet] [--auth <auth_url>]
[--auth-version <auth_version>] [--user <username>]
[--key <api_key>] [--retries <num_retries>]
[--os-username <auth-user-name>] [--os-password <auth-password>]
[--os-tenant-id <auth-tenant-id>]
[--os-tenant-name <auth-tenant-name>]
[--os-auth-url <auth-url>] [--os-auth-token <auth-token>]
[--os-storage-url <storage-url>] [--os-region-name <region-name>]
[--os-service-type <service-type>]
[--os-endpoint-type <endpoint-type>]
[--os-cacert <ca-certificate>] [--insecure]
[--no-ssl-compression]
<subcommand> ...
Commands:
%(st_stat_help)s
%(st_list_help)s
%(st_upload_help)s
%(st_post_help)s
%(st_download_help)s
%(st_delete_help)s
Command-line interface to the OpenStack Swift API.
Positional arguments:
<subcommand>
delete Delete a container or objects within a container
downlad Download objects from containers
list Lists the containers for the account or the objects
for a container
post Updates meta information for the account, container,
or object
stat Displays information for the account, container,
or object
upload Uploads files or directories to the given container
Examples:
%%prog -A https://auth.api.rackspacecloud.com/v1.0 -U user -K key stat -v
%%prog -A https://auth.api.rackspacecloud.com/v1.0 -U user -K api_key stat -v
%%prog --os-auth-url https://api.example.com/v2.0 --os-tenant-name tenant \\
--os-username user --os-password password list