blob: 17f82e302a9c7a24afb4e266f0e13bb5fd785612 [file] [log] [blame]
# Copyright 2017 Sandvine
#
# All Rights Reserved.
#
# 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.
from io import BytesIO
import pycurl
import json
class Http(object):
def __init__(self, url, user='admin', password='admin'):
self._url = url
self._user = user
self._password = password
self._http_header = None
def set_http_header(self, header):
self._http_header = header
def _get_curl_cmd(self, endpoint):
curl_cmd = pycurl.Curl()
curl_cmd.setopt(pycurl.URL, self._url + endpoint)
curl_cmd.setopt(pycurl.SSL_VERIFYPEER, 0)
curl_cmd.setopt(pycurl.SSL_VERIFYHOST, 0)
curl_cmd.setopt(
pycurl.USERPWD,
'{}:{}'.format(
self._user,
self._password))
if self._http_header:
curl_cmd.setopt(pycurl.HTTPHEADER, self._http_header)
return curl_cmd
def get_cmd(self, endpoint):
data = BytesIO()
curl_cmd = self._get_curl_cmd(endpoint)
curl_cmd.setopt(pycurl.HTTPGET, 1)
curl_cmd.setopt(pycurl.WRITEFUNCTION, data.write)
curl_cmd.perform()
curl_cmd.close()
if data.getvalue():
return json.loads(data.getvalue().decode())
return None
def delete_cmd(self, endpoint):
data = BytesIO()
curl_cmd = self._get_curl_cmd(endpoint)
curl_cmd.setopt(pycurl.CUSTOMREQUEST, "DELETE")
curl_cmd.setopt(pycurl.WRITEFUNCTION, data.write)
curl_cmd.perform()
curl_cmd.close()
if data.getvalue():
return json.loads(data.getvalue().decode())
return None
def post_cmd(self, endpoint='', postfields_dict=None, formfile=None, ):
data = BytesIO()
curl_cmd = self._get_curl_cmd(endpoint)
curl_cmd.setopt(pycurl.POST, 1)
curl_cmd.setopt(pycurl.WRITEFUNCTION, data.write)
if postfields_dict is not None:
jsondata = json.dumps(postfields_dict)
curl_cmd.setopt(pycurl.POSTFIELDS, jsondata)
if formfile is not None:
curl_cmd.setopt(
pycurl.HTTPPOST,
[((formfile[0],
(pycurl.FORM_FILE,
formfile[1])))])
curl_cmd.perform()
curl_cmd.close()
if data.getvalue():
return json.loads(data.getvalue().decode())
return None