# -*- coding: utf-8 -*- # © 2016 Danimar Ribeiro, Trustcode # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from lxml import objectify from uuid import uuid4 from pytrustnfe.client import HttpClient from pytrustnfe.Certificado import converte_pfx_pem from ..xml import sanitize_response common_namespaces = {'soap': 'http://www.w3.org/2003/05/soap-envelope'} soap_body_path = './soap:Envelope/soap:Body' soap_fault_path = './soap:Envelope/soap:Body/soap:Fault' class Comunicacao(object): url = '' web_service = '' metodo = '' tag_retorno = '' def __init__(self, cert, key): self.cert = cert self.key = key def _soap_xml(self, body): xml = '' xml += '' xml += '' xml += '433.10' xml += '' xml += body xml += '' return xml.rstrip('\n') def _preparar_temp_pem(self): cert_path = '/tmp/' + uuid4().hex key_path = '/tmp/' + uuid4().hex arq_temp = open(cert_path, 'w') arq_temp.write(self.cert) arq_temp.close() arq_temp = open(key_path, 'w') arq_temp.write(self.key) arq_temp.close() return cert_path, key_path def _validar_dados(self): assert self.url != '', "Url servidor não configurada" assert self.metodo != '', "Método não configurado" def _executar_consulta(self, xmlEnviar): self._validar_dados() cert_path, key_path = self._preparar_temp_pem() client = HttpClient(self.url, cert_path, key_path) soap_xml = self._soap_xml(xmlEnviar) xml_retorno = client.post_xml(self.web_service, soap_xml) return sanitize_response(xml_retorno)