Make file based Storage thread safe.
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user