swiftly/cli/get.py
def cli_get_container_listing(context, path=None):
    """
    Performs a GET on the container as a listing request.

    See :py:mod:`swiftly.cli.get` for context usage information.

    See :py:class:`CLIGet` for more information.
    """
    path = path.strip('/') if path else None
    if not path or '/' in path:
        raise ReturnCode(
            'tried to get a container listing for non-container path %r' %
            path)
    context.suppress_container_name = True
    limit = context.query.get('limit')
    delimiter = context.query.get('delimiter')
    prefix = context.query.get('prefix')
    marker = context.query.get('marker')
    end_marker = context.query.get('end_marker')
    if context.raw:
        with context.client_manager.with_client() as client:
            status, reason, headers, contents = client.get_container(
                path, decode_json=False, headers=context.headers, limit=limit,
                marker=marker, end_marker=end_marker, query=context.query,
                cdn=context.cdn)
            if hasattr(contents, 'read'):
                contents = contents.read()
        if status // 100 != 2:
            if status == 404 and context.ignore_404:
                return
            raise ReturnCode(
                'listing container %r: %s %s' % (path, status, reason))
        with context.io_manager.with_stdout() as fp:
            if context.output_headers:
                context.write_headers(
                    fp, headers, context.muted_container_headers)
            fp.write(contents)
            fp.flush()
        return
    with context.client_manager.with_client() as client:
        status, reason, headers, contents = client.get_container(
            path, headers=context.headers, limit=limit, delimiter=delimiter,
            prefix=prefix, marker=marker, end_marker=end_marker,
            query=context.query, cdn=context.cdn)
        if status // 100 != 2:
            if status == 404 and context.ignore_404:
                return
            if hasattr(contents, 'read'):
                contents.read()
            raise ReturnCode(
                'listing container %r: %s %s' % (path, status, reason))
    if context.output_headers and not context.all_objects:
        with context.io_manager.with_stdout() as fp:
            context.write_headers(
                fp, headers, context.muted_container_headers)
    conc = Concurrency(context.concurrency)
    while contents:
        if context.all_objects:
            new_context = context.copy()
            new_context.query = dict(new_context.query)
            for remove in (
                    'limit', 'delimiter', 'prefix', 'marker', 'end_marker'):
                if remove in new_context.query:
                    del new_context.query[remove]
            for item in contents:
                if 'name' in item:
                    for (exc_type, exc_value, exc_tb, result) in \
                            six.itervalues(conc.get_results()):
                        if exc_value:
                            conc.join()
                            raise exc_value
                    new_path = path + '/' + item['name'].encode('utf8')
                    conc.spawn(new_path, cli_get, new_context, new_path)
        else:
            with context.io_manager.with_stdout() as fp:
                for item in contents:
                    if context.full:
                        fp.write('%13s %22s %32s %25s ' % (
                            item.get('bytes', '-'),
                            item.get('last_modified', '-')[:22].replace(
                                'T', ' '),
                            item.get('hash', '-'),
                            item.get('content_type', '-')))
                    fp.write(item.get(
                        'name', item.get('subdir')))
                    fp.write('\n')
                fp.flush()
        if limit:
            break
        marker = contents[-1].get('name', contents[-1].get('subdir', ''))
        with context.client_manager.with_client() as client:
            status, reason, headers, contents = client.get_container(
                path, headers=context.headers, limit=limit,
                delimiter=delimiter, prefix=prefix, end_marker=end_marker,
                marker=marker, query=context.query, cdn=context.cdn)
            if status // 100 != 2:
                if status == 404 and context.ignore_404:
                    return
                if hasattr(contents, 'read'):
                    contents.read()
                raise ReturnCode(
                    'listing container %r: %s %s' % (path, status, reason))
    conc.join()
    for (exc_type, exc_value, exc_tb, result) in \
        six.itervalues(conc.get_results()):
        if exc_value:
            raise exc_value
