Open
Description
Environment details
- OS type and version: macOS 14.3.1 (23D60)
- Python version: Python 3.12.2
- pip version: pip 24.0
google-api-python-client
version: Version: 2.122.0
Steps to reproduce
- Use a HttpMockSequence to mock out the http client
- Create a service
- Call close() on the service
- AttributeError :(
Code example
from googleapiclient.http import HttpMockSequence
from googleapiclient.discovery import build
http = HttpMockSequence([
({'status': '200'}, {})
])
with build('drive', 'v3', http=http) as service:
pass
# or
# build('drive', 'v3', http=http).close()
Using build in a context manager is recommended by https://github.com/googleapis/google-api-python-client/blob/main/docs/start.md to ensure that service (and underlying http resources) are cleaned up.
Httplib2 has close() method that was added ~5 years ago.
Stack trace
Traceback (most recent call last):
File "~/test.py", line 8, in <module>
with build('drive', 'v3', http=http) as service:
File "~/.venv/lib/python3.12/site-packages/googleapiclient/discovery.py", line 1422, in __exit__
self.close()
File "~/.venv/lib/python3.12/site-packages/googleapiclient/discovery.py", line 1429, in close
self._http.close()
^^^^^^^^^^^^^^^^
AttributeError: 'HttpMockSequence' object has no attribute 'close'
I think HttpMockSequence is just missing the close() method. TBH I just started using this library, but after a bunch of searching I think I'm using it as recommended, and I'm surprised that I'm the first to stumbled across this / report this.
Thanks for any help, and I'm happy to send a PR fixing the issue.