Skip to content

Commit

Permalink
fix: (regression) body boolean must be sent as boolean (#34)
Browse files Browse the repository at this point in the history
Signed-off-by: Jean-Tiare Le Bigot <jean-tiare.le-bigot@corp.ovh.com>
  • Loading branch information
yadutaf committed Jul 18, 2016
1 parent 48e9278 commit a89a8d9
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,4 +1,5 @@
# execution artefacts
*.swp
*.pyc
.coverage

Expand Down
25 changes: 16 additions & 9 deletions ovh/client.py
Expand Up @@ -289,27 +289,34 @@ def _canonicalize_kwargs(self, kwargs):
can be prefixed with an underscore. For example, ``from`` argument of
``POST /email/domain/{domain}/redirection`` may be replaced by ``_from``
This function also handles Python booleans which should be serialized
using solely lowercase to be recognized by the API.
:param dict kwargs: input kwargs
:return dict: filtered kawrgs
"""
arguments = {}

for k, v in kwargs.items():
# Handle Python keywork collision
if k[0] == '_' and k[1:] in keyword.kwlist:
k = k[1:]
arguments[k] = v

return arguments

# Handle Booleans
def _prepare_query_string(self, kwargs):
"""
Boolean needs to be send as lowercase 'false' or 'true' in querystring.
This function prepares arguments for querystring and encodes them.
:param dict kwargs: input kwargs
:return string: prepared querystring
"""
arguments = {}

for k, v in kwargs.items():
if isinstance(v, bool):
v = str(v).lower()

# Commit
arguments[k] = v

return arguments
return urlencode(arguments)

def get(self, _target, _need_auth=True, **kwargs):
"""
Expand All @@ -325,7 +332,7 @@ def get(self, _target, _need_auth=True, **kwargs):
"""
if kwargs:
kwargs = self._canonicalize_kwargs(kwargs)
query_string = urlencode(kwargs)
query_string = self._prepare_query_string(kwargs)
if '?' in _target:
_target = '%s&%s' % (_target, query_string)
else:
Expand Down
2 changes: 2 additions & 0 deletions tests/test_client.py
Expand Up @@ -213,6 +213,7 @@ def test_post(self, m_call):
'arg1': object(),
'arg2': object(),
'arg3': object(),
'arg4': False,
}

api = Client(ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET, CONSUMER_KEY)
Expand All @@ -225,6 +226,7 @@ def test_put(self, m_call):
'arg1': object(),
'arg2': object(),
'arg3': object(),
'arg4': False,
}

api = Client(ENDPOINT, APPLICATION_KEY, APPLICATION_SECRET, CONSUMER_KEY)
Expand Down

0 comments on commit a89a8d9

Please sign in to comment.