From 9624c61f73149ab66c128a77914213f56501d6ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marinho=20Brand=C3=A3o?= Date: Mon, 18 Jan 2010 15:30:58 -0200 Subject: [PATCH] Ajustes gerais --- README | 3 +++ pynfe/processamento/__init__.py | 4 ++-- pynfe/processamento/comunicacao.py | 33 +++++++++++++++++++++++++++++- run_fake_soap_server.py | 11 +++++----- tests/01-basico.txt | 2 +- tests/03-processamento-03-assinatura.txt | 2 +- tests/03-processamento-04-comunicacao.txt | 5 +++++ tests/04-servidor-soap.txt | 17 +++++++++++---- tests/certificado.pfx | Bin 0 -> 4590 bytes 9 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 tests/03-processamento-04-comunicacao.txt create mode 100644 tests/certificado.pfx diff --git a/README b/README index f441e60..2ae896f 100644 --- a/README +++ b/README @@ -83,3 +83,6 @@ Referências - Lista de codigos para campo EX TIPI - http://www.fisconet.com.br/ipi/tipi/04.htm +- Certificado para testes + - http://nf-eletronica.com/blog/?p=133 + diff --git a/pynfe/processamento/__init__.py b/pynfe/processamento/__init__.py index da1622f..86cae50 100644 --- a/pynfe/processamento/__init__.py +++ b/pynfe/processamento/__init__.py @@ -1,6 +1,6 @@ -from interfaces import InterfaceXML +from serializacao import SerializacaoXML from validacao import Validacao from assinatura import AssinaturaA1 -from comunicacao import Comunicacao +from comunicacao import ComunicacaoSefaz from danfe import DANFE diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 449e8b1..031be29 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -1,3 +1,34 @@ +# -*- coding: utf-8 -*- + class Comunicacao(object): - pass + u"""Classe abstrata responsavel por definir os metodos e logica das classes + de comunicação com os webservices da NF-e.""" + + servidor = None + porta = None + + def __init__(self, servidor, porta): + self.servidor = servidor + self.porta = porta + +class ComunicacaoSefaz(Comunicacao): + u"""Classe de comunicação que segue o padrão definido para as SEFAZ dos Estados.""" + + def transmitir(self, nota_fiscal): + pass + + def cancelar(self, nota_fiscal): + pass + + def situacao_nfe(self, nota_fiscal): + pass + + def status_servico(self): + pass + + def consultar_cadastro(self, instancia): + pass + + def inutilizar_faixa_numeracao(self, faixa): + pass diff --git a/run_fake_soap_server.py b/run_fake_soap_server.py index 77a3ad2..c760285 100644 --- a/run_fake_soap_server.py +++ b/run_fake_soap_server.py @@ -1,12 +1,13 @@ from soaplib.wsgi_soap import SimpleWSGISoapApp from soaplib.service import soapmethod +from soaplib.serializers.primitive import String, Integer, Array, Null class ServidorNFEFalso(SimpleWSGISoapApp): - from soaplib.serializers.primitive import String, Integer, Array, Null - - @soapmethod(String, Integer, _returns=String) - def ping(self, palavra, vezes): - return ','.join([palavra for i in range(vezes)]) + @soapmethod(String, Integer, _returns=Array(String)) + def ping(self, nome, vezes): + ret = [nome for i in range(vezes)] + print ret + return ret if __name__ == '__main__': porta = 8080 diff --git a/tests/01-basico.txt b/tests/01-basico.txt index d597861..ffc1211 100644 --- a/tests/01-basico.txt +++ b/tests/01-basico.txt @@ -91,7 +91,7 @@ Os pacotes da biblioteca sao: >>> from pynfe import processamento >>> set([attr for attr in dir(processamento) if not attr.startswith('__')]) == set([ - ... 'AssinaturaA1', 'Comunicacao', 'DANFE', 'InterfaceXML', 'Validacao', + ... 'AssinaturaA1', 'ComunicacaoSefaz', 'DANFE', 'InterfaceXML', 'Validacao', ... 'assinatura', 'comunicacao', 'danfe', 'interfaces', 'validacao']) True diff --git a/tests/03-processamento-03-assinatura.txt b/tests/03-processamento-03-assinatura.txt index c17ac1f..407288a 100644 --- a/tests/03-processamento-03-assinatura.txt +++ b/tests/03-processamento-03-assinatura.txt @@ -15,7 +15,7 @@ Assinando NF-e Na hora de assinar, selecionar um Certificado Digital - >>> assinatura = AssinaturaA1(certificado, 'senha') + >>> assinatura = AssinaturaA1(certificado, senha='associacao') TODO: A senha deveria ser criptografada de forma a evitar que alguem entre nesse processo e a capture. diff --git a/tests/03-processamento-04-comunicacao.txt b/tests/03-processamento-04-comunicacao.txt new file mode 100644 index 0000000..864a922 --- /dev/null +++ b/tests/03-processamento-04-comunicacao.txt @@ -0,0 +1,5 @@ +PROCESSAMENTO - COMUNICACAO +=========================== + + >>> from pynfe.processamento import ComunicacaoSefaz + diff --git a/tests/04-servidor-soap.txt b/tests/04-servidor-soap.txt index 5f9208a..d7d4cfd 100644 --- a/tests/04-servidor-soap.txt +++ b/tests/04-servidor-soap.txt @@ -5,9 +5,18 @@ Este teste vai verificar um servidor, executado atraves do comando 'run_fake_soap_server.py', para enviar requisicoes SOAP e esperar as responstas em formato WSDL, de forma a simular o servidor da SEFAZ. +Usando suds + >>> from suds.client import Client - >>> url = 'http://localhost:8080/ServidorNFEFalso?wsdl' - >>> #client = Client(url) - >>> #print client - >>> #print client.service.ping('mario', 5) + >>> client = Client('http://localhost:8080/ServidorNFEFalso?wsdl', cache=None) + >>> client.set_options(retxml=True) + >>> print client.service.ping('mario', 5) + +Usando soaplib + + >>> #from run_fake_soap_server import ServidorNFEFalso + >>> #from soaplib.client import ServiceClient, make_service_client + >>> #client = make_service_client('http://localhost:8080/', ServidorNFEFalso()) + >>> #print client.ping('Brasil', 5) + ['Brasil', 'Brasil', 'Brasil', 'Brasil', 'Brasil'] diff --git a/tests/certificado.pfx b/tests/certificado.pfx new file mode 100644 index 0000000000000000000000000000000000000000..428d6c49162da5c733ee3b64114d20de05fefa21 GIT binary patch literal 4590 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 literal 0 HcmV?d00001