def cli_get_container_listing(context, path=None):
    """
    Performs a GET on the container as a listing request.

    See :py:mod:`swiftly.cli.get` for context usage information.

    See :py:class:`CLIGet` for more information.
    """
    path = path.strip('/') if path else None
    if not path or '/' in path:
        raise ReturnCode(
            'tried to get a container listing for non-container path %r' %
            path)
    context.suppress_container_name = True
    limit = context.query.get('limit')
    delimiter = context.query.get('delimiter')
    prefix = context.query.get('prefix')
    marker = context.query.get('marker')
    end_marker = context.query.get('end_marker')
    if context.raw:
        with context.client_manager.with_client() as client:
            status, reason, headers, contents = client.get_container(
                path, decode_json=False, headers=context.headers, limit=limit,
                marker=marker, end_marker=end_marker, query=context.query,
                cdn=context.cdn)
            if hasattr(contents, 'read'):
                contents = contents.read()
        if status // 100 != 2:
            if status == 404 and context.ignore_404:
                return
            raise ReturnCode(
                'listing container %r: %s %s' % (path, status, reason))
        with context.io_manager.with_stdout() as fp:
            if context.output_headers:
                context.write_headers(
                    fp, headers, context.muted_container_headers)
            fp.write(contents)
            fp.flush()
        return
    with context.client_manager.with_client() as client:
        status, reason, headers, contents = client.get_container(
            path, headers=context.headers, limit=limit, delimiter=delimiter,
            prefix=prefix, marker=marker, end_marker=end_marker,
            query=context.query, cdn=context.cdn)
        if status // 100 != 2:
            if status == 404 and context.ignore_404:
                return
            if hasattr(contents, 'read'):
                contents.read()
            raise ReturnCode(
                'listing container %r: %s %s' % (path, status, reason))
    if context.output_headers and not context.all_objects:
        with context.io_manager.with_stdout() as fp:
            context.write_headers(
                fp, headers, context.muted_container_headers)
    conc = Concurrency(context.concurrency)
    while contents:
        if context.all_objects:
            new_context = context.copy()
            new_context.query = dict(new_context.query)
            for remove in (
                    'limit', 'delimiter', 'prefix', 'marker', 'end_marker'):
                if remove in new_context.query:
                    del new_context.query[remove]
            for item in contents:
                if 'name' in item:
                    for (exc_type, exc_value, exc_tb, result) in \
                            six.itervalues(conc.get_results()):
                        if exc_value:
                            conc.join()
                            raise exc_value
                    new_path = path + '/' + item['name'].encode('utf8')
                    conc.spawn(new_path, cli_get, new_context, new_path)
        else:
            with context.io_manager.with_stdout() as fp:
                for item in contents:
                    if context.full:
                        fp.write('%13s %22s %32s %25s ' % (
                            item.get('bytes', '-'),
                            item.get('last_modified', '-')[:22].replace(
                                'T', ' '),
                            item.get('hash', '-'),
                            item.get('content_type', '-')))
                    fp.write(item.get(
                        'name', item.get('subdir')))
                    fp.write('\n')
                fp.flush()
        if limit:
            break
        marker = contents[-1].get('name', contents[-1].get('subdir', ''))
        with context.client_manager.with_client() as client:
            status, reason, headers, contents = client.get_container(
                path, headers=context.headers, limit=limit,
                delimiter=delimiter, prefix=prefix, end_marker=end_marker,
                marker=marker, query=context.query, cdn=context.cdn)
            if status // 100 != 2:
                if status == 404 and context.ignore_404:
                    return
                if hasattr(contents, 'read'):
                    contents.read()
                raise ReturnCode(
                    'listing container %r: %s %s' % (path, status, reason))
    conc.join()
    for (exc_type, exc_value, exc_tb, result) in \
        six.itervalues(conc.get_results()):
        if exc_value:
            raise exc_value
