Package oauth2client :: Module file
[hide private]
[frames] | no frames]

Source Code for Module oauth2client.file

  1  # Copyright (C) 2010 Google Inc. 
  2  # 
  3  # Licensed under the Apache License, Version 2.0 (the "License"); 
  4  # you may not use this file except in compliance with the License. 
  5  # You may obtain a copy of the License at 
  6  # 
  7  #      http://www.apache.org/licenses/LICENSE-2.0 
  8  # 
  9  # Unless required by applicable law or agreed to in writing, software 
 10  # distributed under the License is distributed on an "AS IS" BASIS, 
 11  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 12  # See the License for the specific language governing permissions and 
 13  # limitations under the License. 
 14   
 15  """Utilities for OAuth. 
 16   
 17  Utilities for making it easier to work with OAuth 2.0 
 18  credentials. 
 19  """ 
 20   
 21  __author__ = 'jcgregorio@google.com (Joe Gregorio)' 
 22   
 23  import os 
 24  import stat 
 25  import threading 
 26   
 27  from anyjson import simplejson 
 28  from client import Storage as BaseStorage 
 29  from client import Credentials 
 30   
 31   
32 -class Storage(BaseStorage):
33 """Store and retrieve a single credential to and from a file.""" 34
35 - def __init__(self, filename):
36 self._filename = filename 37 self._lock = threading.Lock()
38
39 - def acquire_lock(self):
40 """Acquires any lock necessary to access this Storage. 41 42 This lock is not reentrant.""" 43 self._lock.acquire()
44
45 - def release_lock(self):
46 """Release the Storage lock. 47 48 Trying to release a lock that isn't held will result in a 49 RuntimeError. 50 """ 51 self._lock.release()
52
53 - def locked_get(self):
54 """Retrieve Credential from file. 55 56 Returns: 57 oauth2client.client.Credentials 58 """ 59 credentials = None 60 try: 61 f = open(self._filename, 'rb') 62 content = f.read() 63 f.close() 64 except IOError: 65 return credentials 66 67 try: 68 credentials = Credentials.new_from_json(content) 69 credentials.set_store(self) 70 except ValueError: 71 pass 72 73 return credentials
74
75 - def _create_file_if_needed(self):
76 """Create an empty file if necessary. 77 78 This method will not initialize the file. Instead it implements a 79 simple version of "touch" to ensure the file has been created. 80 """ 81 if not os.path.exists(self._filename): 82 old_umask = os.umask(0177) 83 try: 84 open(self._filename, 'a+b').close() 85 finally: 86 os.umask(old_umask)
87
88 - def locked_put(self, credentials):
89 """Write Credentials to file. 90 91 Args: 92 credentials: Credentials, the credentials to store. 93 """ 94 95 self._create_file_if_needed() 96 f = open(self._filename, 'wb') 97 f.write(credentials.to_json()) 98 f.close()
99
100 - def locked_delete(self):
101 """Delete Credentials file. 102 103 Args: 104 credentials: Credentials, the credentials to store. 105 """ 106 107 os.unlink(self._filename)
108