summaryrefslogtreecommitdiff
path: root/openid
diff options
context:
space:
mode:
authorVlastimil Zíma <vlastimil.zima@nic.cz>2018-01-31 19:12:23 +0100
committerVlastimil Zíma <vlastimil.zima@nic.cz>2018-02-02 19:00:27 +0100
commit65978bc1d99328a25506bd3334fe2bcc6aacabfc (patch)
tree0bd03e00bf362d735aa3acd00b52eb9b3c7b588f /openid
parent9b848d41ded88e1e02f502ef45d7e2b936a81a6a (diff)
downloadopenid-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.py33
-rw-r--r--openid/test/test_message.py35
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})