diff --git a/apiclient/ext/file.py b/apiclient/ext/file.py index dba723e..a243fd2 100644 --- a/apiclient/ext/file.py +++ b/apiclient/ext/file.py @@ -8,6 +8,7 @@ Utilities for making it easier to work with OAuth 1.0 credentials. __author__ = 'jcgregorio@google.com (Joe Gregorio)' import pickle +import threading from apiclient.oauth import Storage as BaseStorage @@ -17,6 +18,7 @@ class Storage(BaseStorage): def __init__(self, filename): self._filename = filename + self._lock = threading.Lock() def get(self): """Retrieve Credential from file. @@ -24,6 +26,7 @@ class Storage(BaseStorage): Returns: apiclient.oauth.Credentials """ + self._lock.acquire() try: f = open(self._filename, 'r') credentials = pickle.loads(f.read()) @@ -31,6 +34,7 @@ class Storage(BaseStorage): credentials.set_store(self.put) except: credentials = None + self._lock.release() return credentials @@ -40,6 +44,8 @@ class Storage(BaseStorage): Args: credentials: Credentials, the credentials to store. """ + self._lock.acquire() f = open(self._filename, 'w') f.write(pickle.dumps(credentials)) f.close() + self._lock.release() diff --git a/oauth2client/file.py b/oauth2client/file.py index 12dee91..b72e3c5 100644 --- a/oauth2client/file.py +++ b/oauth2client/file.py @@ -9,6 +9,7 @@ credentials. __author__ = 'jcgregorio@google.com (Joe Gregorio)' import pickle +import threading from client import Storage as BaseStorage @@ -18,6 +19,7 @@ class Storage(BaseStorage): def __init__(self, filename): self._filename = filename + self._lock = threading.Lock() def get(self): """Retrieve Credential from file. @@ -25,6 +27,7 @@ class Storage(BaseStorage): Returns: oauth2client.client.Credentials """ + self._lock.acquire() try: f = open(self._filename, 'r') credentials = pickle.loads(f.read()) @@ -32,6 +35,7 @@ class Storage(BaseStorage): credentials.set_store(self.put) except: credentials = None + self._lock.release() return credentials @@ -41,6 +45,8 @@ class Storage(BaseStorage): Args: credentials: Credentials, the credentials to store. """ + self._lock.acquire() f = open(self._filename, 'w') f.write(pickle.dumps(credentials)) f.close() + self._lock.release()