def cli_get_container_listing ( context , path = None ) : path = path . strip ( '/' ) if path else None if not path or '/' in path : raise ReturnCode ( 'tried to get a container listing for non-container path %r' % path ) context . suppress_container_name = True limit = context . query . get ( 'limit' ) delimiter = context . query . get ( 'delimiter' ) prefix = context . query . get ( 'prefix' ) marker = context . query . get ( 'marker' ) end_marker = context . query . get ( 'end_marker' ) if context . raw : with context . client_manager . with_client ( ) as client : status , reason , headers , contents = client . get_container ( path , decode_json = False , headers = context . headers , limit = limit , marker = marker , end_marker = end_marker , query = context . query , cdn = context . cdn ) if hasattr ( contents , 'read' ) : contents = contents . read ( ) if status // 100 != 2 : if status == 404 and context . ignore_404 : return raise ReturnCode ( 'listing container %r: %s %s' % ( path , status , reason ) ) with context . io_manager . with_stdout ( ) as fp : if context . output_headers : context . write_headers ( fp , headers , context . muted_container_headers ) fp . write ( contents ) fp . flush ( ) return with context . client_manager . with_client ( ) as client : status , reason , headers , contents = client . get_container ( path , headers = context . headers , limit = limit , delimiter = delimiter , prefix = prefix , marker = marker , end_marker = end_marker , query = context . query , cdn = context . cdn ) if status // 100 != 2 : if status == 404 and context . ignore_404 : return if hasattr ( contents , 'read' ) : contents . read ( ) raise ReturnCode ( 'listing container %r: %s %s' % ( path , status , reason ) ) if context . output_headers and not context . all_objects : with context . io_manager . with_stdout ( ) as fp : context . write_headers ( fp , headers , context . muted_container_headers ) conc = Concurrency ( context . concurrency ) while contents : if context . all_objects : new_context = context . copy ( ) new_context . query = dict ( new_context . query ) for remove in ( 'limit' , 'delimiter' , 'prefix' , 'marker' , 'end_marker' ) : if remove in new_context . query : del new_context . query [ remove ] for item in contents : if 'name' in item : for ( exc_type , exc_value , exc_tb , result ) in six . itervalues ( conc . get_results ( ) ) : if exc_value : conc . join ( ) raise exc_value new_path = path + '/' + item [ 'name' ] . encode ( 'utf8' ) conc . spawn ( new_path , cli_get , new_context , new_path ) else : with context . io_manager . with_stdout ( ) as fp : for item in contents : if context . full : fp . write ( '%13s %22s %32s %25s ' % ( item . get ( 'bytes' , '-' ) , item . get ( 'last_modified' , '-' ) [ : 22 ] . replace ( 'T' , ' ' ) , item . get ( 'hash' , '-' ) , item . get ( 'content_type' , '-' ) ) ) fp . write ( item . get ( 'name' , item . get ( 'subdir' ) ) ) fp . write ( '\n' ) fp . flush ( ) if limit : break marker = contents [ - 1 ] . get ( 'name' , contents [ - 1 ] . get ( 'subdir' , '' ) ) with context . client_manager . with_client ( ) as client : status , reason , headers , contents = client . get_container ( path , headers = context . headers , limit = limit , delimiter = delimiter , prefix = prefix , end_marker = end_marker , marker = marker , query = context . query , cdn = context . cdn ) if status // 100 != 2 : if status == 404 and context . ignore_404 : return if hasattr ( contents , 'read' ) : contents . read ( ) raise ReturnCode ( 'listing container %r: %s %s' % ( path , status , reason ) ) conc . join ( ) for ( exc_type , exc_value , exc_tb , result ) in six . itervalues ( conc . get_results ( ) ) : if exc_value : raise exc_value
Performs a GET on the container as a listing request.

    See :py:mod:`swiftly.cli.get` for context usage information.

    See :py:class:`CLIGet` for more information.
Performs a GET on the container as a listing request .