summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2016-01-10 17:21:28 +0100
committerGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2016-01-10 17:21:28 +0100
commit03d804153f20932226fd3b8a6a5daab5727e878a (patch)
tree95c1bb029591c98430a5492757f715ce467c8348
parent4781fd7e4c3d9d5b343f0c1b0597a8a535d6bdbf (diff)
downloadgitlab-03d804153f20932226fd3b8a6a5daab5727e878a.tar.gz
Rework gitlab._sanitize
Make it a recursive function and eliminate _sanitize_dict. Add unit tests.
-rw-r--r--gitlab/__init__.py9
-rw-r--r--gitlab/tests/test_gitlab.py16
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",