Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"ImportError: file_cache is unavailable" when using Python client for Google service account file_cache

I'm using a service account for G Suite with full domain delegation. I have a script with readonly access to Google Calendar. The script works just fine, but throws an error (on a background thread?) when I "build" the service. Here's the code:

from oauth2client.service_account import ServiceAccountCredentials
from httplib2 import Http
import urllib
import requests
from apiclient.discovery import build

cal_id = "[email protected]"

scopes                = ['https://www.googleapis.com/auth/calendar.readonly']
credentials           = ServiceAccountCredentials.from_json_keyfile_name('my_cal_key.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('[email protected]')
http_auth             = delegated_credentials.authorize(Http())

# This is the line that throws the error
cal_service  = build('calendar','v3',http=http_auth)

#Then everything continues to work normally
request = cal_service.events().list(calendarId=cal_id)
response = request.execute()

# etc...

The error thrown is:

WARNING:googleapiclient.discovery_cache:file_cache is unavailable when using oauth2client >= 4.0.0
Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/__init__.py", line 36, in autodetect
    from google.appengine.api import memcache
ImportError: No module named 'google'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 33, in <module>
    from oauth2client.contrib.locked_file import LockedFile
ImportError: No module named 'oauth2client.contrib.locked_file'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 37, in <module>
    from oauth2client.locked_file import LockedFile
ImportError: No module named 'oauth2client.locked_file'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/__init__.py", line 41, in autodetect
    from . import file_cache
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 41, in <module>
    'file_cache is unavailable when using oauth2client >= 4.0.0')
ImportError: file_cache is unavailable when using oauth2client >= 4.0.0

What's going on here and is this something that I can fix? I've tried reinstalling and/or upgrading the google package.

like image 292
Clay Avatar asked Oct 20 '16 12:10

Clay


2 Answers

I am a bit late to the party here but I had a similar problem today and found the answer here

Solution to only the error : file_cache is unavailable when using oauth2client >= 4.0.0

Solution:

change your discovery.build() to have the field cache_discovery=False i.e

discovery.build(api, version, http=http, cache_discovery=False)
like image 90
Tomos Williams Avatar answered Nov 12 '22 14:11

Tomos Williams


The code head of module "google-api-python-client" said...

install_requires = [
     'httplib2>=0.9.2,<1dev',
     'oauth2client>=1.5.0,<5.0.0dev',    <<=============
     'six>=1.6.1,<2dev',
     'uritemplate>=3.0.0,<4dev',
]

So, I have uninstalled oauth2client version 4.0.0

Then, I have downloaded oauth2client 1.5.2 in a tar.gz file from offial python site https://pypi.python.org/pypi/oauth2client/1.5.2

I have installed this downloaded file so I have 1.5.2 version of oauth2client

Package                  Version
------------------------ ---------
certifi                  2016.9.26
discovery                0.0.4
distribute               0.7.3
future                   0.16.0
google-api-python-client 1.5.5
httplib2                 0.9.2
oauth2client             1.5.2
pefile                   2016.3.28
pip                      9.0.1
pyasn1                   0.1.9
pyasn1-modules           0.0.8
PyInstaller              3.2
pypiwin32                219
requests                 2.11.1
rsa                      3.4.2
setuptools               28.8.0
six                      1.10.0
uritemplate              3.0.0

After that, ALL is working OK again and there is no warning message.

like image 11
Ángel Avatar answered Nov 12 '22 14:11

Ángel