What's This All About?
======================

This directory contains the beginnings of what is hoped will be the
new core of boto.  We want to move from using httplib to using
requests.  We also want to offer full support for Python 2.6, 2.7, and
3.x.  This is a pretty big change and will require some time to roll
out but this module provides a starting point.

What you will find in this module:

* auth.py provides a SigV2 authentication packages as a args hook for requests.
* credentials.py provides a way of finding AWS credentials (see below).
* dictresponse.py provides a generic response handler that parses XML responses
  and returns them as nested Python data structures.
* service.py provides a simple example of a service that actually makes an EC2
  request and returns a response.

Credentials
===========

Credentials are being handled a bit differently here.  The following
describes the order of search for credentials:

1. If your local environment for has ACCESS_KEY and SECRET_KEY variables
   defined, these will be used.

2. If your local environment has AWS_CREDENTIAL_FILE defined, it is assumed
   that it will be a config file with entries like this:

   [default]
   access_key = xxxxxxxxxxxxxxxx
   sercret_key = xxxxxxxxxxxxxxxxxx

   [test]
   access_key = yyyyyyyyyyyyyy
   secret_key = yyyyyyyyyyyyyyyyyy

   Each section in the config file is called a persona and you can reference
   a particular persona by name when instantiating a Service class.

3. If a standard boto config file is found that contains credentials, those
   will be used.

4. If temporary credentials for an IAM Role are found in the instance
   metadata of an EC2 instance, these credentials will be used.

Trying Things Out
=================
To try this code out, cd to the directory containing the core module.

    >>> import core.service
    >>> s = core.service.Service()
    >>> s.describe_instances()

This code should return a Python data structure containing information
about your currently running EC2 instances.  This example should run in
Python 2.6.x, 2.7.x and Python 3.x.