From ae91450180ef69810504bf8de02b82b58e9e15e6 Mon Sep 17 00:00:00 2001 From: leotada Date: Thu, 13 Aug 2015 14:40:30 -0300 Subject: [PATCH] =?UTF-8?q?fun=C3=A7=C3=A3o=20remover=20acentos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/comunicacao.py | 3 ++- pynfe/processamento/serializacao.py | 4 ++-- pynfe/utils/__init__.py | 21 ++++++--------------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 92b2a9f..d75778d 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -2,7 +2,7 @@ import datetime import time import requests -from pynfe.utils import etree, so_numeros +from pynfe.utils import etree, so_numeros, remover_acentos from pynfe.utils.flags import NAMESPACE_NFE, NAMESPACE_SOAP, NAMESPACE_XSI, NAMESPACE_XSD, NAMESPACE_METODO, VERSAO_PADRAO, CODIGOS_ESTADOS from pynfe.utils.webservices import NFCE, NFE from .assinatura import AssinaturaA1 @@ -287,6 +287,7 @@ class ComunicacaoSefaz(Comunicacao): xml_declaration='' xml = etree.tostring(xml, encoding='unicode', pretty_print=False).replace('\n','') xml = xml_declaration + xml + xml = remover_acentos(xml) # Faz o request com o servidor result = requests.post(url, xml, headers=self._post_header(), cert=chave_cert, verify=False) result.encoding='utf-8' diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index f9a0b2a..94d6895 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -5,7 +5,7 @@ import time from pynfe.entidades import NotaFiscal from pynfe.utils import etree, so_numeros, obter_municipio_por_codigo, \ obter_pais_por_codigo, obter_municipio_e_codigo, \ - formatar_decimal, safe_str, obter_uf_por_codigo, obter_codigo_por_municipio + formatar_decimal, remover_acentos, obter_uf_por_codigo, obter_codigo_por_municipio from pynfe.utils.flags import CODIGOS_ESTADOS, VERSAO_PADRAO, NAMESPACE_NFE class Serializacao(object): @@ -769,7 +769,7 @@ class SerializacaoPipes(Serializacao): if retorna_string: try: - return '|'.join(map(safe_str, serial_data)) + return '|'.join(map(remover_acentos, serial_data)) except TypeError as err: enum_args = '\n'.join( map( diff --git a/pynfe/utils/__init__.py b/pynfe/utils/__init__.py index 50ae8db..319c596 100644 --- a/pynfe/utils/__init__.py +++ b/pynfe/utils/__init__.py @@ -2,16 +2,12 @@ import os import codecs -import unicodedata +from unicodedata import normalize try: from lxml import etree except ImportError: - # Instalacao normal do ElementTree - try: - import xml.etree.ElementTree as etree - except ImportError: - raise Exception('Falhou ao importar lxml/ElementTree') + raise Exception('Falhou ao importar lxml/ElementTree') try: from StringIO import StringIO @@ -144,18 +140,13 @@ def formatar_decimal(dec): return "%.2f" % dec -def safe_str(str_): - if not isinstance(str_, unicode): - if isinstance(str_, str): - str_ = str_.decode('utf8') - else: - str_ = unicode(str_) - return unicodedata.normalize('NFKD', str_).encode('ascii', 'ignore') - - def obter_uf_por_codigo(codigo_uf): if isinstance(codigo_uf, basestring) and codigo_uf.isalpha(): return codigo_uf estados = {v: k for k, v in flags.CODIGOS_ESTADOS.items()} return estados[unicode(codigo_uf)] + + +def remover_acentos(txt): + return normalize('NFKD', txt).encode('ASCII','ignore').decode('ASCII') \ No newline at end of file