This repository has been archived by the owner on Nov 5, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 430
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* DictionaryStorage - implements an optionally-locked storage over a dictionary-like object. * Moved optional locking logic into `Storage`, previously this has been duplicated in subclasses. * Removed `flask_util.FlaskSessionStorage` and replaced it with `DictionaryStorage`.
- Loading branch information
Jon Wayne Parrott
committed
Jan 5, 2016
1 parent
2421420
commit 1d4fd27
Showing
11 changed files
with
152 additions
and
66 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
oauth2client.contrib.dictionary_storage module | ||
============================================== | ||
|
||
.. automodule:: oauth2client.contrib.dictionary_storage | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# Copyright 2014 Google Inc. All rights reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
"""Dictionary storage for OAuth2 Credentials.""" | ||
|
||
from oauth2client.client import OAuth2Credentials | ||
from oauth2client.client import Storage | ||
|
||
|
||
class DictionaryStorage(Storage): | ||
"""Store and retrieve credentials to and from a dictionary-like object.""" | ||
|
||
def __init__(self, dictionary, key, lock=None): | ||
"""Construct a DictionaryStorage instance. | ||
Args: | ||
dictionary: A dictionary or dictionary-like object. | ||
key: A string or other hashable. The credentials will be stored in | ||
``dictionary[key]``. | ||
lock: An optional threading.Lock-like object. The lock will be | ||
acquired before anything is written or read from the | ||
dictionary. | ||
""" | ||
super(DictionaryStorage, self).__init__(lock=lock) | ||
self._dictionary = dictionary | ||
self._key = key | ||
|
||
def locked_get(self): | ||
"""Retrieve the credentials from the dictionary, if they exist.""" | ||
serialized = self._dictionary.get(self._key) | ||
|
||
if serialized is None: | ||
return None | ||
|
||
credentials = OAuth2Credentials.from_json(serialized) | ||
credentials.set_store(self) | ||
|
||
return credentials | ||
|
||
def locked_put(self, credentials): | ||
"""Save the credentials to the dictionary.""" | ||
serialized = credentials.to_json() | ||
self._dictionary[self._key] = serialized | ||
|
||
def locked_delete(self): | ||
"""Remove the credentials from the dictionary, if they exist.""" | ||
self._dictionary.pop(self._key, None) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
# Copyright 2014 Google Inc. All rights reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
"""Unit tests for oauth2client.dictionary_storage""" | ||
|
||
import unittest | ||
|
||
from oauth2client import GOOGLE_TOKEN_URI | ||
from oauth2client.client import OAuth2Credentials | ||
from oauth2client.contrib.dictionary_storage import DictionaryStorage | ||
|
||
|
||
__author__ = '[email protected] (Jon Wayne Parrott)' | ||
|
||
|
||
class DictionaryStorageTests(unittest.TestCase): | ||
|
||
def _generate_credentials(self, scopes=None): | ||
return OAuth2Credentials( | ||
'access_tokenz', | ||
'client_idz', | ||
'client_secretz', | ||
'refresh_tokenz', | ||
'3600', | ||
GOOGLE_TOKEN_URI, | ||
'Test', | ||
id_token={ | ||
'sub': '123', | ||
'email': '[email protected]' | ||
}, | ||
scopes=scopes) | ||
|
||
def test_string_key(self): | ||
dictionary = {} | ||
key = 'credentials' | ||
credentials = self._generate_credentials() | ||
storage = DictionaryStorage(dictionary, key) | ||
|
||
storage.put(credentials) | ||
|
||
self.assertTrue(key in dictionary) | ||
|
||
retrieved = storage.get() | ||
|
||
self.assertEqual(retrieved.access_token, credentials.access_token) | ||
|
||
storage.delete() | ||
|
||
self.assertTrue(key not in dictionary) | ||
self.assertTrue(storage.get() is None) | ||
|
||
|
||
if __name__ == '__main__': # pragma: NO COVER | ||
unittest.main() |