def get_request(data, spec, spec_host): endpoint_path = data.draw(st.sampled_from(spec['paths'].keys())) endpoint = spec['paths'][endpoint_path] method_name = data.draw(st.sampled_from(endpoint.keys())) endpoint = endpoint[method_name] path_params = _get_filtered_parameter(endpoint, 'path', spec) path_args = data.draw(st.fixed_dictionaries(path_params)) query_params = _get_filtered_parameter(endpoint, 'query', spec) query_args = data.draw(st.fixed_dictionaries(query_params)) body_params = _get_filtered_parameter(endpoint, 'body', spec) if body_params: body_args = data.draw(body_params['body']) else: body_args = None valid_request_body_format = get_item_path_acceptable_format(endpoint, spec) request_data = None request_headers = {} if body_args: # no_body_format_declaration(body_args, valid_request_body_format, endpoint) if body_args and valid_request_body_format is None: # Force a request format, swagger ui seems to force json format valid_request_body_format = ["application/json"] request_body_format = data.draw( st.sampled_from(valid_request_body_format), 'request_body_format') request_headers['Content-Type'] = request_body_format if request_body_format == 'application/x-www-form-urlencoded': request_data = body_args elif request_body_format == 'application/json': request_data = json.dumps(body_args, cls=CustomJsonEncoder) elif request_body_format == 'application/xml': pass # TODO Implement XML else: raise Exception(request_body_format) endpoint_url = endpoint_path.format(**path_args) assume('\x00' not in endpoint_url) # Generate request URL = furl(spec_host) URL = URL.join(endpoint_url.lstrip('/')) if query_args: URL = URL.add(args=query_args) request = Request(method_name, URL.url, data=request_data, headers=request_headers).prepare() request.build_context = locals() return request
def get_request(data, spec, spec_host): endpoint_path = data.draw(st.sampled_from(spec['paths'].keys())) endpoint = spec['paths'][endpoint_path] method_name = data.draw(st.sampled_from(endpoint.keys())) endpoint = endpoint[method_name] path_params = _get_filtered_parameter(endpoint, 'path', spec) path_args = data.draw(st.fixed_dictionaries(path_params)) query_params = _get_filtered_parameter(endpoint, 'query', spec) query_args = data.draw(st.fixed_dictionaries(query_params)) body_params = _get_filtered_parameter(endpoint, 'body', spec) if body_params: body_args = data.draw(body_params['body']) else: body_args = None valid_request_body_format = get_item_path_acceptable_format(endpoint, spec) request_data = None request_headers = {} if body_args: # no_body_format_declaration(body_args, valid_request_body_format, endpoint) if body_args and valid_request_body_format is None: # Force a request format, swagger ui seems to force json format valid_request_body_format = ["application/json"] request_body_format = data.draw(st.sampled_from(valid_request_body_format), 'request_body_format') request_headers['Content-Type'] = request_body_format if request_body_format == 'application/x-www-form-urlencoded': request_data = body_args elif request_body_format == 'application/json': request_data = json.dumps(body_args, cls=CustomJsonEncoder) elif request_body_format == 'application/xml': pass # TODO Implement XML else: raise Exception(request_body_format) endpoint_url = endpoint_path.format(**path_args) assume('\x00' not in endpoint_url) # Generate request URL = furl(spec_host) URL = URL.join(endpoint_url.lstrip('/')) if query_args: URL = URL.add(args=query_args) request = Request(method_name, URL.url, data=request_data, headers=request_headers).prepare() request.build_context = locals() return request
def get_request(data, spec, spec_host, settings): endpoints = sorted(spec['paths'].keys()) endpoint_path = data.draw(st.sampled_from(endpoints)) endpoint = spec['paths'][endpoint_path] methods = sorted(set(endpoint.keys())) if 'parameters' in methods: methods.remove('parameters') common_parameters = endpoint['parameters'] else: common_parameters = [] method_name = data.draw(st.sampled_from(methods)) endpoint = endpoint[method_name] path_params = _get_filtered_parameter(endpoint, 'path', common_parameters, spec) path_args = data.draw(st.fixed_dictionaries(path_params)) query_params = _get_filtered_parameter(endpoint, 'query', common_parameters, spec) query_args = data.draw(st.fixed_dictionaries(query_params)) body_params = _get_filtered_parameter(endpoint, 'body', common_parameters, spec) if body_params: body_args = data.draw(st.fixed_dictionaries(body_params)) else: body_args = None valid_request_body_format = get_item_path_acceptable_format(endpoint, spec) request_data = None request_headers = copy(settings.headers) if body_args: # no_body_format_declaration(body_args, valid_request_body_format, endpoint) if body_args and valid_request_body_format is None: # Force a request format, swagger ui seems to force json format valid_request_body_format = ["application/json"] request_body_format = data.draw( st.sampled_from(valid_request_body_format), 'request_body_format') request_headers['Content-Type'] = request_body_format if request_body_format == 'application/x-www-form-urlencoded': request_data = body_args elif request_body_format == 'application/json': request_data = json.dumps(body_args, cls=CustomJsonEncoder) elif request_body_format == 'application/xml': raise NotImplementedError(request_body_format) # TODO Implement XML else: raise Exception(request_body_format) # encode the path values path_args = {k: quote(v, safe="") for (k, v) in path_args.items()} endpoint_url = endpoint_path.format(**path_args) assume('\x00' not in endpoint_url) # Generate request URL = furl(spec_host).add(path=endpoint_url.lstrip('/')) if query_args: URL = URL.add(args=query_args) request = Request(method_name, URL.url, data=request_data, headers=request_headers).prepare() request.build_context = locals() return request