def ListKeys(self, callback, prefix=None, marker=None, maxkeys=None):
    def _OnCompletedGet(response):
      if response.error:
        raise response.error

      # Expected XML format documented at http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGET.html
      # Example for a response with 2 keys:
      # <?xml version="1.0" encoding="UTF-8"?>
      # <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      #   <Contents>
      #     <Key>path/to/object1</Key>
      #   </Contents>
      #   <Contents>
      #     <Key>path/to/object2</Key>
      #   </Contents>
      # </ListBucketResult>
      ns = '{http://s3.amazonaws.com/doc/2006-03-01/}'
      item_element = '%sContents' % ns
      key_element = '%sKey' % ns

      bucket_list = ElementTree.XML(response.body)
      result = [item.find(key_element).text for item in bucket_list.iter(item_element)]
      callback(result)

    params = dict()
    if prefix:
      params['prefix'] = prefix
    if marker:
      params['marker'] = marker
    if maxkeys is not None:
      params['max-keys'] = maxkeys

    self._async_s3_conn.make_request('GET', bucket=self._bucket_name, key='', params=params, callback=_OnCompletedGet)
List files in a S3 bucket.
dataset/ETHPy150Open viewfinderco/viewfinder/backend/storage/s3_object_store.py/S3ObjectStore.ListKeys