New features
- Added a new command-line app, `ltd`, that provides subcommands for clients to work with the LSST the Docs API. This app is implemented with Click, and its documentation is automatically generated from the command-line help with `sphinx-click`.
The first subcommand is `ltd upload`, which lets a client upload a site to LTD as a new build.
This command includes special features for using the client from Travis CI (`ltd upload --travis` option) to populate the version information from the Travis environment.
Other flags allow `ltd upload` to become a no-op under certain circumstances (for example, skip uploads on pull requests) or arbitrarily (set `ltd upload --skip` or `export LTD_SKIP_UPLOAD=true`).
With this feature, LTD Conveyor effectively deprecates [LTD Mason](https://github.com/lsst-sqre/ltd-mason).
LTD Mason was the original uploader for LSST the Docs, but it was also designed around the idea of building the `LSST Science Pipelines` documentation as well (hence the term "mason").
Over time, we realized it is better to have a general purpose client and uploader for LSST the Docs (LTD Conveyor) and a dedicated tool for assembling the multi-package Sphinx documentation site (Documenteer).
- Added the `ltdconveyor.keeper` subpackage that widens the scope of LTD Conveyor to be a full-service library for building LTD clients, not just an S3 upload client.
- The `ltdconveyor.keeper.login.get_keeper_token` function lets you obtain a temporary auth token for the LTD Keeper API.
- The `ltdconveyor.keeper.build` module includes functions for performing the build upload handshake with the LTD Keeper API.
Other changes
- Removed Python 2.7 and 3.4 compatibility.
Now the codebase is entirely Python 3 (3.5, 3.6)-oriented.
- Completely reorganized Python namespace.
Now all S3 APIs are in `ltdconveyor.s3`.
Fastly APIs are available from `ltdconveyor.fastly`.
- Switched to using `setuptools_scm` to generate version strings for releases.
- Switched to using `extras_require` for development dependencies (`pip install -e ".[dev]"`).
This lets us exclusively coordinate dependencies in `setup.py`.
- Enable testing via `python setup.py test`.
Also upgrade the testing stack to `pytest` 3.5 and `pytest-flake8` 1.0.
- Compatibility updates to the Sphinx documentation infrastructure.
- Default to `acl=None` to support more AWS IAM users.
It turns out that not all IAM users with `PutObject` permissions also have permissions to set the `ACL` for an object.
We want to make it possible for many lightweight IAM users to upload to restricted sub-directories of the `lsst-the-docs` bucket, but it seems hard to make these users ACL grantees too.
We now seek an alternative:
- The `lsst-the-docs` bucket now has a PublicRead _bucket_ policy
- No ACL is set on individual objects.
Bugs fixed
- Changed assertions to `RuntimeErrors`.
Assertions shouldn't be used to raise exceptions in production code.