Commit a537f5f0fbc215f12fdeb66e005e8e1dcb56e7e4
1 parent
6534e77c
Exists in
master
and in
1 other branch
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 |