Remove additional packages (#154)

diff --git a/additional_packages/README.md b/additional_packages/README.md
deleted file mode 100644
index 827c548..0000000
--- a/additional_packages/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Additional packages for Google Auth Library Python
-
-This folder contains seperately distributed auxilliary packages for use
-with google-auth.
diff --git a/additional_packages/google_auth_httplib2/.coveragerc b/additional_packages/google_auth_httplib2/.coveragerc
deleted file mode 100644
index c44dd8e..0000000
--- a/additional_packages/google_auth_httplib2/.coveragerc
+++ /dev/null
@@ -1,13 +0,0 @@
-[run]
-branch = True
-
-[report]
-omit =
-    */conftest.py
-exclude_lines =
-    # Re-enable the standard pragma
-    pragma: NO COVER
-    # Ignore debug-only repr
-    def __repr__
-    # Don't complain if tests don't hit defensive assertion code:
-    raise NotImplementedError
diff --git a/additional_packages/google_auth_httplib2/LICENSE b/additional_packages/google_auth_httplib2/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/additional_packages/google_auth_httplib2/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/additional_packages/google_auth_httplib2/MANIFEST.in b/additional_packages/google_auth_httplib2/MANIFEST.in
deleted file mode 100644
index aac7fe1..0000000
--- a/additional_packages/google_auth_httplib2/MANIFEST.in
+++ /dev/null
@@ -1,2 +0,0 @@
-include README.rst LICENSE
-recursive-include tests *
diff --git a/additional_packages/google_auth_httplib2/README.rst b/additional_packages/google_auth_httplib2/README.rst
deleted file mode 100644
index 15477d0..0000000
--- a/additional_packages/google_auth_httplib2/README.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-Httplib2 Transport for Google Auth
-==================================
-
-|pypi|
-
-This library provides an `httplib2`_ transport for `google-auth`_.
-
-.. note:: ``httplib`` has lots of problems such as lack of threadsafety and
-    and insecure usage of TLS. Using it is highly discouraged. This
-    library is intended to help existing users of ``oauth2client`` migrate to
-    ``google-auth``.
-
-.. |pypi| image:: https://img.shields.io/pypi/v/google-auth-httplib2.svg
-   :target: https://pypi.python.org/pypi/google-auth-httplib2
-
-.. _httplib2: https://github.com/httplib2/httplib2
-.. _google-auth: https://github.com/GoogleCloudPlatform/google-auth
-
-Installing
-----------
-
-You can install using `pip`_::
-
-    $ pip install google-auth-httplib2
-
-.. _pip: https://pip.pypa.io/en/stable/
-
-License
--------
-
-Apache 2.0 - See `the LICENSE`_ for more information.
-
-.. _the LICENSE: https://github.com/GoogleCloudPlatform/google-auth-library-python/blob/master/LICENSE
diff --git a/additional_packages/google_auth_httplib2/google_auth_httplib2.py b/additional_packages/google_auth_httplib2/google_auth_httplib2.py
deleted file mode 100644
index 866841b..0000000
--- a/additional_packages/google_auth_httplib2/google_auth_httplib2.py
+++ /dev/null
@@ -1,235 +0,0 @@
-# Copyright 2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Transport adapter for httplib2."""
-
-from __future__ import absolute_import
-
-import logging
-
-from google.auth import exceptions
-from google.auth import transport
-import httplib2
-
-
-_LOGGER = logging.getLogger(__name__)
-# Properties present in file-like streams / buffers.
-_STREAM_PROPERTIES = ('read', 'seek', 'tell')
-
-
-class _Response(transport.Response):
-    """httplib2 transport response adapter.
-
-    Args:
-        response (httplib2.Response): The raw httplib2 response.
-        data (bytes): The response body.
-    """
-    def __init__(self, response, data):
-        self._response = response
-        self._data = data
-
-    @property
-    def status(self):
-        """int: The HTTP status code."""
-        return self._response.status
-
-    @property
-    def headers(self):
-        """Mapping[str, str]: The HTTP response headers."""
-        return dict(self._response)
-
-    @property
-    def data(self):
-        """bytes: The response body."""
-        return self._data
-
-
-class Request(transport.Request):
-    """httplib2 request adapter.
-
-    This class is used internally for making requests using various transports
-    in a consistent way. If you use :class:`AuthorizedHttp` you do not need
-    to construct or use this class directly.
-
-    This class can be useful if you want to manually refresh a
-    :class:`~google.auth.credentials.Credentials` instance::
-
-        import google.auth.transport.httplib2
-        import httplib2
-
-        http = httplib2.Http()
-        request = google.auth.transport.httplib2.Request(http)
-
-        credentials.refresh(request)
-
-    Args:
-        http (httplib2.Http): The underlying http object to use to make
-            requests.
-
-    .. automethod:: __call__
-    """
-    def __init__(self, http):
-        self.http = http
-
-    def __call__(self, url, method='GET', body=None, headers=None,
-                 timeout=None, **kwargs):
-        """Make an HTTP request using httplib2.
-
-        Args:
-            url (str): The URI to be requested.
-            method (str): The HTTP method to use for the request. Defaults
-                to 'GET'.
-            body (bytes): The payload / body in HTTP request.
-            headers (Mapping[str, str]): Request headers.
-            timeout (Optional[int]): The number of seconds to wait for a
-                response from the server. This is ignored by httplib2 and will
-                issue a warning.
-            kwargs: Additional arguments passed throught to the underlying
-                :meth:`httplib2.Http.request` method.
-
-        Returns:
-            google.auth.transport.Response: The HTTP response.
-
-        Raises:
-            google.auth.exceptions.TransportError: If any exception occurred.
-        """
-        if timeout is not None:
-            _LOGGER.warning(
-                'httplib2 transport does not support per-request timeout. '
-                'Set the timeout when constructing the httplib2.Http instance.'
-            )
-
-        try:
-            _LOGGER.debug('Making request: %s %s', method, url)
-            response, data = self.http.request(
-                url, method=method, body=body, headers=headers, **kwargs)
-            return _Response(response, data)
-        except httplib2.HttpLib2Error as exc:
-            raise exceptions.TransportError(exc)
-
-
-def _make_default_http():
-    """Returns a default httplib2.Http instance."""
-    return httplib2.Http()
-
-
-class AuthorizedHttp(object):
-    """A httplib2 HTTP class with credentials.
-
-    This class is used to perform requests to API endpoints that require
-    authorization::
-
-        from google.auth.transport._httplib2 import AuthorizedHttp
-
-        authed_http = AuthorizedHttp(credentials)
-
-        response = authed_http.request(
-            'https://www.googleapis.com/storage/v1/b')
-
-    This class implements :meth:`request` in the same way as
-    :class:`httplib2.Http` and can usually be used just like any other
-    instance of :class:``httplib2.Http`.
-
-    The underlying :meth:`request` implementation handles adding the
-    credentials' headers to the request and refreshing credentials as needed.
-    """
-    def __init__(self, credentials, http=None,
-                 refresh_status_codes=transport.DEFAULT_REFRESH_STATUS_CODES,
-                 max_refresh_attempts=transport.DEFAULT_MAX_REFRESH_ATTEMPTS):
-        """
-        Args:
-            credentials (google.auth.credentials.Credentials): The credentials
-                to add to the request.
-            http (httplib2.Http): The underlying HTTP object to
-                use to make requests. If not specified, a
-                :class:`httplib2.Http` instance will be constructed.
-            refresh_status_codes (Sequence[int]): Which HTTP status codes
-                indicate that credentials should be refreshed and the request
-                should be retried.
-            max_refresh_attempts (int): The maximum number of times to attempt
-                to refresh the credentials and retry the request.
-        """
-
-        if http is None:
-            http = _make_default_http()
-
-        self.http = http
-        self.credentials = credentials
-        self._refresh_status_codes = refresh_status_codes
-        self._max_refresh_attempts = max_refresh_attempts
-        # Request instance used by internal methods (for example,
-        # credentials.refresh).
-        self._request = Request(self.http)
-
-    def request(self, uri, method='GET', body=None, headers=None,
-                **kwargs):
-        """Implementation of httplib2's Http.request."""
-
-        _credential_refresh_attempt = kwargs.pop(
-            '_credential_refresh_attempt', 0)
-
-        # Make a copy of the headers. They will be modified by the credentials
-        # and we want to pass the original headers if we recurse.
-        request_headers = headers.copy() if headers is not None else {}
-
-        self.credentials.before_request(
-            self._request, method, uri, request_headers)
-
-        # Check if the body is a file-like stream, and if so, save the body
-        # stream position so that it can be restored in case of refresh.
-        body_stream_position = None
-        if all(getattr(body, stream_prop, None) for stream_prop in
-               _STREAM_PROPERTIES):
-            body_stream_position = body.tell()
-
-        # Make the request.
-        response, content = self.http.request(
-            uri, method, body=body, headers=request_headers, **kwargs)
-
-        # If the response indicated that the credentials needed to be
-        # refreshed, then refresh the credentials and re-attempt the
-        # request.
-        # A stored token may expire between the time it is retrieved and
-        # the time the request is made, so we may need to try twice.
-        if (response.status in self._refresh_status_codes
-                and _credential_refresh_attempt < self._max_refresh_attempts):
-
-            _LOGGER.info(
-                'Refreshing credentials due to a %s response. Attempt %s/%s.',
-                response.status, _credential_refresh_attempt + 1,
-                self._max_refresh_attempts)
-
-            self.credentials.refresh(self._request)
-
-            # Restore the body's stream position if needed.
-            if body_stream_position is not None:
-                body.seek(body_stream_position)
-
-            # Recurse. Pass in the original headers, not our modified set.
-            return self.request(
-                uri, method, body=body, headers=headers,
-                _credential_refresh_attempt=_credential_refresh_attempt + 1,
-                **kwargs)
-
-        return response, content
-
-    @property
-    def connections(self):
-        """Proxy to httplib2.Http.connections."""
-        return self.http.connections
-
-    @connections.setter
-    def connections(self, value):
-        """Proxy to httplib2.Http.connections."""
-        self.http.connections = value
diff --git a/additional_packages/google_auth_httplib2/setup.cfg b/additional_packages/google_auth_httplib2/setup.cfg
deleted file mode 100644
index 2a9acf1..0000000
--- a/additional_packages/google_auth_httplib2/setup.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-[bdist_wheel]
-universal = 1
diff --git a/additional_packages/google_auth_httplib2/setup.py b/additional_packages/google_auth_httplib2/setup.py
deleted file mode 100644
index ec04881..0000000
--- a/additional_packages/google_auth_httplib2/setup.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2014 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import io
-
-from setuptools import setup
-
-
-DEPENDENCIES = (
-    'google-auth'
-)
-
-
-with io.open('README.rst', 'r') as fh:
-    long_description = fh.read()
-
-
-setup(
-    name='google-auth-httplib2',
-    version='0.0.2',
-    author='Google Cloud Platform',
-    author_email='jonwayne+google-auth@google.com',
-    description='Google Authentication Library',
-    long_description=long_description,
-    url='https://github.com/GoogleCloudPlatform/google-auth-library-python',
-    py_modules=['google_auth_httplib2'],
-    install_requires=DEPENDENCIES,
-    license='Apache 2.0',
-    keywords='google auth oauth client',
-    classifiers=(
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.4',
-        'Programming Language :: Python :: 3.5',
-        'Programming Language :: Python :: 3.6',
-        'Development Status :: 3 - Alpha',
-        'Intended Audience :: Developers',
-        'License :: OSI Approved :: Apache Software License',
-        'Operating System :: POSIX',
-        'Operating System :: Microsoft :: Windows',
-        'Operating System :: MacOS :: MacOS X',
-        'Operating System :: OS Independent',
-        'Topic :: Internet :: WWW/HTTP',
-    ),
-)
diff --git a/additional_packages/google_auth_httplib2/tests/__init__.py b/additional_packages/google_auth_httplib2/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/additional_packages/google_auth_httplib2/tests/__init__.py
+++ /dev/null
diff --git a/additional_packages/google_auth_httplib2/tests/compliance.py b/additional_packages/google_auth_httplib2/tests/compliance.py
deleted file mode 100644
index a97a11b..0000000
--- a/additional_packages/google_auth_httplib2/tests/compliance.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright 2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import flask
-from google.auth import exceptions
-import pytest
-from pytest_localserver.http import WSGIServer
-from six.moves import http_client
-
-# .invalid will never resolve, see https://tools.ietf.org/html/rfc2606
-NXDOMAIN = 'test.invalid'
-
-
-class RequestResponseTests(object):
-
-    @pytest.fixture(scope='module')
-    def server(self):
-        """Provides a test HTTP server.
-
-        The test server is automatically created before
-        a test and destroyed at the end. The server is serving a test
-        application that can be used to verify requests.
-        """
-        app = flask.Flask(__name__)
-        app.debug = True
-
-        # pylint: disable=unused-variable
-        # (pylint thinks the flask routes are unusued.)
-        @app.route('/basic')
-        def index():
-            header_value = flask.request.headers.get('x-test-header', 'value')
-            headers = {'X-Test-Header': header_value}
-            return 'Basic Content', http_client.OK, headers
-
-        @app.route('/server_error')
-        def server_error():
-            return 'Error', http_client.INTERNAL_SERVER_ERROR
-        # pylint: enable=unused-variable
-
-        server = WSGIServer(application=app.wsgi_app)
-        server.start()
-        yield server
-        server.stop()
-
-    def test_request_basic(self, server):
-        request = self.make_request()
-        response = request(url=server.url + '/basic', method='GET')
-
-        assert response.status == http_client.OK
-        assert response.headers['x-test-header'] == 'value'
-        assert response.data == b'Basic Content'
-
-    def test_request_timeout(self, server):
-        request = self.make_request()
-        response = request(url=server.url + '/basic', method='GET', timeout=2)
-
-        assert response.status == http_client.OK
-        assert response.headers['x-test-header'] == 'value'
-        assert response.data == b'Basic Content'
-
-    def test_request_headers(self, server):
-        request = self.make_request()
-        response = request(
-            url=server.url + '/basic', method='GET', headers={
-                'x-test-header': 'hello world'})
-
-        assert response.status == http_client.OK
-        assert response.headers['x-test-header'] == 'hello world'
-        assert response.data == b'Basic Content'
-
-    def test_request_error(self, server):
-        request = self.make_request()
-        response = request(url=server.url + '/server_error', method='GET')
-
-        assert response.status == http_client.INTERNAL_SERVER_ERROR
-        assert response.data == b'Error'
-
-    def test_connection_error(self):
-        request = self.make_request()
-        with pytest.raises(exceptions.TransportError):
-            request(url='http://{}'.format(NXDOMAIN), method='GET')
diff --git a/additional_packages/google_auth_httplib2/tests/test_google_auth_httplib2.py b/additional_packages/google_auth_httplib2/tests/test_google_auth_httplib2.py
deleted file mode 100644
index 635965f..0000000
--- a/additional_packages/google_auth_httplib2/tests/test_google_auth_httplib2.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# Copyright 2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import httplib2
-import mock
-import six
-from six.moves import http_client
-
-import google_auth_httplib2
-from tests import compliance
-
-
-class MockHttp(object):
-    def __init__(self, responses, headers=None):
-        self.responses = responses
-        self.requests = []
-        self.headers = headers or {}
-
-    def request(self, url, method='GET', body=None, headers=None, **kwargs):
-        self.requests.append((method, url, body, headers, kwargs))
-        return self.responses.pop(0)
-
-
-class MockResponse(object):
-    def __init__(self, status=http_client.OK, data=b''):
-        self.status = status
-        self.data = data
-
-    def __iter__(self):
-        yield self
-        yield self.data
-
-
-class TestRequestResponse(compliance.RequestResponseTests):
-    def make_request(self):
-        http = httplib2.Http()
-        return google_auth_httplib2.Request(http)
-
-    def test_timeout(self):
-        url = 'http://example.com'
-        http = MockHttp(responses=[MockResponse()])
-        request = google_auth_httplib2.Request(http)
-        request(url=url, method='GET', timeout=5)
-
-        assert http.requests[0] == (
-            'GET', url, None, None, {})
-
-
-def test__make_default_http():
-    http = google_auth_httplib2._make_default_http()
-    assert isinstance(http, httplib2.Http)
-
-
-class MockCredentials(object):
-    def __init__(self, token='token'):
-        self.token = token
-
-    def apply(self, headers):
-        headers['authorization'] = self.token
-
-    def before_request(self, request, method, url, headers):
-        self.apply(headers)
-
-    def refresh(self, request):
-        self.token += '1'
-
-
-class TestAuthorizedHttp(object):
-    TEST_URL = 'http://example.com'
-
-    def test_authed_http_defaults(self):
-        authed_http = google_auth_httplib2.AuthorizedHttp(
-            mock.sentinel.credentials)
-
-        assert authed_http.credentials == mock.sentinel.credentials
-        assert isinstance(authed_http.http, httplib2.Http)
-
-    def test_connections(self):
-        authed_http = google_auth_httplib2.AuthorizedHttp(
-            mock.sentinel.credentials)
-
-        assert authed_http.connections == authed_http.http.connections
-
-        authed_http.connections = mock.sentinel.connections
-        assert authed_http.http.connections == mock.sentinel.connections
-
-    def test_request_no_refresh(self):
-        mock_credentials = mock.Mock(wraps=MockCredentials())
-        mock_response = MockResponse()
-        mock_http = MockHttp([mock_response])
-
-        authed_http = google_auth_httplib2.AuthorizedHttp(
-            mock_credentials, http=mock_http)
-
-        response, data = authed_http.request(self.TEST_URL)
-
-        assert response == mock_response
-        assert data == mock_response.data
-        assert mock_credentials.before_request.called
-        assert not mock_credentials.refresh.called
-        assert mock_http.requests == [
-            ('GET', self.TEST_URL, None, {'authorization': 'token'}, {})]
-
-    def test_request_refresh(self):
-        mock_credentials = mock.Mock(wraps=MockCredentials())
-        mock_final_response = MockResponse(status=http_client.OK)
-        # First request will 401, second request will succeed.
-        mock_http = MockHttp([
-            MockResponse(status=http_client.UNAUTHORIZED),
-            mock_final_response])
-
-        authed_http = google_auth_httplib2.AuthorizedHttp(
-            mock_credentials, http=mock_http)
-
-        response, data = authed_http.request(self.TEST_URL)
-
-        assert response == mock_final_response
-        assert data == mock_final_response.data
-        assert mock_credentials.before_request.call_count == 2
-        assert mock_credentials.refresh.called
-        assert mock_http.requests == [
-            ('GET', self.TEST_URL, None, {'authorization': 'token'}, {}),
-            ('GET', self.TEST_URL, None, {'authorization': 'token1'}, {})]
-
-    def test_request_stream_body(self):
-        mock_credentials = mock.Mock(wraps=MockCredentials())
-        mock_response = MockResponse()
-        # Refresh is needed to cover the resetting of the body position.
-        mock_http = MockHttp([
-            MockResponse(status=http_client.UNAUTHORIZED),
-            mock_response])
-
-        body = six.StringIO('body')
-        body.seek(1)
-
-        authed_http = google_auth_httplib2.AuthorizedHttp(
-            mock_credentials, http=mock_http)
-
-        response, data = authed_http.request(
-            self.TEST_URL, method='POST', body=body)
-
-        assert response == mock_response
-        assert data == mock_response.data
-        assert mock_http.requests == [
-            ('POST', self.TEST_URL, body, {'authorization': 'token'}, {}),
-            ('POST', self.TEST_URL, body, {'authorization': 'token1'}, {})]
diff --git a/additional_packages/google_auth_httplib2/tox.ini b/additional_packages/google_auth_httplib2/tox.ini
deleted file mode 100644
index 95f3454..0000000
--- a/additional_packages/google_auth_httplib2/tox.ini
+++ /dev/null
@@ -1,38 +0,0 @@
-[tox]
-envlist = lint,py27,py34,py35,py36,pypy,cover
-
-[testenv]
-deps =
-  flask
-  mock
-  pytest
-  pytest-cov
-  pytest-localserver
-  httplib2
-commands =
-  py.test --cov=google_auth_httplib2 --cov=tests {posargs:tests}
-
-[testenv:cover]
-basepython = python3.6
-commands =
-  py.test --cov=google_auth_httplib2 --cov=tests --cov-report= tests
-  coverage report --show-missing --fail-under=100
-deps =
-  {[testenv]deps}
-
-[testenv:lint]
-basepython = python3.5
-commands =
-  python setup.py check --metadata --restructuredtext --strict
-  flake8 \
-    --import-order-style=google \
-    --application-import-names="google_auth_httplib2,tests" \
-    google_auth_httplib2.py tests
-  python {toxinidir}/../../scripts/run_pylint.py \
-    --library-filesets google_auth_httplib2.py \
-    --test-filesets tests
-deps =
-  flake8
-  flake8-import-order
-  pylint
-  docutils
diff --git a/additional_packages/google_auth_oauthlib/.coveragerc b/additional_packages/google_auth_oauthlib/.coveragerc
deleted file mode 100644
index c44dd8e..0000000
--- a/additional_packages/google_auth_oauthlib/.coveragerc
+++ /dev/null
@@ -1,13 +0,0 @@
-[run]
-branch = True
-
-[report]
-omit =
-    */conftest.py
-exclude_lines =
-    # Re-enable the standard pragma
-    pragma: NO COVER
-    # Ignore debug-only repr
-    def __repr__
-    # Don't complain if tests don't hit defensive assertion code:
-    raise NotImplementedError
diff --git a/additional_packages/google_auth_oauthlib/CHANGELOG.rst b/additional_packages/google_auth_oauthlib/CHANGELOG.rst
deleted file mode 100644
index dbb95df..0000000
--- a/additional_packages/google_auth_oauthlib/CHANGELOG.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-v0.0.1
-------
-
-Initial release. This package contains the functionality previously located in `google.oauth2.oauthlib` and `google.oauth2.flows`.
diff --git a/additional_packages/google_auth_oauthlib/LICENSE b/additional_packages/google_auth_oauthlib/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/additional_packages/google_auth_oauthlib/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/additional_packages/google_auth_oauthlib/MANIFEST.in b/additional_packages/google_auth_oauthlib/MANIFEST.in
deleted file mode 100644
index aac7fe1..0000000
--- a/additional_packages/google_auth_oauthlib/MANIFEST.in
+++ /dev/null
@@ -1,2 +0,0 @@
-include README.rst LICENSE
-recursive-include tests *
diff --git a/additional_packages/google_auth_oauthlib/README.rst b/additional_packages/google_auth_oauthlib/README.rst
deleted file mode 100644
index 44c478b..0000000
--- a/additional_packages/google_auth_oauthlib/README.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-oauthlib integration for Google Auth
-====================================
-
-|pypi|
-
-This library provides `oauthlib`_ integration with `google-auth`_.
-
-.. |pypi| image:: https://img.shields.io/pypi/v/google-auth-oauthlib.svg
-   :target: https://pypi.python.org/pypi/google-auth-oauthlib
-
-.. _oauthlib: https://github.com/idan/oauthlib
-.. _google-auth: https://github.com/GoogleCloudPlatform/google-auth
-
-Installing
-----------
-
-You can install using `pip`_::
-
-    $ pip install google-auth-oauthlib
-
-.. _pip: https://pip.pypa.io/en/stable/
-
-License
--------
-
-Apache 2.0 - See `the LICENSE`_ for more information.
-
-.. _the LICENSE: https://github.com/GoogleCloudPlatform/google-auth-library-python/blob/master/LICENSE
diff --git a/additional_packages/google_auth_oauthlib/google_auth_oauthlib/__init__.py b/additional_packages/google_auth_oauthlib/google_auth_oauthlib/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/additional_packages/google_auth_oauthlib/google_auth_oauthlib/__init__.py
+++ /dev/null
diff --git a/additional_packages/google_auth_oauthlib/google_auth_oauthlib/flow.py b/additional_packages/google_auth_oauthlib/google_auth_oauthlib/flow.py
deleted file mode 100644
index 0df96c0..0000000
--- a/additional_packages/google_auth_oauthlib/google_auth_oauthlib/flow.py
+++ /dev/null
@@ -1,458 +0,0 @@
-# Copyright 2016 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""OAuth 2.0 Authorization Flow
-
-This module provides integration with `requests-oauthlib`_ for running the
-`OAuth 2.0 Authorization Flow`_ and acquiring user credentials.
-
-Here's an example of using :class:`Flow` with the installed application
-authorization flow::
-
-    from google_auth_oauthlib.flow import Flow
-
-    # Create the flow using the client secrets file from the Google API
-    # Console.
-    flow = Flow.from_client_secrets_file(
-        'path/to/client_secrets.json',
-        scopes=['profile', 'email'],
-        redirect_uri='urn:ietf:wg:oauth:2.0:oob')
-
-    # Tell the user to go to the authorization URL.
-    auth_url, _ = flow.authorization_url(prompt='consent')
-
-    print('Please go to this URL: {}'.format(auth_url))
-
-    # The user will get an authorization code. This code is used to get the
-    # access token.
-    code = input('Enter the authorization code: ')
-    flow.fetch_token(code=code)
-
-    # You can use flow.credentials, or you can just get a requests session
-    # using flow.authorized_session.
-    session = flow.authorized_session()
-    print(session.get('https://www.googleapis.com/userinfo/v2/me').json())
-
-This particular flow can be handled entirely by using
-:class:`InstalledAppFlow`.
-
-.. _requests-oauthlib: http://requests-oauthlib.readthedocs.io/en/stable/
-.. _OAuth 2.0 Authorization Flow:
-    https://tools.ietf.org/html/rfc6749#section-1.2
-"""
-
-import json
-import logging
-import webbrowser
-import wsgiref.simple_server
-import wsgiref.util
-
-import google.auth.transport.requests
-import google.oauth2.credentials
-from six.moves import input
-
-import google_auth_oauthlib.helpers
-
-
-_LOGGER = logging.getLogger(__name__)
-
-
-class Flow(object):
-    """OAuth 2.0 Authorization Flow
-
-    This class uses a :class:`requests_oauthlib.OAuth2Session` instance at
-    :attr:`oauth2session` to perform all of the OAuth 2.0 logic. This class
-    just provides convenience methods and sane defaults for doing Google's
-    particular flavors of OAuth 2.0.
-
-    Typically you'll construct an instance of this flow using
-    :meth:`from_client_secrets_file` and a `client secrets file`_ obtained
-    from the `Google API Console`_.
-
-    .. _client secrets file:
-        https://developers.google.com/identity/protocols/OAuth2WebServer
-        #creatingcred
-    .. _Google API Console:
-        https://console.developers.google.com/apis/credentials
-    """
-
-    def __init__(self, oauth2session, client_type, client_config):
-        """
-        Args:
-            oauth2session (requests_oauthlib.OAuth2Session):
-                The OAuth 2.0 session from ``requests-oauthlib``.
-            client_type (str): The client type, either ``web`` or
-                ``installed``.
-            client_config (Mapping[str, Any]): The client
-                configuration in the Google `client secrets`_ format.
-
-        .. _client secrets:
-            https://developers.google.com/api-client-library/python/guide
-            /aaa_client_secrets
-        """
-        self.client_type = client_type
-        """str: The client type, either ``'web'`` or ``'installed'``"""
-        self.client_config = client_config[client_type]
-        """Mapping[str, Any]: The OAuth 2.0 client configuration."""
-        self.oauth2session = oauth2session
-        """requests_oauthlib.OAuth2Session: The OAuth 2.0 session."""
-
-    @classmethod
-    def from_client_config(cls, client_config, scopes, **kwargs):
-        """Creates a :class:`requests_oauthlib.OAuth2Session` from client
-        configuration loaded from a Google-format client secrets file.
-
-        Args:
-            client_config (Mapping[str, Any]): The client
-                configuration in the Google `client secrets`_ format.
-            scopes (Sequence[str]): The list of scopes to request during the
-                flow.
-            kwargs: Any additional parameters passed to
-                :class:`requests_oauthlib.OAuth2Session`
-
-        Returns:
-            Flow: The constructed Flow instance.
-
-        Raises:
-            ValueError: If the client configuration is not in the correct
-                format.
-
-        .. _client secrets:
-            https://developers.google.com/api-client-library/python/guide
-            /aaa_client_secrets
-        """
-        if 'web' in client_config:
-            client_type = 'web'
-        elif 'installed' in client_config:
-            client_type = 'installed'
-        else:
-            raise ValueError(
-                'Client secrets must be for a web or installed app.')
-
-        session, client_config = (
-            google_auth_oauthlib.helpers.session_from_client_config(
-                client_config, scopes, **kwargs))
-
-        return cls(session, client_type, client_config)
-
-    @classmethod
-    def from_client_secrets_file(cls, client_secrets_file, scopes, **kwargs):
-        """Creates a :class:`Flow` instance from a Google client secrets file.
-
-        Args:
-            client_secrets_file (str): The path to the client secrets .json
-                file.
-            scopes (Sequence[str]): The list of scopes to request during the
-                flow.
-            kwargs: Any additional parameters passed to
-                :class:`requests_oauthlib.OAuth2Session`
-
-        Returns:
-            Flow: The constructed Flow instance.
-        """
-        with open(client_secrets_file, 'r') as json_file:
-            client_config = json.load(json_file)
-
-        return cls.from_client_config(client_config, scopes=scopes, **kwargs)
-
-    @property
-    def redirect_uri(self):
-        """The OAuth 2.0 redirect URI. Pass-through to
-        ``self.oauth2session.redirect_uri``."""
-        return self.oauth2session.redirect_uri
-
-    @redirect_uri.setter
-    def redirect_uri(self, value):
-        self.oauth2session.redirect_uri = value
-
-    def authorization_url(self, **kwargs):
-        """Generates an authorization URL.
-
-        This is the first step in the OAuth 2.0 Authorization Flow. The user's
-        browser should be redirected to the returned URL.
-
-        This method calls
-        :meth:`requests_oauthlib.OAuth2Session.authorization_url`
-        and specifies the client configuration's authorization URI (usually
-        Google's authorization server) and specifies that "offline" access is
-        desired. This is required in order to obtain a refresh token.
-
-        Args:
-            kwargs: Additional arguments passed through to
-                :meth:`requests_oauthlib.OAuth2Session.authorization_url`
-
-        Returns:
-            Tuple[str, str]: The generated authorization URL and state. The
-                user must visit the URL to complete the flow. The state is used
-                when completing the flow to verify that the request originated
-                from your application. If your application is using a different
-                :class:`Flow` instance to obtain the token, you will need to
-                specify the ``state`` when constructing the :class:`Flow`.
-        """
-        url, state = self.oauth2session.authorization_url(
-            self.client_config['auth_uri'],
-            access_type='offline', **kwargs)
-
-        return url, state
-
-    def fetch_token(self, **kwargs):
-        """Completes the Authorization Flow and obtains an access token.
-
-        This is the final step in the OAuth 2.0 Authorization Flow. This is
-        called after the user consents.
-
-        This method calls
-        :meth:`requests_oauthlib.OAuth2Session.fetch_token`
-        and specifies the client configuration's token URI (usually Google's
-        token server).
-
-        Args:
-            kwargs: Arguments passed through to
-                :meth:`requests_oauthlib.OAuth2Session.fetch_token`. At least
-                one of ``code`` or ``authorization_response`` must be
-                specified.
-
-        Returns:
-            Mapping[str, str]: The obtained tokens. Typically, you will not use
-                return value of this function and instead and use
-                :meth:`credentials` to obtain a
-                :class:`~google.auth.credentials.Credentials` instance.
-        """
-        return self.oauth2session.fetch_token(
-            self.client_config['token_uri'],
-            client_secret=self.client_config['client_secret'],
-            **kwargs)
-
-    @property
-    def credentials(self):
-        """Returns credentials from the OAuth 2.0 session.
-
-        :meth:`fetch_token` must be called before accessing this. This method
-        constructs a :class:`google.oauth2.credentials.Credentials` class using
-        the session's token and the client config.
-
-        Returns:
-            google.oauth2.credentials.Credentials: The constructed credentials.
-
-        Raises:
-            ValueError: If there is no access token in the session.
-        """
-        return google_auth_oauthlib.helpers.credentials_from_session(
-            self.oauth2session, self.client_config)
-
-    def authorized_session(self):
-        """Returns a :class:`requests.Session` authorized with credentials.
-
-        :meth:`fetch_token` must be called before this method. This method
-        constructs a :class:`google.auth.transport.requests.AuthorizedSession`
-        class using this flow's :attr:`credentials`.
-
-        Returns:
-            google.auth.transport.requests.AuthorizedSession: The constructed
-                session.
-        """
-        return google.auth.transport.requests.AuthorizedSession(
-            self.credentials)
-
-
-class InstalledAppFlow(Flow):
-    """Authorization flow helper for installed applications.
-
-    This :class:`Flow` subclass makes it easier to perform the
-    `Installed Application Authorization Flow`_. This flow is useful for
-    local development or applications that are installed on a desktop operating
-    system.
-
-    This flow has two strategies: The console strategy provided by
-    :meth:`run_console` and the local server strategy provided by
-    :meth:`run_local_server`.
-
-    Example::
-
-        from google_auth_oauthlib.flow import InstalledAppFlow
-
-        flow = InstalledAppFlow.from_client_secrets_file(
-            'client_secrets.json',
-            scopes=['profile', 'email'])
-
-        flow.run_local_server()
-
-        session = flow.authorized_session()
-
-        profile_info = session.get(
-            'https://www.googleapis.com/userinfo/v2/me').json()
-
-        print(profile_info)
-        # {'name': '...',  'email': '...', ...}
-
-
-    Note that these aren't the only two ways to accomplish the installed
-    application flow, they are just the most common ways. You can use the
-    :class:`Flow` class to perform the same flow with different methods of
-    presenting the authorization URL to the user or obtaining the authorization
-    response, such as using an embedded web view.
-
-    .. _Installed Application Authorization Flow:
-        https://developers.google.com/api-client-library/python/auth
-        /installed-app
-    """
-    _OOB_REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
-
-    _DEFAULT_AUTH_PROMPT_MESSAGE = (
-        'Please visit this URL to authorize this application: {url}')
-    """str: The message to display when prompting the user for
-    authorization."""
-    _DEFAULT_AUTH_CODE_MESSAGE = (
-        'Enter the authorization code: ')
-    """str: The message to display when prompting the user for the
-    authorization code. Used only by the console strategy."""
-
-    _DEFAULT_WEB_SUCCESS_MESSAGE = (
-        'The authentication flow has completed, you may close this window.')
-
-    def run_console(
-            self,
-            authorization_prompt_message=_DEFAULT_AUTH_PROMPT_MESSAGE,
-            authorization_code_message=_DEFAULT_AUTH_CODE_MESSAGE,
-            **kwargs):
-        """Run the flow using the console strategy.
-
-        The console strategy instructs the user to open the authorization URL
-        in their browser. Once the authorization is complete the authorization
-        server will give the user a code. The user then must copy & paste this
-        code into the application. The code is then exchanged for a token.
-
-        Args:
-            authorization_prompt_message (str): The message to display to tell
-                the user to navigate to the authorization URL.
-            authorization_code_message (str): The message to display when
-                prompting the user for the authorization code.
-            kwargs: Additional keyword arguments passed through to
-                :meth:`authorization_url`.
-
-        Returns:
-            google.oauth2.credentials.Credentials: The OAuth 2.0 credentials
-                for the user.
-        """
-        kwargs.setdefault('prompt', 'consent')
-
-        self.redirect_uri = self._OOB_REDIRECT_URI
-
-        auth_url, _ = self.authorization_url(**kwargs)
-
-        print(authorization_prompt_message.format(url=auth_url))
-
-        code = input(authorization_code_message)
-
-        self.fetch_token(code=code)
-
-        return self.credentials
-
-    def run_local_server(
-            self, host='localhost', port=8080,
-            authorization_prompt_message=_DEFAULT_AUTH_PROMPT_MESSAGE,
-            success_message=_DEFAULT_WEB_SUCCESS_MESSAGE,
-            open_browser=True,
-            **kwargs):
-        """Run the flow using the server strategy.
-
-        The server strategy instructs the user to open the authorization URL in
-        their browser and will attempt to automatically open the URL for them.
-        It will start a local web server to listen for the authorization
-        response. Once authorization is complete the authorization server will
-        redirect the user's browser to the local web server. The web server
-        will get the authorization code from the response and shutdown. The
-        code is then exchanged for a token.
-
-        Args:
-            host (str): The hostname for the local redirect server. This will
-                be served over http, not https.
-            port (int): The port for the local redirect server.
-            authorization_prompt_message (str): The message to display to tell
-                the user to navigate to the authorization URL.
-            success_message (str): The message to display in the web browser
-                the authorization flow is complete.
-            open_browser (bool): Whether or not to open the authorization URL
-                in the user's browser.
-            kwargs: Additional keyword arguments passed through to
-                :meth:`authorization_url`.
-
-        Returns:
-            google.oauth2.credentials.Credentials: The OAuth 2.0 credentials
-                for the user.
-        """
-        self.redirect_uri = 'http://{}:{}/'.format(host, port)
-
-        auth_url, _ = self.authorization_url(**kwargs)
-
-        wsgi_app = _RedirectWSGIApp(success_message)
-        local_server = wsgiref.simple_server.make_server(
-            host, port, wsgi_app, handler_class=_WSGIRequestHandler)
-
-        if open_browser:
-            webbrowser.open(auth_url, new=1, autoraise=True)
-
-        print(authorization_prompt_message.format(url=auth_url))
-
-        local_server.handle_request()
-
-        # Note: using https here because oauthlib is very picky that
-        # OAuth 2.0 should only occur over https.
-        authorization_response = wsgi_app.last_request_uri.replace(
-            'http', 'https')
-        self.fetch_token(authorization_response=authorization_response)
-
-        return self.credentials
-
-
-class _WSGIRequestHandler(wsgiref.simple_server.WSGIRequestHandler):
-    """Custom WSGIRequestHandler.
-
-    Uses a named logger instead of printing to stderr.
-    """
-    def log_message(self, format, *args, **kwargs):
-        # pylint: disable=redefined-builtin
-        # (format is the argument name defined in the superclass.)
-        _LOGGER.info(format, *args, **kwargs)
-
-
-class _RedirectWSGIApp(object):
-    """WSGI app to handle the authorization redirect.
-
-    Stores the request URI and displays the given success message.
-    """
-
-    def __init__(self, success_message):
-        """
-        Args:
-            success_message (str): The message to display in the web browser
-                the authorization flow is complete.
-        """
-        self.last_request_uri = None
-        self._success_message = success_message
-
-    def __call__(self, environ, start_response):
-        """WSGI Callable.
-
-        Args:
-            environ (Mapping[str, Any]): The WSGI environment.
-            start_response (Callable[str, list]): The WSGI start_response
-                callable.
-
-        Returns:
-            Iterable[bytes]: The response body.
-        """
-        start_response('200 OK', [('Content-type', 'text/plain')])
-        self.last_request_uri = wsgiref.util.request_uri(environ)
-        return [self._success_message.encode('utf-8')]
diff --git a/additional_packages/google_auth_oauthlib/google_auth_oauthlib/helpers.py b/additional_packages/google_auth_oauthlib/google_auth_oauthlib/helpers.py
deleted file mode 100644
index 41866d6..0000000
--- a/additional_packages/google_auth_oauthlib/google_auth_oauthlib/helpers.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Copyright 2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Integration helpers.
-
-This module provides helpers for integrating with `requests-oauthlib`_.
-Typically, you'll want to use the higher-level helpers in
-:mod:`google_auth_oauthlib.flow`.
-
-.. _requests-oauthlib: http://requests-oauthlib.readthedocs.io/en/stable/
-"""
-
-import json
-
-import google.oauth2.credentials
-import requests_oauthlib
-
-_REQUIRED_CONFIG_KEYS = frozenset(('auth_uri', 'token_uri', 'client_id'))
-
-
-def session_from_client_config(client_config, scopes, **kwargs):
-    """Creates a :class:`requests_oauthlib.OAuth2Session` from client
-    configuration loaded from a Google-format client secrets file.
-
-    Args:
-        client_config (Mapping[str, Any]): The client
-            configuration in the Google `client secrets`_ format.
-        scopes (Sequence[str]): The list of scopes to request during the
-            flow.
-        kwargs: Any additional parameters passed to
-            :class:`requests_oauthlib.OAuth2Session`
-
-    Raises:
-        ValueError: If the client configuration is not in the correct
-            format.
-
-    Returns:
-        Tuple[requests_oauthlib.OAuth2Session, Mapping[str, Any]]: The new
-            oauthlib session and the validated client configuration.
-
-    .. _client secrets:
-        https://developers.google.com/api-client-library/python/guide
-        /aaa_client_secrets
-    """
-
-    if 'web' in client_config:
-        config = client_config['web']
-    elif 'installed' in client_config:
-        config = client_config['installed']
-    else:
-        raise ValueError(
-            'Client secrets must be for a web or installed app.')
-
-    if not _REQUIRED_CONFIG_KEYS.issubset(config.keys()):
-        raise ValueError('Client secrets is not in the correct format.')
-
-    session = requests_oauthlib.OAuth2Session(
-        client_id=config['client_id'],
-        scope=scopes,
-        **kwargs)
-
-    return session, client_config
-
-
-def session_from_client_secrets_file(client_secrets_file, scopes, **kwargs):
-    """Creates a :class:`requests_oauthlib.OAuth2Session` instance from a
-    Google-format client secrets file.
-
-    Args:
-        client_secrets_file (str): The path to the `client secrets`_ .json
-            file.
-        scopes (Sequence[str]): The list of scopes to request during the
-            flow.
-        kwargs: Any additional parameters passed to
-            :class:`requests_oauthlib.OAuth2Session`
-
-    Returns:
-        Tuple[requests_oauthlib.OAuth2Session, Mapping[str, Any]]: The new
-            oauthlib session and the validated client configuration.
-
-    .. _client secrets:
-        https://developers.google.com/api-client-library/python/guide
-        /aaa_client_secrets
-    """
-    with open(client_secrets_file, 'r') as json_file:
-        client_config = json.load(json_file)
-
-    return session_from_client_config(client_config, scopes, **kwargs)
-
-
-def credentials_from_session(session, client_config=None):
-    """Creates :class:`google.oauth2.credentials.Credentials` from a
-    :class:`requests_oauthlib.OAuth2Session`.
-
-    :meth:`fetch_token` must be called on the session before before calling
-    this. This uses the session's auth token and the provided client
-    configuration to create :class:`google.oauth2.credentials.Credentials`.
-    This allows you to use the credentials from the session with Google
-    API client libraries.
-
-    Args:
-        session (requests_oauthlib.OAuth2Session): The OAuth 2.0 session.
-        client_config (Mapping[str, Any]): The subset of the client
-            configuration to use. For example, if you have a web client
-            you would pass in `client_config['web']`.
-
-    Returns:
-        google.oauth2.credentials.Credentials: The constructed credentials.
-
-    Raises:
-        ValueError: If there is no access token in the session.
-    """
-    client_config = client_config if client_config is not None else {}
-
-    if not session.token:
-        raise ValueError(
-            'There is no access token for this session, did you call '
-            'fetch_token?')
-
-    return google.oauth2.credentials.Credentials(
-        session.token['access_token'],
-        refresh_token=session.token.get('refresh_token'),
-        token_uri=client_config.get('token_uri'),
-        client_id=client_config.get('client_id'),
-        client_secret=client_config.get('client_secret'),
-        scopes=session.scope)
diff --git a/additional_packages/google_auth_oauthlib/setup.cfg b/additional_packages/google_auth_oauthlib/setup.cfg
deleted file mode 100644
index 2a9acf1..0000000
--- a/additional_packages/google_auth_oauthlib/setup.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-[bdist_wheel]
-universal = 1
diff --git a/additional_packages/google_auth_oauthlib/setup.py b/additional_packages/google_auth_oauthlib/setup.py
deleted file mode 100644
index 3652470..0000000
--- a/additional_packages/google_auth_oauthlib/setup.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright 2014 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import io
-
-from setuptools import find_packages
-from setuptools import setup
-
-
-DEPENDENCIES = (
-    'google-auth',
-    'requests-oauthlib>=0.7.0',
-)
-
-
-with io.open('README.rst', 'r') as fh:
-    long_description = fh.read()
-
-
-setup(
-    name='google-auth-oauthlib',
-    version='0.0.1',
-    author='Google Cloud Platform',
-    author_email='jonwayne+google-auth@google.com',
-    description='Google Authentication Library',
-    long_description=long_description,
-    url='https://github.com/GoogleCloudPlatform/google-auth-library-python',
-    packages=find_packages(exclude=('tests*',)),
-    install_requires=DEPENDENCIES,
-    license='Apache 2.0',
-    keywords='google auth oauth client oauthlib',
-    classifiers=(
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.4',
-        'Programming Language :: Python :: 3.5',
-        'Programming Language :: Python :: 3.6',
-        'Development Status :: 3 - Alpha',
-        'Intended Audience :: Developers',
-        'License :: OSI Approved :: Apache Software License',
-        'Operating System :: POSIX',
-        'Operating System :: Microsoft :: Windows',
-        'Operating System :: MacOS :: MacOS X',
-        'Operating System :: OS Independent',
-        'Topic :: Internet :: WWW/HTTP',
-    ),
-)
diff --git a/additional_packages/google_auth_oauthlib/tests/__init__.py b/additional_packages/google_auth_oauthlib/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/additional_packages/google_auth_oauthlib/tests/__init__.py
+++ /dev/null
diff --git a/additional_packages/google_auth_oauthlib/tests/data/client_secrets.json b/additional_packages/google_auth_oauthlib/tests/data/client_secrets.json
deleted file mode 100644
index 1baa499..0000000
--- a/additional_packages/google_auth_oauthlib/tests/data/client_secrets.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "web": {
-    "client_id": "example.apps.googleusercontent.com",
-    "project_id": "example",
-    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
-    "token_uri": "https://accounts.google.com/o/oauth2/token",
-    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
-    "client_secret": "itsasecrettoeveryone",
-    "redirect_uris": [
-      "urn:ietf:wg:oauth:2.0:oob",
-      "http://localhost"
-    ]
-  }
-}
diff --git a/additional_packages/google_auth_oauthlib/tests/test_flow.py b/additional_packages/google_auth_oauthlib/tests/test_flow.py
deleted file mode 100644
index 88d283d..0000000
--- a/additional_packages/google_auth_oauthlib/tests/test_flow.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# Copyright 2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import concurrent.futures
-import json
-import os
-
-import mock
-import pytest
-import requests
-from six.moves import urllib
-
-from google_auth_oauthlib import flow
-
-DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
-CLIENT_SECRETS_FILE = os.path.join(DATA_DIR, 'client_secrets.json')
-
-with open(CLIENT_SECRETS_FILE, 'r') as fh:
-    CLIENT_SECRETS_INFO = json.load(fh)
-
-
-class TestFlow(object):
-    def test_from_client_secrets_file(self):
-        instance = flow.Flow.from_client_secrets_file(
-            CLIENT_SECRETS_FILE, scopes=mock.sentinel.scopes)
-        assert instance.client_config == CLIENT_SECRETS_INFO['web']
-        assert (instance.oauth2session.client_id ==
-                CLIENT_SECRETS_INFO['web']['client_id'])
-        assert instance.oauth2session.scope == mock.sentinel.scopes
-
-    def test_from_client_config_installed(self):
-        client_config = {'installed': CLIENT_SECRETS_INFO['web']}
-        instance = flow.Flow.from_client_config(
-            client_config, scopes=mock.sentinel.scopes)
-        assert instance.client_config == client_config['installed']
-        assert (instance.oauth2session.client_id ==
-                client_config['installed']['client_id'])
-        assert instance.oauth2session.scope == mock.sentinel.scopes
-
-    def test_from_client_config_bad_format(self):
-        with pytest.raises(ValueError):
-            flow.Flow.from_client_config({}, scopes=mock.sentinel.scopes)
-
-    @pytest.fixture
-    def instance(self):
-        yield flow.Flow.from_client_config(
-            CLIENT_SECRETS_INFO, scopes=mock.sentinel.scopes)
-
-    def test_redirect_uri(self, instance):
-        instance.redirect_uri = mock.sentinel.redirect_uri
-        assert (instance.redirect_uri ==
-                instance.oauth2session.redirect_uri ==
-                mock.sentinel.redirect_uri)
-
-    def test_authorization_url(self, instance):
-        scope = 'scope_one'
-        instance.oauth2session.scope = [scope]
-        authorization_url_patch = mock.patch.object(
-            instance.oauth2session, 'authorization_url',
-            wraps=instance.oauth2session.authorization_url)
-
-        with authorization_url_patch as authorization_url_spy:
-            url, _ = instance.authorization_url(prompt='consent')
-
-            assert CLIENT_SECRETS_INFO['web']['auth_uri'] in url
-            assert scope in url
-            authorization_url_spy.assert_called_with(
-                CLIENT_SECRETS_INFO['web']['auth_uri'],
-                access_type='offline',
-                prompt='consent')
-
-    def test_fetch_token(self, instance):
-        fetch_token_patch = mock.patch.object(
-            instance.oauth2session, 'fetch_token', autospec=True,
-            return_value=mock.sentinel.token)
-
-        with fetch_token_patch as fetch_token_mock:
-            token = instance.fetch_token(code=mock.sentinel.code)
-
-            assert token == mock.sentinel.token
-            fetch_token_mock.assert_called_with(
-                CLIENT_SECRETS_INFO['web']['token_uri'],
-                client_secret=CLIENT_SECRETS_INFO['web']['client_secret'],
-                code=mock.sentinel.code)
-
-    def test_credentials(self, instance):
-        instance.oauth2session.token = {
-            'access_token': mock.sentinel.access_token,
-            'refresh_token': mock.sentinel.refresh_token
-        }
-
-        credentials = instance.credentials
-
-        assert credentials.token == mock.sentinel.access_token
-        assert credentials._refresh_token == mock.sentinel.refresh_token
-        assert (credentials._client_id ==
-                CLIENT_SECRETS_INFO['web']['client_id'])
-        assert (credentials._client_secret ==
-                CLIENT_SECRETS_INFO['web']['client_secret'])
-        assert (credentials._token_uri ==
-                CLIENT_SECRETS_INFO['web']['token_uri'])
-
-    def test_authorized_session(self, instance):
-        instance.oauth2session.token = {
-            'access_token': mock.sentinel.access_token,
-            'refresh_token': mock.sentinel.refresh_token
-        }
-
-        session = instance.authorized_session()
-
-        assert session.credentials.token == mock.sentinel.access_token
-
-
-class TestInstalledAppFlow(object):
-    SCOPES = ['email', 'profile']
-    REDIRECT_REQUEST_PATH = '/?code=code&state=state'
-
-    @pytest.fixture
-    def instance(self):
-        yield flow.InstalledAppFlow.from_client_config(
-            CLIENT_SECRETS_INFO, scopes=self.SCOPES)
-
-    @pytest.fixture
-    def mock_fetch_token(self, instance):
-        def set_token(*args, **kwargs):
-            instance.oauth2session.token = {
-                'access_token': mock.sentinel.access_token,
-                'refresh_token': mock.sentinel.refresh_token
-            }
-
-        fetch_token_patch = mock.patch.object(
-            instance.oauth2session, 'fetch_token', autospec=True,
-            side_effect=set_token)
-
-        with fetch_token_patch as fetch_token_mock:
-            yield fetch_token_mock
-
-    @mock.patch('google_auth_oauthlib.flow.input', autospec=True)
-    def test_run_console(self, input_mock, instance, mock_fetch_token):
-        input_mock.return_value = mock.sentinel.code
-
-        credentials = instance.run_console()
-
-        assert credentials.token == mock.sentinel.access_token
-        assert credentials._refresh_token == mock.sentinel.refresh_token
-
-        mock_fetch_token.assert_called_with(
-            CLIENT_SECRETS_INFO['web']['token_uri'],
-            client_secret=CLIENT_SECRETS_INFO['web']['client_secret'],
-            code=mock.sentinel.code)
-
-    @mock.patch('google_auth_oauthlib.flow.webbrowser', autospec=True)
-    def test_run_local_server(
-            self, webbrowser_mock, instance, mock_fetch_token):
-        auth_redirect_url = urllib.parse.urljoin(
-            'http://localhost:8080',
-            self.REDIRECT_REQUEST_PATH)
-
-        with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
-            future = pool.submit(instance.run_local_server)
-
-            while not future.done():
-                try:
-                    requests.get(auth_redirect_url)
-                except requests.ConnectionError:  # pragma: NO COVER
-                    pass
-
-            credentials = future.result()
-
-        assert credentials.token == mock.sentinel.access_token
-        assert credentials._refresh_token == mock.sentinel.refresh_token
-        assert webbrowser_mock.open.called
-
-        expected_auth_response = auth_redirect_url.replace('http', 'https')
-        mock_fetch_token.assert_called_with(
-            CLIENT_SECRETS_INFO['web']['token_uri'],
-            client_secret=CLIENT_SECRETS_INFO['web']['client_secret'],
-            authorization_response=expected_auth_response)
-
-    @mock.patch('google_auth_oauthlib.flow.webbrowser', autospec=True)
-    @mock.patch('wsgiref.simple_server.make_server', autospec=True)
-    def test_run_local_server_no_browser(
-            self, make_server_mock, webbrowser_mock, instance,
-            mock_fetch_token):
-
-        def assign_last_request_uri(host, port, wsgi_app, **kwargs):
-            wsgi_app.last_request_uri = self.REDIRECT_REQUEST_PATH
-            return mock.Mock()
-
-        make_server_mock.side_effect = assign_last_request_uri
-
-        instance.run_local_server(open_browser=False)
-
-        assert not webbrowser_mock.open.called
diff --git a/additional_packages/google_auth_oauthlib/tests/test_helpers.py b/additional_packages/google_auth_oauthlib/tests/test_helpers.py
deleted file mode 100644
index faae76b..0000000
--- a/additional_packages/google_auth_oauthlib/tests/test_helpers.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright 2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import json
-import os
-
-import mock
-import pytest
-
-from google_auth_oauthlib import helpers
-
-DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
-CLIENT_SECRETS_FILE = os.path.join(DATA_DIR, 'client_secrets.json')
-
-with open(CLIENT_SECRETS_FILE, 'r') as fh:
-    CLIENT_SECRETS_INFO = json.load(fh)
-
-
-def test_session_from_client_config_web():
-    session, config = helpers.session_from_client_config(
-        CLIENT_SECRETS_INFO, scopes=mock.sentinel.scopes)
-
-    assert config == CLIENT_SECRETS_INFO
-    assert session.client_id == CLIENT_SECRETS_INFO['web']['client_id']
-    assert session.scope == mock.sentinel.scopes
-
-
-def test_session_from_client_config_installed():
-    info = {'installed': CLIENT_SECRETS_INFO['web']}
-    session, config = helpers.session_from_client_config(
-        info, scopes=mock.sentinel.scopes)
-    assert config == info
-    assert session.client_id == info['installed']['client_id']
-    assert session.scope == mock.sentinel.scopes
-
-
-def test_session_from_client_config_bad_format():
-    with pytest.raises(ValueError):
-        helpers.session_from_client_config({}, scopes=[])
-
-
-def test_session_from_client_config_missing_keys():
-    with pytest.raises(ValueError):
-        helpers.session_from_client_config({'web': {}}, scopes=[])
-
-
-def test_session_from_client_secrets_file():
-    session, config = helpers.session_from_client_secrets_file(
-        CLIENT_SECRETS_FILE, scopes=mock.sentinel.scopes)
-    assert config == CLIENT_SECRETS_INFO
-    assert session.client_id == CLIENT_SECRETS_INFO['web']['client_id']
-    assert session.scope == mock.sentinel.scopes
-
-
-@pytest.fixture
-def session():
-    session, _ = helpers.session_from_client_config(
-        CLIENT_SECRETS_INFO, scopes=mock.sentinel.scopes)
-    yield session
-
-
-def test_credentials_from_session(session):
-    session.token = {
-        'access_token': mock.sentinel.access_token,
-        'refresh_token': mock.sentinel.refresh_token
-    }
-
-    credentials = helpers.credentials_from_session(
-        session, CLIENT_SECRETS_INFO['web'])
-
-    assert credentials.token == mock.sentinel.access_token
-    assert credentials._refresh_token == mock.sentinel.refresh_token
-    assert credentials._client_id == CLIENT_SECRETS_INFO['web']['client_id']
-    assert (credentials._client_secret ==
-            CLIENT_SECRETS_INFO['web']['client_secret'])
-    assert credentials._token_uri == CLIENT_SECRETS_INFO['web']['token_uri']
-
-
-def test_bad_credentials(session):
-    with pytest.raises(ValueError):
-        helpers.credentials_from_session(session)
diff --git a/additional_packages/google_auth_oauthlib/tox.ini b/additional_packages/google_auth_oauthlib/tox.ini
deleted file mode 100644
index c0983f6..0000000
--- a/additional_packages/google_auth_oauthlib/tox.ini
+++ /dev/null
@@ -1,36 +0,0 @@
-[tox]
-envlist = lint,py27,py34,py35,py36,pypy,cover
-
-[testenv]
-deps =
-  mock
-  pytest
-  pytest-cov
-  futures
-commands =
-  py.test --cov=google_auth_oauthlib --cov=tests {posargs:tests}
-
-[testenv:cover]
-basepython = python3.6
-commands =
-  py.test --cov=google_auth_oauthlib --cov=tests --cov-report= tests
-  coverage report --show-missing --fail-under=100
-deps =
-  {[testenv]deps}
-
-[testenv:lint]
-basepython = python3.5
-commands =
-  python setup.py check --metadata --restructuredtext --strict
-  flake8 \
-    --import-order-style=google \
-    --application-import-names="google_auth_oauthlib,tests" \
-    google_auth_oauthlib tests
-  python {toxinidir}/../../scripts/run_pylint.py \
-    --library-filesets google_auth_oauthlib \
-    --test-filesets tests
-deps =
-  flake8
-  flake8-import-order
-  pylint
-  docutils