blob: b72e3c52ab02bcfbb8bbedbafd4410452d1ce577 [file] [log] [blame]
Joe Gregorio695fdc12011-01-16 16:46:55 -05001# Copyright 2010 Google Inc. All Rights Reserved.
2
3"""Utilities for OAuth.
4
5Utilities for making it easier to work with OAuth 2.0
6credentials.
7"""
8
9__author__ = 'jcgregorio@google.com (Joe Gregorio)'
10
11import pickle
Joe Gregorio560b5322011-02-22 11:09:24 -050012import threading
Joe Gregorio695fdc12011-01-16 16:46:55 -050013
Joe Gregoriodeeb0202011-02-15 14:49:57 -050014from client import Storage as BaseStorage
Joe Gregorio695fdc12011-01-16 16:46:55 -050015
Joe Gregoriodeeb0202011-02-15 14:49:57 -050016
17class Storage(BaseStorage):
Joe Gregorio695fdc12011-01-16 16:46:55 -050018 """Store and retrieve a single credential to and from a file."""
19
20 def __init__(self, filename):
Joe Gregorio7c22ab22011-02-16 15:32:39 -050021 self._filename = filename
Joe Gregorio560b5322011-02-22 11:09:24 -050022 self._lock = threading.Lock()
Joe Gregorio695fdc12011-01-16 16:46:55 -050023
24 def get(self):
25 """Retrieve Credential from file.
26
27 Returns:
Joe Gregorio7c22ab22011-02-16 15:32:39 -050028 oauth2client.client.Credentials
Joe Gregorio695fdc12011-01-16 16:46:55 -050029 """
Joe Gregorio560b5322011-02-22 11:09:24 -050030 self._lock.acquire()
Joe Gregoriodeeb0202011-02-15 14:49:57 -050031 try:
Joe Gregorio7c22ab22011-02-16 15:32:39 -050032 f = open(self._filename, 'r')
Joe Gregoriodeeb0202011-02-15 14:49:57 -050033 credentials = pickle.loads(f.read())
34 f.close()
35 credentials.set_store(self.put)
36 except:
37 credentials = None
Joe Gregorio560b5322011-02-22 11:09:24 -050038 self._lock.release()
Joe Gregorio7c22ab22011-02-16 15:32:39 -050039
Joe Gregorio695fdc12011-01-16 16:46:55 -050040 return credentials
41
42 def put(self, credentials):
43 """Write a pickled Credentials to file.
44
45 Args:
46 credentials: Credentials, the credentials to store.
47 """
Joe Gregorio560b5322011-02-22 11:09:24 -050048 self._lock.acquire()
Joe Gregorio7c22ab22011-02-16 15:32:39 -050049 f = open(self._filename, 'w')
Joe Gregorio695fdc12011-01-16 16:46:55 -050050 f.write(pickle.dumps(credentials))
51 f.close()
Joe Gregorio560b5322011-02-22 11:09:24 -050052 self._lock.release()