diff options
author | Vlastimil Zíma <vlastimil.zima@nic.cz> | 2018-01-31 19:12:23 +0100 |
---|---|---|
committer | Vlastimil Zíma <vlastimil.zima@nic.cz> | 2018-02-02 19:00:27 +0100 |
commit | 65978bc1d99328a25506bd3334fe2bcc6aacabfc (patch) | |
tree | 0bd03e00bf362d735aa3acd00b52eb9b3c7b588f /openid | |
parent | 9b848d41ded88e1e02f502ef45d7e2b936a81a6a (diff) | |
download | openid-65978bc1d99328a25506bd3334fe2bcc6aacabfc.tar.gz |
Refactor Message namespaces
* Deprecate 'setOpenIDNamespace' method
* Deprecate 'UndefinedOpenIDNamespace' exception
* Drop private '_openid_ns_uri' attribute
Diffstat (limited to 'openid')
-rw-r--r-- | openid/message.py | 33 | ||||
-rw-r--r-- | openid/test/test_message.py | 35 |
2 files changed, 45 insertions, 23 deletions
diff --git a/openid/message.py b/openid/message.py index c7d5323..1a843c9 100644 --- a/openid/message.py +++ b/openid/message.py @@ -61,6 +61,9 @@ OPENID_PROTOCOL_FIELDS = [ class UndefinedOpenIDNamespace(ValueError): """Raised if the generic OpenID namespace is accessed when there is no OpenID namespace set for this message.""" + def __init__(self, *args, **kwargs): + warnings.warn("UndefinedOpenIDNamespace exception is deprecated.", DeprecationWarning) + super(UndefinedOpenIDNamespace, self).__init__(*args, **kwargs) class InvalidOpenIDNamespace(ValueError): @@ -144,11 +147,9 @@ class Message(object): """ self.args = {} self.namespaces = NamespaceMap() - if openid_namespace is None: - self._openid_ns_uri = None - else: + if openid_namespace is not None: implicit = openid_namespace in OPENID1_NAMESPACES - self.setOpenIDNamespace(openid_namespace, implicit) + self._setOpenIDNamespace(openid_namespace, implicit) @classmethod def fromPostArgs(cls, args): @@ -204,13 +205,13 @@ class Message(object): self.namespaces.addAlias(value, ns_key) elif ns_alias == NULL_NAMESPACE and ns_key == 'ns': # null namespace - self.setOpenIDNamespace(value, False) + self._setOpenIDNamespace(value, False) else: ns_args.append((ns_alias, ns_key, value)) # Implicitly set an OpenID namespace definition (OpenID 1) if not self.getOpenIDNamespace(): - self.setOpenIDNamespace(OPENID1_NS, True) + self._setOpenIDNamespace(OPENID1_NS, True) # Actually put the pairs into the appropriate namespaces for (ns_alias, ns_key, value) in ns_args: @@ -237,7 +238,7 @@ class Message(object): else: return None - def setOpenIDNamespace(self, openid_ns_uri, implicit): + def _setOpenIDNamespace(self, openid_ns_uri, implicit): """Set the OpenID namespace URI used in this message. @raises InvalidOpenIDNamespace: if the namespace is not in @@ -247,10 +248,19 @@ class Message(object): raise InvalidOpenIDNamespace(openid_ns_uri) self.namespaces.addAlias(openid_ns_uri, NULL_NAMESPACE, implicit) - self._openid_ns_uri = openid_ns_uri + + def setOpenIDNamespace(self, openid_ns_uri, implicit): + """Set the OpenID namespace URI used in this message. + + @raises InvalidOpenIDNamespace: if the namespace is not in + L{Message.allowed_openid_namespaces} + """ + warnings.warn("Method 'setOpenIDNamespace' is deprecated. Pass namespace to Message constructor instead.", + DeprecationWarning) + self._setOpenIDNamespace(openid_ns_uri, implicit) def getOpenIDNamespace(self): - return self._openid_ns_uri + return self.namespaces.getNamespaceURI(NULL_NAMESPACE) def isOpenID1(self): return self.getOpenIDNamespace() in OPENID1_NAMESPACES @@ -379,10 +389,9 @@ class Message(object): @type namespace: str or unicode or BARE_NS or OPENID_NS """ if namespace == OPENID_NS: - if self._openid_ns_uri is None: + namespace = self.getOpenIDNamespace() + if namespace is None: raise UndefinedOpenIDNamespace('OpenID namespace not set') - else: - namespace = self._openid_ns_uri if namespace != BARE_NS and type(namespace) not in [str, unicode]: raise TypeError( diff --git a/openid/test/test_message.py b/openid/test/test_message.py index 1ccc090..32d8ee6 100644 --- a/openid/test/test_message.py +++ b/openid/test/test_message.py @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*- import unittest import urllib +import warnings from urlparse import parse_qs +from testfixtures import ShouldWarn + from openid import oidutil from openid.extensions import sreg from openid.message import (BARE_NS, NULL_NAMESPACE, OPENID1_NS, OPENID2_NS, OPENID_NS, OPENID_PROTOCOL_FIELDS, @@ -839,8 +842,15 @@ class MessageTest(unittest.TestCase): self._checkForm(html, m, self.action_url, tag_attrs, self.submit_text) - def test_setOpenIDNamespace_invalid(self): - m = Message() + def test_setOpenIDNamespace_deprecated(self): + message = Message() + warning_msg = "Method 'setOpenIDNamespace' is deprecated. Pass namespace to Message constructor instead." + with ShouldWarn(DeprecationWarning(warning_msg)): + warnings.simplefilter('always') + message.setOpenIDNamespace(OPENID2_NS, False) + self.assertEqual(message.getOpenIDNamespace(), OPENID2_NS) + + def test_openid_namespace_invalid(self): invalid_things = [ # Empty string is not okay here. '', @@ -853,9 +863,15 @@ class MessageTest(unittest.TestCase): # This is a Type URI, not a openid.ns value. 'http://specs.openid.net/auth/2.0/signon', ] + warning_msg = "Method 'setOpenIDNamespace' is deprecated. Pass namespace to Message constructor instead." for x in invalid_things: - self.assertRaises(InvalidOpenIDNamespace, m.setOpenIDNamespace, x, False) + self.assertRaises(InvalidOpenIDNamespace, Message, x, False) + # Test also deprecated setOpenIDNamespace + message = Message() + with ShouldWarn(DeprecationWarning(warning_msg)): + warnings.simplefilter('always') + self.assertRaises(InvalidOpenIDNamespace, message.setOpenIDNamespace, x, False) def test_isOpenID1(self): v1_namespaces = [ @@ -877,19 +893,16 @@ class MessageTest(unittest.TestCase): self.assertFalse(m.namespaces.isImplicit(NULL_NAMESPACE)) self.assertEqual(m.getOpenIDNamespace(), ns) - def test_setOpenIDNamespace_explicit(self): - m = Message() - m.setOpenIDNamespace(THE_OTHER_OPENID1_NS, False) + def test_openid1_namespace_explicit(self): + m = Message(THE_OTHER_OPENID1_NS, False) self.assertFalse(m.namespaces.isImplicit(THE_OTHER_OPENID1_NS)) - def test_setOpenIDNamespace_implicit(self): - m = Message() - m.setOpenIDNamespace(THE_OTHER_OPENID1_NS, True) + def test_openid1_namespace_implicit(self): + m = Message(THE_OTHER_OPENID1_NS, True) self.assertTrue(m.namespaces.isImplicit(THE_OTHER_OPENID1_NS)) def test_explicitOpenID11NSSerialzation(self): - m = Message() - m.setOpenIDNamespace(THE_OTHER_OPENID1_NS, implicit=False) + m = Message(THE_OTHER_OPENID1_NS, False) post_args = m.toPostArgs() self.assertEqual(post_args, {'openid.ns': THE_OTHER_OPENID1_NS}) |