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 0000000..428d6c4 Binary files /dev/null and b/tests/certificado.pfx differ