From 46366ac757ddfe309a5cac8f7473cbda4bb2ad65 Mon Sep 17 00:00:00 2001 From: Jair Henrique Date: Mon, 3 Jul 2017 13:26:15 -0300 Subject: [PATCH] use zeep instead of suds --- correios/soap.py | 57 +++++++++++------------------------------------- requirements.txt | 2 +- 2 files changed, 14 insertions(+), 45 deletions(-) diff --git a/correios/soap.py b/correios/soap.py index 09bec74..68963d4 100644 --- a/correios/soap.py +++ b/correios/soap.py @@ -12,58 +12,27 @@ # See the License for the specific language governing permissions and # limitations under the License. - import logging -from io import BytesIO -import requests -from suds.client import Client -from suds.transport import Reply -from suds.transport.http import HttpAuthenticated +from requests import Session +from zeep import Client, Transport logger = logging.getLogger(__name__) -class RequestsTransport(HttpAuthenticated): - def __init__(self, **kwargs): - self._requests_session = requests.Session() - self.cert = kwargs.pop('cert', None) - self.verify = kwargs.pop('verify', True) - self.timeout = kwargs.pop('timeout', 8) - HttpAuthenticated.__init__(self, **kwargs) +class SoapClient(Client): - def open(self, request): - self.addcredentials(request) - logger.debug("request.open: %s", request) - resp = self._requests_session.get( - request.url, - data=request.message, - headers=request.headers, - cert=self.cert, - verify=self.verify, - timeout=self.timeout, - ) - result = BytesIO(resp.content) - return result + def __init__(self, wsdl, cert=None, verify=True, timeout=8, **kwargs): + session = Session() + session.cert = cert + session.verify = verify + session.timeout = timeout + session.headers.update({'Content-Type': 'text/xml;charset=UTF-8'}) - def send(self, request): - self.addcredentials(request) - logger.debug("request.send: %s", request) - resp = self._requests_session.post( - request.url, - data=request.message, - headers=request.headers, - cert=self.cert, - verify=self.verify, - timeout=self.timeout, + transport = Transport( + operation_timeout=timeout, + session=session ) - result = Reply(resp.status_code, resp.headers, resp.content) - return result - -class SoapClient(Client): - def __init__(self, url, cert=None, verify=True, timeout=8, *args, **kwargs): - transport = RequestsTransport(cert=cert, verify=verify, timeout=timeout) - headers = {"Content-Type": "text/xml;charset=UTF-8"} - super().__init__(url, transport=transport, headers=headers, **kwargs) + super().__init__(wsdl=wsdl, transport=transport, **kwargs) diff --git a/requirements.txt b/requirements.txt index a8d4dfe..3504824 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,5 +7,5 @@ hubarcode # api requests -suds-jurko +zeep lxml