From 0d6fa8916293da532763b38167875819411829d5 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Mon, 13 Jul 2015 21:47:04 -0300 Subject: [PATCH] =?UTF-8?q?corre=C3=A7=C3=A3o=20de=20importa=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/entidades/__init__.py | 16 ++++++++-------- pynfe/entidades/certificado.py | 2 +- pynfe/entidades/cliente.py | 4 ++-- pynfe/entidades/emitente.py | 2 +- pynfe/entidades/lotes.py | 2 +- pynfe/entidades/notafiscal.py | 2 +- pynfe/entidades/produto.py | 2 +- pynfe/entidades/transportadora.py | 2 +- pynfe/processamento/assinatura.py | 23 ++++++++++++++++++++++- pynfe/utils/__init__.py | 12 +++++++++--- test.py | 4 ++-- 11 files changed, 49 insertions(+), 22 deletions(-) diff --git a/pynfe/entidades/__init__.py b/pynfe/entidades/__init__.py index 64fcd4f..47dfe50 100644 --- a/pynfe/entidades/__init__.py +++ b/pynfe/entidades/__init__.py @@ -1,9 +1,9 @@ -from emitente import Emitente -from produto import Produto -from cliente import Cliente -from transportadora import Transportadora -from notafiscal import NotaFiscal -from lotes import LoteNotaFiscal -from fonte_dados import _fonte_dados -#from certificado import CertificadoA1 +from .emitente import Emitente +from .produto import Produto +from .cliente import Cliente +from .transportadora import Transportadora +from .notafiscal import NotaFiscal +from .lotes import LoteNotaFiscal +from .fonte_dados import _fonte_dados +from .certificado import CertificadoA1 diff --git a/pynfe/entidades/certificado.py b/pynfe/entidades/certificado.py index 60be860..507c754 100644 --- a/pynfe/entidades/certificado.py +++ b/pynfe/entidades/certificado.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import os -from base import Entidade +from .base import Entidade from OpenSSL import crypto diff --git a/pynfe/entidades/cliente.py b/pynfe/entidades/cliente.py index 64f5785..01bb669 100644 --- a/pynfe/entidades/cliente.py +++ b/pynfe/entidades/cliente.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from base import Entidade -from pynfe.utils.flags import TIPOS_DOCUMENTO, CODIGO_BRASIL +from .base import Entidade +from pynfe.utils.flags import CODIGO_BRASIL class Cliente(Entidade): diff --git a/pynfe/entidades/emitente.py b/pynfe/entidades/emitente.py index 07a573c..e934a72 100644 --- a/pynfe/entidades/emitente.py +++ b/pynfe/entidades/emitente.py @@ -1,4 +1,4 @@ -from base import Entidade +from .base import Entidade from pynfe.utils.flags import CODIGO_BRASIL class Emitente(Entidade): diff --git a/pynfe/entidades/lotes.py b/pynfe/entidades/lotes.py index 35c94e0..2fc063f 100644 --- a/pynfe/entidades/lotes.py +++ b/pynfe/entidades/lotes.py @@ -1,4 +1,4 @@ -from base import Lote +from .base import Lote class LoteNotaFiscal(Lote): pass diff --git a/pynfe/entidades/notafiscal.py b/pynfe/entidades/notafiscal.py index 32f622f..9c7d0f7 100644 --- a/pynfe/entidades/notafiscal.py +++ b/pynfe/entidades/notafiscal.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import random -from base import Entidade +from .base import Entidade from pynfe import get_version from pynfe.utils.flags import NF_STATUS, NF_TIPOS_DOCUMENTO, NF_TIPOS_IMPRESSAO_DANFE,\ NF_FORMAS_PAGAMENTO, NF_FORMAS_EMISSAO, NF_FINALIDADES_EMISSAO,\ diff --git a/pynfe/entidades/produto.py b/pynfe/entidades/produto.py index 17a7bfe..78b4652 100644 --- a/pynfe/entidades/produto.py +++ b/pynfe/entidades/produto.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from base import Entidade +from .base import Entidade from pynfe.utils.flags import ICMS_TIPOS_TRIBUTACAO, ICMS_ORIGENS, ICMS_MODALIDADES from decimal import Decimal diff --git a/pynfe/entidades/transportadora.py b/pynfe/entidades/transportadora.py index 9483219..c709c7d 100644 --- a/pynfe/entidades/transportadora.py +++ b/pynfe/entidades/transportadora.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from base import Entidade +from .base import Entidade from pynfe.utils.flags import TIPOS_DOCUMENTO class Transportadora(Entidade): diff --git a/pynfe/processamento/assinatura.py b/pynfe/processamento/assinatura.py index f25035e..1b160a5 100644 --- a/pynfe/processamento/assinatura.py +++ b/pynfe/processamento/assinatura.py @@ -24,6 +24,10 @@ class Assinatura(object): """Efetua a assinatura numa string contendo XML valido.""" pass + def assinar_nfe(self, xml): + """Efetua a assinatura da nfe""" + pass + def assinar_etree(self, raiz): u"""Efetua a assinatura numa instancia da biblioteca lxml.etree. @@ -75,6 +79,23 @@ class AssinaturaA1(Assinatura): # Efetua a assinatura return self.assinar_etree(raiz, retorna_xml=True) + def assinar_nfe(self, xml): + #from lxml import etree + import signxml + from signxml import xmldsig + + cert = open("cert.pem").read() + key = open("key.pem", "rb").read() + + root = etree.parse(xml).getroot() + signer = xmldsig(root, digest_algorithm="sha1") + signer.sign(method=signxml.methods.enveloped, key=key, cert=cert, + algorithm="rsa-sha1", c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315', + reference_uri='#NFe41150715380524000122651010000000271333611649') + #verified_data = signer.verify(require_x509=True, ca_pem_file="cert.pem") + e = etree.tostring(signer.data) + open("testesig.xml", "wb").write(e) + def assinar_etree(self, raiz, retorna_xml=False): # Extrai a tag do elemento raiz tipo = extrair_tag(raiz.getroot()) @@ -219,7 +240,7 @@ class AssinaturaA1(Assinatura): noh_assinatura = ctxt.xpathEval(u'//*/sig:Signature')[0] # Buscamos a chave no arquivo do certificado - chave = xmlsec.CryptoAppKeyLoad( + chave = xmlsec.cryptoAppKeyLoad( filename=str(self.certificado.caminho_arquivo), format=xmlsec.KeyDataFormatPkcs12, pwd=str(self.senha), diff --git a/pynfe/utils/__init__.py b/pynfe/utils/__init__.py index 337d90c..17ea422 100644 --- a/pynfe/utils/__init__.py +++ b/pynfe/utils/__init__.py @@ -28,10 +28,16 @@ except ImportError: try: from cStringIO import StringIO except ImportError: - from StringIO import StringIO - -import flags + try: + from StringIO import StringIO + except ImportError: + from io import StringIO +try: + import flags +except ImportError: + pass + #raise Exception('Falhou ao importar flags') # from geraldo.utils import memoize diff --git a/test.py b/test.py index 32292b9..7c07a31 100644 --- a/test.py +++ b/test.py @@ -65,7 +65,7 @@ nota_fiscal = NotaFiscal( numero_nf='1', data_emissao=datetime.datetime.now(), data_saida_entrada=datetime.datetime.now(), - hora_saida_entrada=datetime.time(03,12,00), + #hora_saida_entrada=datetime.time(03,12,00), tipo_documento=1, municipio='4118402', tipo_impressao_danfe=1, # nfce 4 @@ -110,7 +110,7 @@ certificado = '/home/junior/Projetos/falcao/doc/JC FERRAGENS S=12345678.pfx' senha = '12345328' # assinatura a = AssinaturaA1(certificado, senha) -print a.assinar_xml(xml) +print (a.assinar_nfe(xml)) #print serializador._serializar_nota_fiscal(nota_fiscal)