Move read-only methods of 'Scoped' into new interface, 'ReadOnlyScoped'. (#195)
Not all subclasses of 'Scoped' can sanely implement 'with_scopes' (e.g, on
GCE the scopes are hard-wired in when creating the GCE node).
Make 'Scoped' derive from 'ReadOnlyScoped', adding the 'with_scopes' method.
Make GCE's 'credentials' class derive from 'ReadOnlyScoped'.
Closes #194.
diff --git a/tests/test_credentials.py b/tests/test_credentials.py
index b5a540d..ae53cd9 100644
--- a/tests/test_credentials.py
+++ b/tests/test_credentials.py
@@ -77,22 +77,20 @@
assert headers['authorization'] == 'Bearer token'
-class ScopedCredentialsImpl(credentials.Scoped, CredentialsImpl):
+class ReadOnnlyScopedCredentialsImpl(credentials.ReadOnnlyScoped,
+ CredentialsImpl):
@property
def requires_scopes(self):
- return super(ScopedCredentialsImpl, self).requires_scopes
-
- def with_scopes(self, scopes):
- raise NotImplementedError
+ return super(ReadOnnlyScopedCredentialsImpl, self).requires_scopes
-def test_scoped_credentials_constructor():
- credentials = ScopedCredentialsImpl()
+def test_readonly_scoped_credentials_constructor():
+ credentials = ReadOnnlyScopedCredentialsImpl()
assert credentials._scopes is None
-def test_scoped_credentials_scopes():
- credentials = ScopedCredentialsImpl()
+def test_readonly_scoped_credentials_scopes():
+ credentials = ReadOnnlyScopedCredentialsImpl()
credentials._scopes = ['one', 'two']
assert credentials.scopes == ['one', 'two']
assert credentials.has_scopes(['one'])
@@ -101,8 +99,8 @@
assert not credentials.has_scopes(['three'])
-def test_scoped_credentials_requires_scopes():
- credentials = ScopedCredentialsImpl()
+def test_readonly_scoped_credentials_requires_scopes():
+ credentials = ReadOnnlyScopedCredentialsImpl()
assert not credentials.requires_scopes