Source code for pyswagger.contrib.client.requests

from __future__ import absolute_import
from ...core import BaseClient
from requests import Session, Request
import six


[docs]class Client(BaseClient): """ Client implementation based on requests """ __schemes__ = set(['http', 'https']) def __init__(self, auth=None, send_opt=None): """ constructor :param auth pyswagger.SwaggerAuth: auth info used when requesting :param send_opt dict: options used in requests.send, ex verify=False """ super(Client, self).__init__(auth) if send_opt is None: send_opt = {} self.__s = Session() self.__send_opt = send_opt def request(self, req_and_resp, opt=None): """ """ if opt is None: opt = {} # make sure all prepared state are clean before processing req, resp = req_and_resp req.reset() resp.reset() req, resp = super(Client, self).request((req, resp), opt) # apply request-related options before preparation. req.prepare(scheme=self.prepare_schemes(req), handle_files=False) req._patch(opt) # prepare for uploaded files file_obj = [] def append(name, obj): f = obj.data or open(obj.filename, 'rb') if 'Content-Type' in obj.header: file_obj.append((name, (obj.filename, f, obj.header['Content-Type']))) else: file_obj.append((name, (obj.filename, f))) for k, v in six.iteritems(req.files): if isinstance(v, list): for vv in v: append(k, vv) else: append(k, v) rq = Request( method=req.method.upper(), url=req.url, params=req.query, data=req.data, headers=req.header, files=file_obj ) rq = self.__s.prepare_request(rq) rs = self.__s.send(rq, stream=True, **self.__send_opt) resp.apply_with( status=rs.status_code, header=rs.headers, raw=six.BytesIO(rs.content).getvalue() ) return resp