Made utils.merge_dict None-safe, and removed lots of "thing or {}"

This commit is contained in:
2016-03-11 10:24:19 +01:00
parent 9284671ca7
commit b690755b84
3 changed files with 25 additions and 9 deletions

View File

@@ -30,7 +30,7 @@ class Api(object):
password='PASSWORD'
)
"""
kwargs = utils.merge_dict(options or {}, kwargs)
kwargs = utils.merge_dict(options, kwargs)
self.endpoint = kwargs["endpoint"]
self.username = kwargs["username"]
@@ -50,7 +50,6 @@ class Api(object):
token=kwargs["token"] if kwargs.get("token") else None)
return Api._api_singleton
def basic_auth(self, token=None):
"""Returns base64 encoded token. Used to encode credentials
for retrieving the token.
@@ -92,7 +91,7 @@ class Api(object):
:param files: Dictionary of files to be uploaded via POST
"""
http_headers = utils.merge_dict(self.headers(), headers or {})
http_headers = utils.merge_dict(self.headers(), headers)
if http_headers.get('Pillar-Request-Id'):
logging.info("Pillar-Request-Id: {0}".format(http_headers['Pillar-Request-Id']))
@@ -122,7 +121,6 @@ class Api(object):
"""
response = requests.request(method, url, **kwargs)
try:
error = self.handle_response(response,
response.content.decode('utf-8'))
@@ -186,28 +184,28 @@ class Api(object):
"""Make GET request
"""
return self.request(utils.join_url(self.endpoint, action), 'GET',
headers=headers or {})
headers=headers)
def post(self, action, params=None, headers=None, files=None):
"""Make POST request
"""
return self.request(utils.join_url(self.endpoint, action), 'POST',
body=params or {}, headers=headers or {}, files=files)
body=params, headers=headers, files=files)
def put(self, action, params=None, headers=None):
"""Make PUT request
"""
return self.request(utils.join_url(self.endpoint, action), 'PUT',
body=params or {}, headers=headers or {})
body=params, headers=headers)
def patch(self, action, params=None, headers=None, files=None):
"""Make PATCH request
"""
return self.request(utils.join_url(self.endpoint, action), 'PATCH',
body=params or {}, headers=headers or {}, files=files)
body=params, headers=headers, files=files)
def delete(self, action, headers=None):
"""Make DELETE request
"""
return self.request(utils.join_url(self.endpoint, action), 'DELETE',
headers=headers or {})
headers=headers)

View File

@@ -72,9 +72,18 @@ def merge_dict(data, *override):
>>> md = merge_dict({"foo": "bar"}, {1: 2}, {"foo1": "bar2"})
>>> md == {1: 2, 'foo': 'bar', 'foo1': 'bar2'}
True
>>> merge_dict({'foo': 'bar'}, None)
{'foo': 'bar'}
>>> merge_dict(None, {'foo': 'bar'})
{'foo': 'bar'}
>>> merge_dict(None, None)
{}
"""
result = {}
for current_dict in (data,) + override:
if current_dict is None:
continue
result.update(current_dict)
return result

View File

@@ -41,3 +41,12 @@ class PillarUtilsTests(unittest.TestCase):
# Test unicode value in string
self.assertEqual('url?dict=' + quote_plus(r'{"food": "\u0e1c\u0e31\u0e14\u0e44\u0e17\u0e22"}'),
utils.join_url_params('url', {'dict': {'food': 'ผัดไทย'}}))
def test_merge_dict(self):
self.assertEqual({1: 2, 'foo': 'bar', 'foo1': 'bar2'},
utils.merge_dict({"foo": "bar"}, {1: 2}, {"foo1": "bar2"}))
self.assertEqual({'foo': 'bar'}, utils.merge_dict({'foo': 'bar'}, None))
self.assertEqual({'foo': 'bar'}, utils.merge_dict(None, {'foo': 'bar'}))
self.assertEqual({}, utils.merge_dict(None, None))