diff options
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/__init__.py | 9 | ||||
-rw-r--r-- | gitlab/tests/test_gitlab.py | 16 |
2 files changed, 20 insertions, 5 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py index e50a2a7..8f26670 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -41,15 +41,14 @@ warnings.simplefilter('always', DeprecationWarning) def _sanitize(value): + if isinstance(value, dict): + return dict((k, _sanitize(v)) + for k, v in six.iteritems(value)) if isinstance(value, six.string_types): return value.replace('/', '%2F') return value -def _sanitize_dict(src): - return dict((k, _sanitize(v)) for k, v in src.items()) - - class Gitlab(object): """Represents a GitLab server connection. @@ -213,7 +212,7 @@ class Gitlab(object): def _construct_url(self, id_, obj, parameters): if 'next_url' in parameters: return parameters['next_url'] - args = _sanitize_dict(parameters) + args = _sanitize(parameters) if id_ is None and obj._urlPlural is not None: url = obj._urlPlural % args else: diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index dc31875..337320f 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -27,9 +27,25 @@ from httmock import HTTMock # noqa from httmock import response # noqa from httmock import urlmatch # noqa +import gitlab from gitlab import * # noqa +class TestSanitize(unittest.TestCase): + def test_do_nothing(self): + self.assertEqual(1, gitlab._sanitize(1)) + self.assertEqual(1.5, gitlab._sanitize(1.5)) + self.assertEqual("foo", gitlab._sanitize("foo")) + + def test_slash(self): + self.assertEqual("foo%2Fbar", gitlab._sanitize("foo/bar")) + + def test_dict(self): + source = {"url": "foo/bar", "id": 1} + expected = {"url": "foo%2Fbar", "id": 1} + self.assertEqual(expected, gitlab._sanitize(source)) + + class TestGitlabRawMethods(unittest.TestCase): def setUp(self): self.gl = Gitlab("http://localhost", private_token="private_token", |