# Changelog


### [1.12.11](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.11...v1.12.10) (2022-01-31)

### Bug Fixes

* use version.py instead of pkg_resources ([#1677](https://www.github.com/googleapis/google-api-python-client/issues/1677))


### [1.12.10](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.9...v1.12.10) (2022-01-13)


### [1.12.9](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.8...v1.12.9) (2022-01-11)

### Bug Fixes

* allow google-api-core 2.x for python 3 users ([#1649](https://www.github.com/googleapis/google-api-python-client/issues/1649))

### [1.12.8](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.7...v1.12.8) (2020-11-18)


### Documentation

* add httplib2 authorization to thread_safety ([#1005](https://www.github.com/googleapis/google-api-python-client/issues/1005)) ([205ae59](https://www.github.com/googleapis/google-api-python-client/commit/205ae5988bd89676823088d6c8a7bd17e3beefcf)), closes [#808](https://www.github.com/googleapis/google-api-python-client/issues/808) [#808](https://www.github.com/googleapis/google-api-python-client/issues/808)

### [1.12.7](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.6...v1.12.7) (2020-11-17)


### Documentation

* Update Webmasters API sample ([#1092](https://www.github.com/googleapis/google-api-python-client/issues/1092)) ([12831f3](https://www.github.com/googleapis/google-api-python-client/commit/12831f3e4716292b55b63dd2b08c3351f09b8a15))

### [1.12.6](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.5...v1.12.6) (2020-11-16)


### Documentation

* Change error parsing to check for 'message' ([#1083](https://www.github.com/googleapis/google-api-python-client/issues/1083)) ([a341c5a](https://www.github.com/googleapis/google-api-python-client/commit/a341c5a5e31ba16da109658127b58cb7e5dbeedd)), closes [#1082](https://www.github.com/googleapis/google-api-python-client/issues/1082)
* Update oauth docs to include snippet to get email address of authenticated user ([#1088](https://www.github.com/googleapis/google-api-python-client/issues/1088)) ([25fba64](https://www.github.com/googleapis/google-api-python-client/commit/25fba648ea647b62f2a6edc54ae927c1ed381b45)), closes [#1071](https://www.github.com/googleapis/google-api-python-client/issues/1071)

### [1.12.5](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.4...v1.12.5) (2020-10-22)


### Bug Fixes

* don't raise when downloading zero byte files ([#1074](https://www.github.com/googleapis/google-api-python-client/issues/1074)) ([86d8788](https://www.github.com/googleapis/google-api-python-client/commit/86d8788ee8a766ca6818620f3fd2899be0e44190))

### [1.12.4](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.3...v1.12.4) (2020-10-20)


### Bug Fixes

* don't set content-range on empty uploads ([#1070](https://www.github.com/googleapis/google-api-python-client/issues/1070)) ([af6035f](https://www.github.com/googleapis/google-api-python-client/commit/af6035f6754a155ee6b04bbbc5c39410c7316d6a))


### Documentation

* fix typo in oauth.md ([#1058](https://www.github.com/googleapis/google-api-python-client/issues/1058)) ([30eff9d](https://www.github.com/googleapis/google-api-python-client/commit/30eff9d8276919b8c4e50df2d3b1982594423692))
* update generated docs ([#1053](https://www.github.com/googleapis/google-api-python-client/issues/1053)) ([3e17f89](https://www.github.com/googleapis/google-api-python-client/commit/3e17f8990db54bec16c48c319072799a14f5a53f)), closes [#1049](https://www.github.com/googleapis/google-api-python-client/issues/1049)

### [1.12.3](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.2...v1.12.3) (2020-09-29)


### Bug Fixes

* **deps:** update setup.py to install httplib2>=0.15.0 ([#1050](https://www.github.com/googleapis/google-api-python-client/issues/1050)) ([c00f70d](https://www.github.com/googleapis/google-api-python-client/commit/c00f70d565a002b92374356be087927b131ce135))

### [1.12.2](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.1...v1.12.2) (2020-09-23)


### Bug Fixes

* add method to close httplib2 connections ([#1038](https://www.github.com/googleapis/google-api-python-client/issues/1038)) ([98888da](https://www.github.com/googleapis/google-api-python-client/commit/98888dadf04e7e00524b6de273d28d02d7abc2c0)), closes [#618](https://www.github.com/googleapis/google-api-python-client/issues/618) 

### [1.12.1](https://www.github.com/googleapis/google-api-python-client/compare/v1.12.0...v1.12.1) (2020-09-14)


### Bug Fixes

* **deps:** require six>=1.13.0 ([#1030](https://www.github.com/googleapis/google-api-python-client/issues/1030)) ([4acecc3](https://www.github.com/googleapis/google-api-python-client/commit/4acecc3c0cd31308f9a256f065b7b1d1c3a4798d))

## [1.12.0](https://www.github.com/googleapis/google-api-python-client/compare/v1.11.0...v1.12.0) (2020-09-12)


### Features

* add quota_project, credentials_file, and scopes support ([#1022](https://www.github.com/googleapis/google-api-python-client/issues/1022)) ([790e702](https://www.github.com/googleapis/google-api-python-client/commit/790e70224c8110bfb1191333ce448c2b0fe54ea6))


### Documentation

* convert `print` statement to function ([#988](https://www.github.com/googleapis/google-api-python-client/issues/988)) ([16448bc](https://www.github.com/googleapis/google-api-python-client/commit/16448bc666e032abd83096faadcda56f86f36f18)), closes [#987](https://www.github.com/googleapis/google-api-python-client/issues/987)
* remove http from batch execute docs ([#1003](https://www.github.com/googleapis/google-api-python-client/issues/1003)) ([5028fe7](https://www.github.com/googleapis/google-api-python-client/commit/5028fe76c8075c6594b1999074f91eed7f7dd329)), closes [#1002](https://www.github.com/googleapis/google-api-python-client/issues/1002)

## [1.11.0](https://www.github.com/googleapis/google-api-python-client/compare/v1.10.1...v1.11.0) (2020-08-27)


### Features

* add support for mtls env variables ([#1008](https://www.github.com/googleapis/google-api-python-client/issues/1008)) ([2fc5ca1](https://www.github.com/googleapis/google-api-python-client/commit/2fc5ca1b6aa880aab2067ab7eb96780a1b28d4c7))

### [1.10.1](https://www.github.com/googleapis/google-api-python-client/compare/v1.10.0...v1.10.1) (2020-08-03)


### Bug Fixes

* discovery uses V2 when version is None ([#975](https://www.github.com/googleapis/google-api-python-client/issues/975)) ([cd4e8f4](https://www.github.com/googleapis/google-api-python-client/commit/cd4e8f429422232dd82ef7e9bc685061d5df94a1)), closes [#971](https://www.github.com/googleapis/google-api-python-client/issues/971)


### Documentation

* fix deprecation warnings due to invalid escape sequences. ([#996](https://www.github.com/googleapis/google-api-python-client/issues/996)) ([0f60eda](https://www.github.com/googleapis/google-api-python-client/commit/0f60eda81ea524dcd1358d87b06da701412bb414)), closes [#995](https://www.github.com/googleapis/google-api-python-client/issues/995)
* fix link to service accounts documentation ([#986](https://www.github.com/googleapis/google-api-python-client/issues/986)) ([edb2516](https://www.github.com/googleapis/google-api-python-client/commit/edb2516eb59770546e7960ca633c7be0ca7b1ad4))
* update generated docs ([#981](https://www.github.com/googleapis/google-api-python-client/issues/981)) ([d059ad8](https://www.github.com/googleapis/google-api-python-client/commit/d059ad881c7ae58c67931c48788d0bd7343ab16c))

## [1.10.0](https://www.github.com/googleapis/google-api-python-client/compare/v1.9.3...v1.10.0) (2020-07-15)


### Features

* allow to use 'six.moves.collections_abc.Mapping' in 'client_options.from_dict()' ([#943](https://www.github.com/googleapis/google-api-python-client/issues/943)) ([21af37b](https://www.github.com/googleapis/google-api-python-client/commit/21af37b11ea2d6a89b3df484e1b2fa1d12849510))
* Build universal wheels ([#948](https://www.github.com/googleapis/google-api-python-client/issues/948)) ([3e28a1e](https://www.github.com/googleapis/google-api-python-client/commit/3e28a1e0d47f829182cd92f37475ab91fa5e4afc))
* discovery supports retries ([#967](https://www.github.com/googleapis/google-api-python-client/issues/967)) ([f3348f9](https://www.github.com/googleapis/google-api-python-client/commit/f3348f98bf91a88a28bf61b12b95e391cc3be1ff)), closes [#848](https://www.github.com/googleapis/google-api-python-client/issues/848)


### Documentation

* consolidating and updating the Contribution Guide ([#964](https://www.github.com/googleapis/google-api-python-client/issues/964)) ([63f97f3](https://www.github.com/googleapis/google-api-python-client/commit/63f97f37daee37a725eb05df3097b20d5d4eaaf0)), closes [#963](https://www.github.com/googleapis/google-api-python-client/issues/963)

### [1.9.3](https://www.github.com/googleapis/google-api-python-client/compare/v1.9.2...v1.9.3) (2020-06-10)


### Bug Fixes

* update GOOGLE_API_USE_MTLS values ([#940](https://www.github.com/googleapis/google-api-python-client/issues/940)) ([19908ed](https://www.github.com/googleapis/google-api-python-client/commit/19908edcd8a3df1db41e34100acc1f15c3c99397))

### [1.9.2](https://www.github.com/googleapis/google-api-python-client/compare/v1.9.1...v1.9.2) (2020-06-04)


### Bug Fixes

* bump api-core version ([#936](https://www.github.com/googleapis/google-api-python-client/issues/936)) ([ee53b3b](https://www.github.com/googleapis/google-api-python-client/commit/ee53b3b32a050874ba4cfb491fb384f94682c824))

### [1.9.1](https://www.github.com/googleapis/google-api-python-client/compare/v1.9.0...v1.9.1) (2020-06-02)


### Bug Fixes

* fix python-api-core dependency issue ([#931](https://www.github.com/googleapis/google-api-python-client/issues/931)) ([42028ed](https://www.github.com/googleapis/google-api-python-client/commit/42028ed2b2be47f85b70eb813185264f1f573d01))

## [1.9.0](https://www.github.com/googleapis/google-api-python-client/compare/v1.8.4...v1.9.0) (2020-06-02)


### Features

* add mtls feature ([#917](https://www.github.com/googleapis/google-api-python-client/issues/917)) ([981eadf](https://www.github.com/googleapis/google-api-python-client/commit/981eadf7cfdb576981d92fcda498c76422821426))
* add templates for python samples projects ([#506](https://www.github.com/googleapis/google-api-python-client/issues/506)) ([#924](https://www.github.com/googleapis/google-api-python-client/issues/924)) ([c482712](https://www.github.com/googleapis/google-api-python-client/commit/c482712935d1c1331e33bd7f9968bd3b2be223bb))

### [1.8.4](https://www.github.com/googleapis/google-api-python-client/compare/v1.8.3...v1.8.4) (2020-05-20)


### Bug Fixes

* don't try to import GAE API in other environments ([#903](https://www.github.com/googleapis/google-api-python-client/issues/903)) ([09e6447](https://www.github.com/googleapis/google-api-python-client/commit/09e644719166aecb21a01b6d5ee9898843e7cd58))
* the turn down date for global batch uri ([#901](https://www.github.com/googleapis/google-api-python-client/issues/901)) ([6ddadd7](https://www.github.com/googleapis/google-api-python-client/commit/6ddadd7753134c671628ad3f4598595b0abb1457))

### [1.8.3](https://www.github.com/googleapis/google-api-python-client/compare/v1.8.2...v1.8.3) (2020-05-01)


### Bug Fixes

* downgrade repetitive logging calls to debug ([#885](https://www.github.com/googleapis/google-api-python-client/issues/885)) ([3bf2781](https://www.github.com/googleapis/google-api-python-client/commit/3bf2781e29cb828409f3a8a21939323286524569)), closes [#781](https://www.github.com/googleapis/google-api-python-client/issues/781)

### [1.8.2](https://www.github.com/googleapis/google-api-python-client/compare/v1.8.1...v1.8.2) (2020-04-21)


### Bug Fixes

* Remove `apiclient.__version__` ([#871](https://www.github.com/googleapis/google-api-python-client/issues/871)) ([c7516a2](https://github.com/googleapis/google-api-python-client/commit/1d8ec6874e1c6081893de7cd7cbc86d1f6580320d)), closes [googleapis#870](https://www.github.com/googleapis/googleapis/issues/870)


### [1.8.1](https://www.github.com/googleapis/google-api-python-client/compare/v1.8.0...v1.8.1) (2020-04-20)


### Bug Fixes

* Adding ConnectionError to retry mechanism ([#822](https://www.github.com/googleapis/google-api-python-client/issues/822)) ([c7516a2](https://www.github.com/googleapis/google-api-python-client/commit/c7516a2ea2c229479633690c109f8763dc0b30ed)), closes [googleapis#558](https://www.github.com/googleapis/googleapis/issues/558)
* replace '-' in method names with '_' ([#863](https://www.github.com/googleapis/google-api-python-client/issues/863)) ([8ed729f](https://www.github.com/googleapis/google-api-python-client/commit/8ed729f1d868a8713ab442bf0bf59e77ba36afb6))

### v1.8.0
  Version 1.8.0

  Release to support API endpoint override.

  New Features
  - Add api endpoint override. ([#829](https://github.com/googleapis/google-api-python-client/pull/829))

  Implementation Changes
  - Don't set http.redirect_codes if the attr doesn't exist and allow more httplib2 versions. ([#841](https://github.com/googleapis/google-api-python-client/pull/841))

### v1.7.12
  Version 1.7.12
  
  Bugfix release
  
  Implementation Changes
  - Look for field 'detail' in error message. ([#739](https://github.com/googleapis/google-api-python-client/pull/739))
  - Exclude 308s from httplib2 redirect codes list ([#813](https://github.com/googleapis/google-api-python-client/pull/813))
  
  Documentation 
  - Remove oauth2client from docs ([#738](https://github.com/googleapis/google-api-python-client/pull/738))
  - Fix typo. ([#745](https://github.com/googleapis/google-api-python-client/pull/745))
  - Remove compatibility badges. ([#746](https://github.com/googleapis/google-api-python-client/pull/746))
  - Fix TypeError: search_analytics_api_sample.py #732 ([#742](https://github.com/googleapis/google-api-python-client/pull/742))
  - Correct response access ([#750](https://github.com/googleapis/google-api-python-client/pull/750))
  - Fix link to API explorer ([#760](https://github.com/googleapis/google-api-python-client/pull/760))
  - Fix argument typo in oauth2 code example ([#763](https://github.com/googleapis/google-api-python-client/pull/763))
  - Recommend install with virtualenv ([#768](https://github.com/googleapis/google-api-python-client/pull/768))
  - Fix capitalization in docs/README.md ([#770](https://github.com/googleapis/google-api-python-client/pull/770))

  - Remove compatibility badges ([#796](https://github.com/googleapis/google-api-python-client/pull/796))
  - Remove mentions of pycrypto ([#799](https://github.com/googleapis/google-api-python-client/pull/799))
  - Fix typo in model.py
  - Add note about Google Ads llibrary ([#814](https://github.com/googleapis/google-api-python-client/pull/814))

  
  Internal / Testing Changes
  - Blacken ([#772](https://github.com/googleapis/google-api-python-client/pull/722))
  - Move kokoro configs ([#832](https://github.com/googleapis/google-api-python-client/pull/832))
  
### v1.7.11
  Version 1.7.11

  Bugfix release

  Implementation Changes
  - Pass library and Python version in x-goog-api-client header ([#734](https://github.com/googleapis/google-api-python-client/pull/734))

  Documentation
  - Fix typo in filename used in 'docs/auth.md' ([#736](https://github.com/googleapis/google-api-python-client/pull/736))

  
### v1.7.10
  Version 1.7.10

  Bugfix release

  Implementation Changes
  - Decode service to utf-8 ([#723](https://github.com/googleapis/google-api-python-client/pull/723))
  - Use print() function in both Python2 and Python 3 ([#722](https://github.com/googleapis/google-api-python-client/pull/722))
  - Make http.MediaFileUpload close its file descriptor ([#600](https://github.com/googleapis/google-api-python-client/pull/600))
  - Never make 'body' required ([#718](https://github.com/googleapis/google-api-python-client/pull/718))

  Documentation
  - Add compatability check badges to README ([#691](https://github.com/googleapis/google-api-python-client/pull/691))
  - Regenerate docs ([#696](https://github.com/googleapis/google-api-python-client/pull/696), [#700](https://github.com/googleapis/google-api-python-client/pull/700))
  - Create index file for dynamically generated docs ([#702](https://github.com/googleapis/google-api-python-client/pull/702))
  - Add docs folder with guides from developers.google.com ([#706](https://github.com/googleapis/google-api-python-client/pull/706), [#710](https://github.com/googleapis/google-api-python-client/pull/710))

  Internal / Testing Changes
  - Fix http.py, lint errors, unit test ([#724](https://github.com/googleapis/google-api-python-client/pull/724))
  - tox.ini: Look for Python syntax errors and undefined names ([#721](https://github.com/googleapis/google-api-python-client/pull/721))


### v1.7.9
  Version 1.7.9

  Bugfix release
  - Remove Django Samples. ([#657](https://github.com/googleapis/google-api-python-client/pull/657))
  - Call request_orig with kwargs ([#658](https://github.com/googleapis/google-api-python-client/pull/658))

### v1.7.8
  Version 1.7.8

  Bugfix release
  - Convert '$' in method name to '_' ([#616](https://github.com/googleapis/google-api-python-client/pull/616))
  - Alias unitest2 import as unittest in test__auth.py ([#613](https://github.com/googleapis/google-api-python-client/pull/613))

### v1.7.7
  Version 1.7.7

    Bugfix release
    - Change xrange to range ([#601](https://github.com/googleapis/google-api-python-client/pull/601))
    - Typo in http.py exception message. ([#602](https://github.com/googleapis/google-api-python-client/pull/602))

    - Announce deprecation of Python 2.7 ([#603](https://github.com/googleapis/google-api-python-client/pull/603))
    - Updates documentation for stopping channel subscriptions ([#598](https://github.com/googleapis/google-api-python-client/pull/598))
    - Adding example for searchAppearance ([#414](https://github.com/googleapis/google-api-python-client/pull/414))

    - Add badges ([#455](https://github.com/googleapis/google-api-python-client/pull/455))

### v1.7.6
  Version 1.7.6

  Bugfix release

  - Add client-side limit for batch requests (#585)

### v1.7.5
  Version 1.7.5

  Bugfix release

  - Fix the client to respect the passed in developerKey and credentials

### v1.7.4
  Version 1.7.4

  Bugfix release

  - Catch ServerNotFoundError to retry the request (#532)

### v1.7.3
  Version 1.7.3

  Bugfix release

  - Make apiclient.sample_tools gracefully fail to import (#525).


### v1.7.2
  Version 1.7.2

  Bugfix release

  - Remove unnecessary check in apiclient/__ini__.py (#522).

### v1.7.1
  Version 1.7.1

  Bugfix release

  - Remove unnecessary check in setup.py (#518).

### v1.7.0
  Version 1.7.0

  This release drops the hard requirement on oauth2client and installs
  google-auth by default instead. oauth2client is still supported but will
  need to be explicitly installed.

  - Drop oauth2client dependency (#499)
  - Include tests in source distribution (#514)

### v1.6.7
  Version 1.6.7

  Bugfix release

  **Note**: The next release of this library will no longer directly depend on
    oauth2client. If you need to use oauth2client, you'll need to explicitly
    install it.

  - Make body optional for requests with no parameters. (#446)
  - Fix retying on socket.timeout. (#495)
  - Match travis matrix with tox testenv. (#498)
  - Remove oauth2client._helpers dependency. (#493)
  - Remove unused keyring test dependency. (#496)
  - discovery.py: remove unused oauth2client import. (#492)
  - Update README to reference GCP API client libraries. (#490)

### v1.6.6
  Version 1.6.6

  Bugfix release

  - Warn when constructing BatchHttpRequest using the legacy batch URI (#488)
  - Increase the default media chunksize to 100MB. (#482)
  - Remove unnecessary parsing of mime headers in HttpRequest.__init__ (#467)

### v1.6.5
  Version 1.6.5

  Bugfix release

  - Proactively refresh credentials when applying and treat a missing
    `access_token` as invalid. Note: This change reveals surprising behavior
    between default credentials and batches. If you allow
    `googleapiclient.discovery.build` to use default credentials *and* specify
    different credentials by providing `batch.execut()` with an explicit `http`
    argument, your individual requests will use the default credentials and
    *not* the credentials specified to the batch http. To avoid this, tell
    `build` explicitly not to use default credentials by specifying
    `build(..., http=httplib2.Http()`. (#469)
  - Remove mutual exclusivity check for developerKey and credentials (#465)
  - Handle unknown media length. (#406)
  - Handle variant error format gracefully. (#459)
  - Avoid testing against Django >= 2.0.0 on Python 2. (#460)

### v1.6.4
  Version 1.6.4

  Bugfix release

  - Warn when google-auth credentials are used but google-auth-httplib2 isn't available. (#443)

### v1.6.3
  Version 1.6.3

  Bugfix release

  - Add notification of maintenance mode to README. (#410)
  - Fix generation of methods with abnormal page token conventions. (#338)
  - Raise ValueError is credentials and developerKey are both specified. (#358)
  - Re-generate documentation. (#364, #373, #401)
  - Fix method signature documentation for multiline required parameters. (#374)
  - Fix ZeroDivisionError in MediaDownloadProgress.progress. (#377)
  - Fix dead link to WebTest in README. (#378)
  - Fix details missing in googleapiclient.errors.HttpError. (#412)
  - Don't treat httplib2.Credentials as oauth credentials. (#425)
  - Various fixes to the Django sample. (#413)

### v1.6.2
  Version 1.6.2

  Bugfix release

  - Fixed a bug where application default credentials would still be used even
    when a developerKey was specified. (#347)
  - Official support for Python 3.5 and 3.6. (#341)
 
### v1.6.1
  Version 1.6.1

  Bugfix release

  - Fixed a bug where using google-auth with scoped credentials would fail. (#328)

### v1.6.0
  Version 1.6.0

  Release to drop support for Python 2.6 and add support for google-auth.

  - Support for Python 2.6 has been dropped. (#319)
  - The credentials argument to discovery.build and discovery.build_from_document
    can be either oauth2client credentials or google-auth credentials. (#319)
  - discovery.build and discovery.build_from_document now unambiguously use the
    http argument to make all requests, including the request for the discovery
    document. (#319)
  - The http and credentials arguments to discovery.build and
    discovery.build_from_document are now mutually exclusive, eliminating a
    buggy edge case. (#319)
  - If neither http or credentials is specified to discovery.build and
    discovery.build_from_document, then Application Default Credentials will
    be used. The library prefers google-auth for this if it is available, but
    can also use oauth2client's implementation. (#319)
  - Fixed resumable upload failure when receiving a 308 response. (#312)
  - Clarified the support versions of Python 3. (#316)

### v1.5.5
  Version 1.5.5

  Bugfix release

  - Allow explicit MIME type specification with media_mime_type keyword argument.
  - Fix unprintable representation of BatchError with default constructor. (#165)
  - Refresh all discovery docs, not just the preferred ones. (#298)
  - Update minimum httplib2 dependency to >=0.9.2.

### v1.5.4
  Version 1.5.4

  Bugfix release

  - Properly handle errors when the API returns a mapping or sequence. (#289)
  - Upgrade to unified uritemplate 3.0.0. (#293)
  - Allow oauth2client 4.0.0, with the caveat that file-based discovery
    caching is disabled.

### v1.5.3
  Version 1.5.3

  Bugfix release

  - Fixed import error with oauth2client >= 3.0.0. (#270)

### v1.5.2
  Version 1.5.2

  Bugfix release

  - Allow using oauth2client >= 1.5.0, < 4.0.0. (#265)
  - Fix project_id argument description. (#257)
  - Retry chunk uploaded on rate limit exceeded errors. (#255)
  - Obtain access token if necessary in BatchHttpRequest.execute(). (#232)
  - Warn when running tests using HttpMock without having a cache. (#261)

### v1.5.1
  Version 1.5.1

  Bugfix release

  - Allow using versions of oauth2client < 2.0.0. (#197)
  - Check both current and new API discovery URL. (#202)
  - Retry http requests on connection errors and timeouts. (#218)
  - Retry http requests on rate limit responses. (#201)
  - Import guards for ssl (for Google App Engine). (#220)
  - Use named loggers instead of the root logger. (#206)
  - New search console example. (#212)

### v1.5.0
  Version 1.5.0

  Release to support oauth2client >= 2.0.0.

  - Fix file stream recognition in Python 3 (#141)
  - Fix non-resumable binary uploads in Python 3 (#147)
  - Default to 'octet-stream' if mimetype detection fails (#157)
  - Handle SSL errors with retries (#160)
  - Fix incompatibility with oauth2client v2.0.0 (#182)

### v1.4.2
  Version 1.4.2

  Add automatic caching for the discovery docs.

### v1.4.1
  Version 1.4.1

  Add the googleapiclient.discovery.Resource.new_batch_http_request method.

### v1.4.0
  Version 1.4.0

  Python 3 support.

### v1.3.2
  Version 1.3.2

  Small bugfix release.

  - Fix an infinite loop for downloading small files.
  - Fix a unicode error in error encoding.
  - Better handling of `content-length` in media requests.
  - Add support for methodPath entries containing colon.

### v1.3.1
  Version 1.3.1

  Quick release for a fix around aliasing in v1.3.

### v1.3
  Version 1.3

  Add support for the Google Application Default Credentials.
  Require python 2.6 as a minimum version.
  Update several API samples.
  Finish splitting out oauth2client repo and update tests.
  Various doc cleanup and bugfixes.

  Two important notes:
    * We've added `googleapiclient` as the primary suggested import
      name, and kept `apiclient` as an alias, in order to have a more
      appropriate import name. At some point, we will remove `apiclient`
      as an alias.
    * Due to an issue around in-place upgrades for Python packages,
      it's not possible to do an upgrade from version 1.2 to 1.3. Instead,
      setup.py attempts to detect this and prevents it. Simply remove
      the previous version and reinstall to fix this.

### v1.2
  Version 1.2

  The use of the gflags library is now deprecated, and is no longer a
    dependency. If you are still using the oauth2client.tools.run() function
    then include gflags as a dependency of your application or switch to
    oauth2client.tools.run_flow.
  Samples have been updated to use the new apiclient.sample_tools, and no
    longer use gflags.
  Added support for the experimental Object Change Notification, as found in
    the Cloud Storage API.
  The oauth2client App Engine decorators are now threadsafe.

  - Use the following redirects feature of httplib2 where it returns the
    ultimate URL after a series of redirects to avoid multiple hops for every
    resumable media upload request.
  - Updated AdSense Management API samples to V1.3
  - Add option to automatically retry requests.
  - Ability to list registered keys in multistore_file.
  - User-agent must contain (gzip).
  - The 'method' parameter for httplib2 is not positional. This would cause
    spurious warnings in the logging.
  - Making OAuth2Decorator more extensible. Fixes Issue 256.
  - Update AdExchange Buyer API examples to version v1.2.


### v1.1
  Version 1.1

  Add PEM support to SignedJWTAssertionCredentials (used to only support
  PKCS12 formatted keys). Note that if you use PEM formatted keys you can use
  PyCrypto 2.6 or later instead of OpenSSL.

  Allow deserialized discovery docs to be passed to build_from_document().

  - Make ResumableUploadError derive from HttpError.
  - Many changes to move all the closures in apiclient.discovery into real
  -  classes and objects.
  - Make from_json behavior inheritable.
  - Expose the full token response in OAuth2Client and OAuth2Decorator.
  - Handle reasons that are None.
  - Added support for NDB based storing of oauth2client objects.
  - Update grant_type for AssertionCredentials.
  - Adding a .revoke() to Credentials. Closes issue 98.
  - Modify oauth2client.multistore_file to store and retrieve credentials
    using an arbitrary key.
  - Don't accept 403 challenges by default for auth challenges.
  - Set httplib2.RETRIES to 1.
  - Consolidate handling of scopes.
  - Upgrade to httplib2 version 0.8.
  - Allow setting the response_type in OAuth2WebServerFlow.
  - Ensure that dataWrapper feature is checked before using the 'data' value.
  - HMAC verification does not use a constant time algorithm.

### v1.0
 Version 1.0

  - Changes to the code for running tests and building releases.

### v1.0c3
 Version 1.0 Release Candidate 3

  - In samples and oauth2 decorator, escape untrusted content before displaying it.
  - Do not allow credentials files to be symlinks.
  - Add XSRF protection to oauth2decorator callback 'state'.
  - Handle uploading chunked media by stream.
  - Handle passing streams directly to httplib2.
  - Add support for Google Compute Engine service accounts.
  - Flows no longer need to be saved between uses.
  - Change GET to POST if URI is too long. Fixes issue #96.
  - Add a keyring based Storage.
  - More robust picking up JSON error responses.
  - Make batch errors align with normal errors.
  - Add a Google Compute sample.
  - Token refresh to work with 'old' GData API
  - Loading of client_secrets JSON file backed by a cache.
  - Switch to new discovery path parameters.
  - Add support for additionalProperties when printing schema'd objects.
  - Fix media upload parameter names. Reviewed in http://codereview.appspot.com/6374062/
  - oauth2client support for URL-encoded format of exchange token response (e.g.  Facebook)
  - Build cleaner and easier to read docs for dynamic surfaces.

### v1.0c2
 Version 1.0 Release Candidate 2

  - Parameter values of None should be treated as missing. Fixes issue #144.
  - Distribute the samples separately from the library source. Fixes issue #155.
  - Move all remaining samples over to client_secrets.json. Fixes issue #156.
  - Make locked_file.py understand win32file primitives for better awesomeness.

### v1.0c1
 Version 1.0 Release Candidate 1

 - Documentation for the library has switched to epydoc:
     http://google-api-python-client.googlecode.com/hg/docs/epy/index.html
 - Many improvements for media support:
   * Added media download support, including resumable downloads.
   * Better handling of streams that report their size as 0.
   * Update Media Upload to include io.Base and also fix some bugs.
 - OAuth bug fixes and improvements.
   * Remove OAuth 1.0 support.
   * Added credentials_from_code and credentials_from_clientsecrets_and_code.
   * Make oauth2client support Windows-friendly locking.
   * Fix bug in StorageByKeyName.
   * Fix None handling in Django fields. Reviewed in http://codereview.appspot.com/6298084/. Fixes issue #128.
 - Add epydoc generated docs. Reviewed in http://codereview.appspot.com/6305043/
 - Move to PEP386 compliant version numbers.
 - New and updated samples
   * Ad Exchange Buyer API v1 code samples.
   * Automatically generate Samples wiki page from README files.
   * Update Google Prediction samples.
   * Add a Tasks sample that demonstrates Service accounts.
   * new analytics api samples. Reviewed here: http://codereview.appspot.com/5494058/
 - Convert all inline samples to the Farm API for consistency.

### v1.0beta8
 - Updated meda upload support.
 - Many fixes for batch requests.
 - Better handling for requests that don't require a body.
 - Fix issues with Google App Engine Python 2.7 runtime.
 - Better support for proxies.
 - All Storages now have a .delete() method.
 - Important changes which might break your code:
    * apiclient.anyjson has moved to oauth2client.anyjson.
    * Some calls, for example, taskqueue().lease() used to require a parameter
      named body. In this new release only methods that really need to send a body
      require a body parameter, and so you may get errors about an unknown
      'body' parameter in your call. The solution is to remove the unneeded
      body={} parameter.

### v1.0beta7
 - Support for batch requests.  http://code.google.com/p/google-api-python-client/wiki/Batch
 - Support for media upload.  http://code.google.com/p/google-api-python-client/wiki/MediaUpload
 - Better handling for APIs that return something other than JSON.
 - Major cleanup and consolidation of the samples.
 - Bug fixes and other enhancements:
   72  Defect  Appengine OAuth2Decorator: Convert redirect address to string
   22  Defect  Better error handling for unknown service name or version
   48  Defect  StorageByKeyName().get() has side effects
   50  Defect  Need sample client code for Admin Audit API
   28  Defect  better comments for app engine sample   Nov 9
   63  Enhancement Let OAuth2Decorator take a list of scope
