diff options
author | Gauvain Pocentek <gauvain.pocentek@objectif-libre.com> | 2016-01-10 17:21:28 +0100 |
---|---|---|
committer | Gauvain Pocentek <gauvain.pocentek@objectif-libre.com> | 2016-01-10 17:21:28 +0100 |
commit | 03d804153f20932226fd3b8a6a5daab5727e878a (patch) | |
tree | 95c1bb029591c98430a5492757f715ce467c8348 | |
parent | 4781fd7e4c3d9d5b343f0c1b0597a8a535d6bdbf (diff) | |
download | gitlab-03d804153f20932226fd3b8a6a5daab5727e878a.tar.gz |
Rework gitlab._sanitize
Make it a recursive function and eliminate _sanitize_dict.
Add unit tests.
-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", |