diff --git a/marconiclient/common/http.py b/marconiclient/common/http.py new file mode 100644 index 00000000..a242011b --- /dev/null +++ b/marconiclient/common/http.py @@ -0,0 +1,62 @@ +# Copyright (c) 2013 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json + +import requests + + +class Client(object): + + def __init__(self, *args, **kwargs): + self.session = requests.session(*args, **kwargs) + + def get(self, *args, **kwargs): + """Does http GET.""" + return self.session.get(*args, **kwargs) + + def head(self, *args, **kwargs): + """Does http HEAD.""" + return self.session.head(*args, **kwargs) + + def option(self, *args, **kwargs): + """Does http OPTION.""" + return self.session.option(*args, **kwargs) + + def post(self, *args, **kwargs): + """Does http POST.""" + + if "data" in kwargs: + kwargs['data'] = json.dumps(kwargs["data"]) + + return self.session.post(*args, **kwargs) + + def put(self, *args, **kwargs): + """Does http PUT.""" + + if "data" in kwargs: + kwargs['data'] = json.dumps(kwargs["data"]) + + return self.session.put(*args, **kwargs) + + def delete(self, *args, **kwargs): + """Does http DELETE.""" + return self.session.delete(*args, **kwargs) + + def patch(self, *args, **kwargs): + """Does http PATCH.""" + if "data" in kwargs: + kwargs['data'] = json.dumps(kwargs["data"]) + return self.session.patch(*args, **kwargs) diff --git a/tests/unit/common/test_http.py b/tests/unit/common/test_http.py new file mode 100644 index 00000000..91515bcf --- /dev/null +++ b/tests/unit/common/test_http.py @@ -0,0 +1,38 @@ +# Copyright (c) 2013 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json + +import mock + +from marconiclient.common import http +from marconiclient.tests import base + + +class TestCommonHttp(base.TestBase): + + def setUp(self): + super(TestCommonHttp, self).setUp() + self.client = http.Client() + + def test_data_serialization(self): + data = {'some': 'data'} + + for method in ['post', 'put', 'patch']: + with mock.patch.object(self.client.session, method, + autospec=True) as request_method: + request_method.return_value = True + getattr(self.client, method)("url", data=data) + request_method.assert_called_with('url', data=json.dumps(data))