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 |