Porting Guide — boto v2.31.0

### Navigation

- index
- modules |
- boto v2.31.0 »

# Porting Guide

Boto supports Python versions 2.6, 2.7, 3.3, and 3.4. Python 3 support is on a per-module basis. This guide will help you to get started porting a Boto module to Python 3.

Please read the Contributing Guide before getting started.

## Compat Module

Boto ships with a `boto.compat` module that helps to abstract the differences between Python versions. A vendored version of the `six` module is exposed through `boto.compat.six`, as well as a handful of moved functions used throughout the codebase:

    # Import the six module
    from boto.compat import six

    # Other useful imports
    from boto.compat import BytesIO, StringIO
    from boto.compat import http_client
    from boto.compat import urlparse

Please check the `boto.compat` module before writing your own logic around specialized behavior for different Python versions. Feel free to add new functionality here, too.

## Porting Steps

Please follow the following steps when porting a module:

- Install Python versions and `pip install tox`

- Port your module to support Python 3. These help:

  - Six documentation
  - Porting to Python 3 An in-depth guide
  - Porting to Python 3 Redux

- Whitelist your module’s unit tests in `tests/test.py`

- Make sure unit tests pass by running `tox`

- Try running integration tests:

      tox tests/integration/yourmodule

      # You can also run against a specific Python version:
      tox -e py26 tests/integration/yourmodule

- Fix any failing tests. This is the fun part!

- If code you modified is not covered by tests, try to cover it with existing tests or write new tests. Here is how you can generate a coverage report in `cover/index.html`:

      # Run a test with coverage
      tox -e py33 -- default --with-coverage --cover-html --cover-package boto

- Update `README.rst` and `docs/source/index.rst` to label your module as supporting Python 3

- Submit a pull request!

Note: We try our best to clean up resources after a test runs, but you should double check that no resources are left after integration tests run. If they are, then you will be charged for them!

### Navigation

- index
- modules |
- boto v2.31.0 »