From 726a925c052843b6eadc18c1d9e862bfa06bca4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Skuza?= Date: Tue, 12 Nov 2019 13:08:27 +0100 Subject: [PATCH 1/2] multiple xml nodes with the same tag_name are joined into one list in cas_response.attributes --- cas_client/_version.py | 2 +- cas_client/cas_client.py | 9 ++++++++- tests/test.py | 9 +++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cas_client/_version.py b/cas_client/_version.py index fc0b707..ae7ffe9 100644 --- a/cas_client/_version.py +++ b/cas_client/_version.py @@ -1,3 +1,3 @@ -__version_info__ = (1, 0, 0) +__version_info__ = (1, 1, 0) __version__ = '.'.join(str(_) for _ in __version_info__) diff --git a/cas_client/cas_client.py b/cas_client/cas_client.py index a7ac9e7..d2385e9 100644 --- a/cas_client/cas_client.py +++ b/cas_client/cas_client.py @@ -570,7 +570,14 @@ def _parse_cas_xml_data(cls, xml_node, namespace='cas:'): result[tag_name] = text elif child.nodeType == child.ELEMENT_NODE: subresult = cls._parse_cas_xml_data(child) - result.setdefault(tag_name, {}).update(subresult) + element=result.setdefault(tag_name, {}) + for key in subresult.keys(): + if key in element: + if not isinstance(element[key], list): + element[key] = [ element[key] ] + element[key].append(subresult[key]) + else: + element.update(subresult) return result diff --git a/tests/test.py b/tests/test.py index 659fc51..c1cdca3 100644 --- a/tests/test.py +++ b/tests/test.py @@ -15,6 +15,8 @@ class TestCase(unittest.TestCase): + maxDiff = None + response_text = """ @@ -25,6 +27,8 @@ class TestCase(unittest.TestCase): Ott Jeffrey A Jeffrey A Ott + user + manager 0012345678 @@ -63,6 +67,7 @@ class TestCase(unittest.TestCase): def test_success(self): response = CASResponse(self.response_text) self.assertTrue(response.success) + self.assertListEqual(response.attributes[u'role'], [ u'user', u'manager' ]) self.assertEqual(response.attributes, { u'i2a2characteristics': u'0,3592,2000', u'puid': u'0012345678', @@ -70,6 +75,7 @@ def test_success(self): u'lastname': u'Ott', u'fullname': u'Jeffrey A Ott', u'email': u'jott@purdue.edu', + u'role': [ u'user', u'manager' ], }) self.assertEqual(response.response_type, 'authenticationSuccess') self.assertEqual(response.user, 'jott') @@ -100,6 +106,7 @@ def test_perform_service_validate(self): u'lastname': u'Ott', u'fullname': u'Jeffrey A Ott', u'email': u'jott@purdue.edu', + u'role': [ u'user', u'manager' ], }) self.assertEqual(response.response_type, 'authenticationSuccess') self.assertEqual(response.user, 'jott') @@ -119,6 +126,7 @@ def test_perform_service_validate_separate_url(self): headers=None ) self.assertTrue(response.success) + self.assertListEqual(response.attributes[u'role'], [ u'user', u'manager' ]) self.assertEqual(response.attributes, { u'i2a2characteristics': u'0,3592,2000', u'puid': u'0012345678', @@ -126,6 +134,7 @@ def test_perform_service_validate_separate_url(self): u'lastname': u'Ott', u'fullname': u'Jeffrey A Ott', u'email': u'jott@purdue.edu', + u'role': [ u'user', u'manager' ], }) self.assertEqual(response.response_type, 'authenticationSuccess') self.assertEqual(response.user, 'jott') From bf882ca81300661b25d5e33b467691e744bb3749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Skuza?= Date: Tue, 19 Nov 2019 10:00:35 +0100 Subject: [PATCH 2/2] ignore vim swp files --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 1dbc687..bc24363 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,7 @@ target/ #Ipython Notebook .ipynb_checkpoints + +#vim +*.swp +