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 16 dicionario = LerDicionarios()
17 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 21 if texto.isspace() or texto == "":
21 22 return "ESCOLHER TEXTO CERTO"
22 23  
... ...
src/TraduzSentencas.py
... ... @@ -9,8 +9,12 @@
9 9 import alexp
10 10 from AplicaRegras import *
11 11 import logging
  12 +import logging.handlers
12 13 import traceback
  14 +import subprocess
13 15 import re, string
  16 +import getopt
  17 +import sys
14 18  
15 19 class TraduzSentencas(object):
16 20 '''Realiza a tradução do texto em português para glosa
... ... @@ -20,10 +24,8 @@ class TraduzSentencas(object):
20 24 '''Instancia os aplicadores de regras e sinônimos.
21 25 '''
22 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 29 def iniciar_traducao(self, sentenca, taxa=False):
28 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 33 has_sintatica = True
32 34 analise_sintatica = alexp.run(sentenca)
33 35 except Exception as ex:
34   - #self.salvar_log(str(traceback.format_exc()))
  36 + self.salvar_log(str(traceback.format_exc()))
35 37 analise_sintatica = None
36 38 has_sintatica = False
37 39  
38 40 analise_morfologica = alexp.getAnaliseMorfologica()
39   -
  41 +
40 42 if (isinstance(analise_sintatica,type(None))):
41 43 regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica)
42 44 else:
... ... @@ -59,7 +61,41 @@ class TraduzSentencas(object):
59 61 def salvar_log(self, erro):
60 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 100 def gerar_metrica_qualidade(self, lista):
65 101 #TODO: resolver path do arquivo
... ...