summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab')
-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",