pyutil.py
5.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# -*- coding: UTF-8 -*-
import datetime
import logging
import os
import shutil
import sys
# @def funcao para obter data e hora atual do sistema
# @param string formato de data e hora
# @return string retorna data e hora do sistema no momento da chamada
def getTimeStamp(date_fmt = "%Y-%m-%d %H:%M:%S.%f"):
if ("%f" in date_fmt):
# [:-3] remove 3 casas decimais dos milisegundos (ms)
return datetime.datetime.now().strftime(date_fmt)[:-3]
else:
return datetime.datetime.now().strftime(date_fmt)
# @def funcao para gravar log dos eventos em arquivo
# @param string mensagem a ser salva
# @param int indice do tipo de log 0: apenas print, 1: debug, 2: info, 3: warn, 4: error, 5: critical
# @param string caminho completo do arquivo de logs
# @param string formato de tempo utilizado
# @return none
def log(msg = "", log_level = 2, log_file = "events.log"):
dict_level = {
0: ["Print", None, None],
1: ["DEBUG", logging.DEBUG, logging.debug],
2: ["INFO", logging.INFO, logging.info],
3: ["WARNING", logging.WARN, logging.warn],
4: ["ERROR", logging.ERROR, logging.error],
5: ["CRITICAL", logging.CRITICAL, logging.critical]
}
# log_format = "[%(asctime)s.%(msecs).03d] %(levelname)s: <User: %(name)s> <Module: %(module)s> <Function: %(funcName)s>: %(message)s"
log_format = "[%(asctime)s.%(msecs).03d] %(levelname)s: %(message)s"
date_fmt = "%Y-%m-%d %H:%M:%S"
logging.basicConfig(filename = log_file, datefmt = date_fmt, format = log_format, level = dict_level[log_level][1])
logging.Formatter(fmt = "%(asctime)s", datefmt = date_fmt)
log_level %= len(dict_level)
write_mode = dict_level[log_level][2]
print("[%s] %s: %s" % (getTimeStamp(), dict_level[log_level][0], msg))
if (write_mode != None):
write_mode(msg)
return
# @def funcao para exibir excecao
# @param string deve ser passado: "__file__" para identificar em qual modulo ocorreu a excecao
# @return int retorna 1
def print_stack_trace():
error = "\n File name: %s\n Function name: %s\n Line code: %s\n Type exception: %s\n Message: %s" % (
os.path.basename(sys.exc_info()[2].tb_frame.f_code.co_filename),
sys.exc_info()[2].tb_frame.f_code.co_name,
sys.exc_info()[2].tb_lineno,
sys.exc_info()[0].__name__,
sys.exc_info()[1]
)
log(error, 4)
return 1
# @def funcao que verifica se um arquivo existe
# @param string caminho do arquivo a ser checado
# @return bool verdadeiro se o arquivo existir, falso caso contrario
def file_exists(file_path):
if ((os.path.isfile(file_path) == 1) and (os.path.exists(file_path) == 1)):
return True
else:
return False
# @def funcao para renomear arquivo de video gerado pelo blender
# entrada: /temp/arquivo_video_0001-0250.mp4
# saida: /temp/arquivo_video.mp4
# @param string caminho do arquivo a ser renomeado
# @param bool renomeia o arquivo de acordo com a data e hora do sistema
# @param bool sobreescreve o arquivo
# @return string retorna o nome do arquivo renomeado
def file_rename(file_full_path, use_time_stamp = False, overwrite = True):
if (file_exists(file_full_path) == False):
return ""
file_path = os.path.dirname(os.path.abspath(file_full_path))
filename = os.path.basename(os.path.splitext(file_full_path)[0])
extension = os.path.splitext(file_full_path)[1]
filename_reversed = ""
valid_char = False
# percorre o "filename" do final para o inicio copiando caracteres apos o primeiro "_" encontrado
for char in reversed(filename):
if (valid_char == True):
filename_reversed += char
if (char == "_"):
valid_char = True
try:
# inverte sequencia de caracteres que foi copiada
filename_reversed = filename_reversed[::-1]
if (use_time_stamp == True):
# recupera novo file_full_path + nome do arquivo + data/hora + extensao
new_filename = os.path.join(file_path, "%s_%s%s" % (filename_reversed, getTimeStamp(), extension))
else:
# recupera novo file_full_path + nome do arquivo + extensao
new_filename = os.path.join(file_path, "%s%s" % (filename_reversed, extension))
# Enumera o nome do arquivo caso o parametro "overwrite" seja "False" e o arquivo ja exista
if (overwrite == False):
count = 0
while (file_exists(new_filename) == True):
count += 1
# new_filename = join(file_path, "%s_%i%s" % (filename_reversed, count, extension))
new_filename = os.path.join(file_path, "%s_%0.4i%s" % (filename_reversed, count, extension))
# log('rename: "%s" to: "%s"' %(file_full_path, new_filename))
shutil.move(file_full_path, new_filename)
return new_filename
except Exception:
print_stack_trace()
return ""
"""
# unit test
def main():
msg = "This is a message of "
log(msg + "Print", 0)
log(msg + "Debug", 1)
log(msg + "Info", 2)
log(msg + "Warn", 3)
log(msg + "Error", 4)
log(msg + "Critical", 5)
filename = "sample_001-250.mp4"
video = open(filename, "w")
video.write
video.close
file_rename(filename)
return
if __name__ == "__main__":
main()
"""