Skip to content

Commit 22788da

Browse files
aawilsoncrwilcoxleahecole
authored
fix: Replace default file_cache usage with simple memory cache (#4184)
* fix: Replace default file_cache usage with simple memory cache The original main.py creates noisy log messages when the function is run file_cache is unavailable when using oauth2client >= 4.0.0: ``` 2020-06-26T19:34:03.459Z datastore_export file_cache is unavailable when using oauth2client >= 4.0.0 or google-auth E datastore_export 2020-06-26T19:34:03.459Z datastore_export Traceback (most recent call last): E datastore_export 2020-06-26T19:34:03.459Z datastore_export File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 33, in <module> E datastore_export 2020-06-26T19:34:03.459Z datastore_export from oauth2client.contrib.locked_file import LockedFile E datastore_export 2020-06-26T19:34:03.459Z datastore_export ModuleNotFoundError: No module named 'oauth2client' E datastore_export 2020-06-26T19:34:03.459Z datastore_export E datastore_export 2020-06-26T19:34:03.459Z datastore_export During handling of the above exception, another exception occurred: E datastore_export 2020-06-26T19:34:03.459Z datastore_export E datastore_export 2020-06-26T19:34:03.459Z datastore_export Traceback (most recent call last): E datastore_export 2020-06-26T19:34:03.459Z datastore_export File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 37, in <module> E datastore_export 2020-06-26T19:34:03.459Z datastore_export from oauth2client.locked_file import LockedFile E datastore_export 2020-06-26T19:34:03.459Z datastore_export ModuleNotFoundError: No module named 'oauth2client' E datastore_export 2020-06-26T19:34:03.459Z datastore_export E datastore_export 2020-06-26T19:34:03.459Z datastore_export During handling of the above exception, another exception occurred: E datastore_export 2020-06-26T19:34:03.459Z datastore_export E datastore_export 2020-06-26T19:34:03.459Z datastore_export Traceback (most recent call last): E datastore_export 2020-06-26T19:34:03.459Z datastore_export File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/__init__.py", line 44, in autodetect E datastore_export 2020-06-26T19:34:03.459Z datastore_export from . import file_cache E datastore_export 2020-06-26T19:34:03.459Z datastore_export File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 41, in <module> E datastore_export 2020-06-26T19:34:03.459Z datastore_export "file_cache is unavailable when using oauth2client >= 4.0.0 or google-auth" E datastore_export 2020-06-26T19:34:03.459Z datastore_export ImportError: file_cache is unavailable when using oauth2client >= 4.0.0 or google-auth E datastore_export ``` While they don't interfere with the function's operation, they are disconcerting and not necessary. This implements the workaround suggested in googleapis/google-api-python-client#325 (which creates an in-memory cache object to use in replacement). * Add explanatory comment Add a comment explaining the inclusion of MemoryCache instance in the `build` invocation. * Update main.py PEP8-mandated two newlines between top-level elements Co-authored-by: Christopher Wilcox <[email protected]> Co-authored-by: Leah E. Cole <[email protected]>
1 parent f69acf1 commit 22788da

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

datastore/schedule-export/main.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,22 @@
33
import os
44

55
from googleapiclient.discovery import build
6+
from googleapiclient.discovery_cache.base import Cache
67

7-
datastore = build('datastore', 'v1')
8+
9+
class MemoryCache(Cache):
10+
_CACHE = {}
11+
12+
def get(self, url):
13+
return MemoryCache._CACHE.get(url)
14+
15+
def set(self, url, content):
16+
MemoryCache._CACHE[url] = content
17+
18+
19+
# The default cache (file_cache) is unavailable when using oauth2client >= 4.0.0 or google-auth,
20+
# and it will log worrisome messages unless given another interface to use.
21+
datastore = build('datastore', 'v1', cache=MemoryCache())
822
project_id = os.environ.get('GCP_PROJECT')
923

1024

0 commit comments

Comments
 (0)