Commit a537f5f0fbc215f12fdeb66e005e8e1dcb56e7e4

Authored by Erickson Silva
1 parent 6534e77c
Exists in master and in 1 other branch devel

Implementa log do exception da análise sintática

Showing 2 changed files with 45 additions and 8 deletions   Show diff stats
src/PortGlosa.py
@@ -16,7 +16,8 @@ tradutor = TraduzSentencas() @@ -16,7 +16,8 @@ tradutor = TraduzSentencas()
16 dicionario = LerDicionarios() 16 dicionario = LerDicionarios()
17 taxas = [] 17 taxas = []
18 18
19 -def traduzir(texto, threads=False, taxa_qualidade=False): 19 +def traduzir(texto, log=None, threads=False, taxa_qualidade=False):
  20 + tradutor.set_level(log) if log != None else tradutor.desativar_logging()
20 if texto.isspace() or texto == "": 21 if texto.isspace() or texto == "":
21 return "ESCOLHER TEXTO CERTO" 22 return "ESCOLHER TEXTO CERTO"
22 23
src/TraduzSentencas.py
@@ -9,8 +9,12 @@ @@ -9,8 +9,12 @@
9 import alexp 9 import alexp
10 from AplicaRegras import * 10 from AplicaRegras import *
11 import logging 11 import logging
  12 +import logging.handlers
12 import traceback 13 import traceback
  14 +import subprocess
13 import re, string 15 import re, string
  16 +import getopt
  17 +import sys
14 18
15 class TraduzSentencas(object): 19 class TraduzSentencas(object):
16 '''Realiza a tradução do texto em português para glosa 20 '''Realiza a tradução do texto em português para glosa
@@ -20,10 +24,8 @@ class TraduzSentencas(object): @@ -20,10 +24,8 @@ class TraduzSentencas(object):
20 '''Instancia os aplicadores de regras e sinônimos. 24 '''Instancia os aplicadores de regras e sinônimos.
21 ''' 25 '''
22 self.aplic_regras = AplicaRegras() 26 self.aplic_regras = AplicaRegras()
23 - #logging.basicConfig(filename='/tmp/vlibras-translate.log',  
24 - # format='%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n',  
25 - # level=logging.ERROR)  
26 - 27 + self.check_level()
  28 +
27 def iniciar_traducao(self, sentenca, taxa=False): 29 def iniciar_traducao(self, sentenca, taxa=False):
28 '''Metódo responsável por executar todos componentes necessários para a geração da glosa. 30 '''Metódo responsável por executar todos componentes necessários para a geração da glosa.
29 ''' 31 '''
@@ -31,12 +33,12 @@ class TraduzSentencas(object): @@ -31,12 +33,12 @@ class TraduzSentencas(object):
31 has_sintatica = True 33 has_sintatica = True
32 analise_sintatica = alexp.run(sentenca) 34 analise_sintatica = alexp.run(sentenca)
33 except Exception as ex: 35 except Exception as ex:
34 - #self.salvar_log(str(traceback.format_exc())) 36 + self.salvar_log(str(traceback.format_exc()))
35 analise_sintatica = None 37 analise_sintatica = None
36 has_sintatica = False 38 has_sintatica = False
37 39
38 analise_morfologica = alexp.getAnaliseMorfologica() 40 analise_morfologica = alexp.getAnaliseMorfologica()
39 - 41 +
40 if (isinstance(analise_sintatica,type(None))): 42 if (isinstance(analise_sintatica,type(None))):
41 regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) 43 regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica)
42 else: 44 else:
@@ -59,7 +61,41 @@ class TraduzSentencas(object): @@ -59,7 +61,41 @@ class TraduzSentencas(object):
59 def salvar_log(self, erro): 61 def salvar_log(self, erro):
60 '''Salva traceback de uma excessão do analisador sintático 62 '''Salva traceback de uma excessão do analisador sintático
61 ''' 63 '''
62 - logging.error(erro) 64 + logger = logging.getLogger('error-feedback')
  65 + logger.propagate = False
  66 + logger.error(erro)
  67 +
  68 + def criar_logger_error(self):
  69 + error_log = logging.getLogger('error-feedback')
  70 + error_log.setLevel(logging.ERROR)
  71 + ##print os.path.dirname(__file__) -- Salvar no direitorio do arquivo .py?
  72 + error_handler = logging.handlers.RotatingFileHandler('/var/tmp/vlibras-translate.log', maxBytes=1024, backupCount=5)
  73 + formatter = logging.Formatter('%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n')
  74 + error_handler.setFormatter(formatter)
  75 + error_log.addHandler(error_handler)
  76 +
  77 + def check_level(self):
  78 + for opt in sys.argv[1:]:
  79 + if "--log" in opt:
  80 + self.set_level(opt[6:])
  81 + return
  82 + self.desativar_logging()
  83 +
  84 + def set_level(self, level):
  85 + numeric_level = getattr(logging, level.upper(), None)
  86 + if not isinstance(numeric_level, int):
  87 + raise ValueError('Nível de log inválido: %s' % level)
  88 + logging.disable(logging.NOTSET)
  89 + logging.getLogger().setLevel(numeric_level)
  90 + if numeric_level == 40 or numeric_level == 10:
  91 + self.criar_logger_error()
  92 +
  93 + def desativar_logging(self):
  94 + logging.disable(logging.DEBUG)
  95 + logging.disable(logging.INFO)
  96 + logging.disable(logging.WARNING)
  97 + logging.disable(logging.ERROR)
  98 + logging.disable(logging.CRITICAL)
63 99
64 def gerar_metrica_qualidade(self, lista): 100 def gerar_metrica_qualidade(self, lista):
65 #TODO: resolver path do arquivo 101 #TODO: resolver path do arquivo