def get_data(self, base_url, method, header=None,
                 tenant_id=None, url_parameters=None, body=None):
        """
        Get the result of current request.
        :param base_url: (string)
        :param method: (string) HTTP request method, GET/POST/PUT/DELETE
        :param header: (dict) request header
        :param version: (string) API version
        :param tenant_id: (string) OpenStack project id
        :param url_parameters: (dict) query parameters
        :param body: (dict) request body
        :return: (dict)
        """
        extra_url = BaseMethods.url_para_to_url(**url_parameters) \
            if url_parameters else ''
        if header is not None:
            self.header = header
        if body is not None:
            self.body = json.dumps(body)
        else:
            self.body = None
        self.method = method
        self.url = '/%s/' % self.version + (('%s/' % tenant_id)
                                       if tenant_id is not None else '') \
                   + base_url + extra_url

        # Execute http request
        self.request(self.method, url=self.url, headers=self.header, body=self.body)
        response = None
        data = None
        try:
            response = self.getresponse()
        except httplib.NotConnected, e:
            raise err.ServerAddressError(self.host_port)
Пример #2
0
def openstack_api_connection(base_url,
                             method,
                             header,
                             port,
                             version,
                             tenant_id=None,
                             url_parameters=None,
                             body=None):
    '''
    :param url: (string)
    :param method: (string) [POST | GET | PUT | DELETE ]
    :param header: (Dict) headers for request
    :param url_parameters: (Dict)
    :param body: (Dict)
    :return: (Dict) Data fetched from openstack api
    '''
    extra_url = (BaseMethods.url_para_to_url(
        **url_parameters)) if url_parameters else ''
    conn = httplib.HTTPConnection('%s:%s' %
                                  (settings.OPENSTACK_CONTROLLER_IP, port))
    req_header = header
    req_body = None if body is None else json.dumps(body)

    # TODO(pwwp):
    # use <finally> to handle success or error data
    try:
        conn.request(method,
                     '/%s/' % version +
                     (('%s/' % tenant_id) if tenant_id is not None else '') +
                     base_url + extra_url,
                     headers=req_header,
                     body=req_body)
        response = conn.getresponse()
        if response.status > 299:
            error = {
                'status': 'error',
                'error_code': response.status,
                'error_msg': response.reason,
                'data': ''
            }
            return error
        elif response.status == 204:
            data = {'status': 'success', 'data': ''}
            return data
        else:
            data = {'status': 'success', 'data': json.loads(response.read())}
            return data
    except socket.error, e:
        return {'status': 'error', 'error_msg': e.strerror}
Пример #3
0
    def get_data(self,
                 base_url,
                 method,
                 header=None,
                 tenant_id=None,
                 url_parameters=None,
                 body=None):
        """
        Get the result of current request.
        :param base_url: (string)
        :param method: (string) HTTP request method, GET/POST/PUT/DELETE
        :param header: (dict) request header
        :param version: (string) API version
        :param tenant_id: (string) OpenStack project id
        :param url_parameters: (dict) query parameters
        :param body: (dict) request body
        :return: (dict)
        """
        extra_url = BaseMethods.url_para_to_url(**url_parameters) \
            if url_parameters else ''
        if header is not None:
            self.header = header
        if body is not None:
            self.body = json.dumps(body)
        else:
            self.body = None
        self.method = method
        self.url = '/%s/' % self.version + (('%s/' % tenant_id)
                                       if tenant_id is not None else '') \
                   + base_url + extra_url

        # Execute http request
        self.request(self.method,
                     url=self.url,
                     headers=self.header,
                     body=self.body)
        response = None
        data = None
        try:
            response = self.getresponse()
        except httplib.NotConnected, e:
            raise err.ServerAddressError(self.host_port)
def openstack_api_connection(base_url, method, header, port, version,
                             tenant_id=None, url_parameters=None, body=None):
    '''
    :param url: (string)
    :param method: (string) [POST | GET | PUT | DELETE ]
    :param header: (Dict) headers for request
    :param url_parameters: (Dict)
    :param body: (Dict)
    :return: (Dict) Data fetched from openstack api
    '''
    extra_url = (BaseMethods.url_para_to_url(**url_parameters)) if url_parameters else ''
    conn = httplib.HTTPConnection('%s:%s' % (settings.OPENSTACK_CONTROLLER_IP, port))
    req_header = header
    req_body = None if body is None else json.dumps(body)

    # TODO(pwwp):
    # use <finally> to handle success or error data
    try:
        conn.request(method, '/%s/' % version +
                     (('%s/' % tenant_id) if tenant_id is not None else '') +
                     base_url + extra_url,
                     headers=req_header, body=req_body)
        response = conn.getresponse()
        if response.status > 299:
            error = {'status': 'error',
                     'error_code': response.status,
                     'error_msg': response.reason,
                     'data': ''}
            return error
        elif response.status == 204:
            data = {'status': 'success',
                    'data': ''}
            return data
        else:
            data = {'status': 'success',
                    'data': json.loads(response.read())}
            return data
    except socket.error, e:
        return {'status': 'error',
                'error_msg': e.strerror
                }