Browse Source

retirado glob e corrigido uso do etree. Cache agora funciona.

tags/0.1
Italo Maia 16 years ago
parent
commit
cf96e68530
  1. 34
      pynfe/processamento/validacao.py

34
pynfe/processamento/validacao.py

@ -1,7 +1,6 @@
#-*- coding:utf-8 -*- #-*- coding:utf-8 -*-
from os import path from os import path
from glob import glob
try: try:
from lxml import etree from lxml import etree
@ -24,13 +23,20 @@ except ImportError:
except ImportError: except ImportError:
raise Exception('Falhou ao importar lxml/ElementTree') raise Exception('Falhou ao importar lxml/ElementTree')
XSD_FOLDER = "data/XSDs/"
XSD_FOLDER = "pynfe/data/XSDs/"
XSD_NFE="nfe_v1.10.xsd" XSD_NFE="nfe_v1.10.xsd"
XSD_NFE_PROCESSADA="procNFe_v1.10.xsd" XSD_NFE_PROCESSADA="procNFe_v1.10.xsd"
XSD_PD_CANCELAR_NFE="procCancNFe_v1.07.xsd" XSD_PD_CANCELAR_NFE="procCancNFe_v1.07.xsd"
XSD_PD_INUTILIZAR_NFE="procInutNFe_v1.07.xsd" XSD_PD_INUTILIZAR_NFE="procInutNFe_v1.07.xsd"
def get_xsd(xsd_file):
"""Retorna o caminho absoluto para um arquivo xsd
Argumentos:
xsd_file - nome do arquivo xsd (utilizar nomes definidos em validacao.py)
"""
return path.abspath(path.join(XSD_FOLDER, xsd_file))
class Validacao(object): class Validacao(object):
'''Valida documentos xml a partir do xsd informado''' '''Valida documentos xml a partir do xsd informado'''
def __init__(self): def __init__(self):
@ -45,18 +51,24 @@ class Validacao(object):
xml_filepath - caminho para arquivo xml xml_filepath - caminho para arquivo xml
xsd_file - caminho para o arquivo xsd xsd_file - caminho para o arquivo xsd
''' '''
return self._validar(etree.parse(xml_path), xsd_file)
def _validar(self, xml_doc, xsd_file):
xsd_filepath = path.join(XSD_FOLDER, xsd_file)
with open(xml_path) as file:
xml_doc = etree.parse(file)
return self.validar_etree(xml_doc, xsd_file)
def validar_etree(self, xml_doc, xsd_file):
'''Valida um documento lxml diretamente
Argumentos:
xml_doc - documento etree
xsd_file - caminho para o arquivo xsd'''
xsd_filepath = get_xsd(xsd_file)
try: try:
xsd_schema = self.MEM_CACHE[xsd_file]
# checa se o schema ja existe no cache
xsd_schema = self.MEM_CACHE[xsd_filepath]
except: except:
xsd_doc = etree.parse(xsd_file)
with open(xsd_filepath) as file: # lê xsd e atualiza cache
xsd_doc = etree.parse(file)
xsd_schema = etree.XMLSchema(xsd_doc) xsd_schema = etree.XMLSchema(xsd_doc)
self.MEM_CACHE[xsd_file] = xsd_schema
return xsd_schema.validate(xml_doc) return xsd_schema.validate(xml_doc)
# alias
validar_etree = _validar
Loading…
Cancel
Save