#!/usr/bin/env python #-*- coding: iso8859-15 -*- ########################################################## # HERENCIA v1.0 # ########################################################## # Autor: Juan Miguel Taboada Godoy # # Fecha: Szczecin, 21 de Octubre de 2006 # # Descripción: Clase para ser herededada # # Versión: 2006112100 # # Interpreta los formatos de fichero: # # # # Codigo fuente bajo licencia GNU/GPL # # Centrologic (Computational Logistic Center) # # http://www.centrologic.com - info@centrologic.com # ########################################################## import sys import time # ### CLASE ### ####################################### ## \internal ## Definicion de clase en Grafista ## \version 27/01/2007 0036 Szczecin ## \attention Esta clase se ha disenado para generalizar las funciones de las clases generadas en herencia ## \warning Esta clase no deberia ser hederada por ninguna otra clase fuera de este fichero de HERENCIA class CLASE: # Variable inicializada en la clase {{{1 __debug=None # }}}1 # Constructor {{{1 ## \internal ## Constructor general ## \param self - ## \param clase Nombre de la clase que hereda de esta ## \param id ID del objeto que se crea ## \param debug Nombre de la clase que hereda de nuestro hijo (para debuging) def __init__(self,clase="CLASE",id=None,debug="???"): # Modo debug self._debug=False self.__debug=False # ID self.__id=id # Para debug self.CLASSDEBUG("%s::%s" % (debug,clase)) # }}}1 # Destructor {{{1 def __del__(self): pass # }}}1 # Devuelve el valor ID interno {{{1 ## \internal ## Devuelve el valor ID interno del Telemando ## \param self - def internal_id(self): return self.__id # }}}1 # Configura el texto de DEBUG {{{1 ## \internal ## Configura el texto de DEBUG en la clase padre ## \param self - ## \param texto Texto de cabecera del mensaje de debug ## \param estado Cambia si la clase hace debug o no, puede ser True o False (por defecto es None=Deja el estado por defecto de la clase) def CLASSDEBUG(self,texto=None,estado=None): if (texto!=None): self.__CLASSDEBUG=texto if (estado!=None): self.__debug=estado else: return self.__CLASSDEBUG # }}}1 # Mensaje de debug {{{1 ## \internal ## Muestra un mensaje de debug con la forma "DB_MYSQL::CONFIG:Texto de debug" ## \param self - ## \param txt Texto de debug def debug(self,txt): if (self.set_debug()): print "%s: %s" % (self.__CLASSDEBUG,txt) # }}}1 # Config Debug {{{1 ## Controla si se muestran mensajes de DEBUG ## \param self - ## \param arg Mostrar mensajes de debug o no (True/False) def set_debug(self,arg=None): if (arg!=None): self.__debug=arg return self.__debug; # }}}1 # Guarda la config {{{1 ## Almacena la configuración por defecto ## \param self - ## \param config Corresponde a un objeto que contiene toda la configuración por defecto. El objeto es de la clase CONFIG. def config(self,config): # Configuración por defecto self.default_config(config) # }}}1 # Salva la configuracion por defecto {{{1 ## \internal ## Guarda la configuracion por defecto (primero la analiza, la procesa y la guarda) ## \param self - ## \param config Configuracion de la clase CONFIG. Generalmente a esta funcion se llama desde la funcion config(). def default_config(self,config): # Comprueba que la config es correcta config.check() # Salva la configuracion por defecto self._default_config=config # Extrae el modo debug if (self.set_debug()==None): self.set_debug(config.set_debug()==True) # }}}1 # Funciones de logs {{{1 # dirlog: Directorio donde guardar los logs {{{2 ## Directorio donde guardar los logs ## \param self - ## \param arg Directorio def dirlog(self,arg=None): if (arg!=None): if (type(arg)!=type([])): raise IOError,"El argumento entregado en dirlog() debe ser una lista de directorios" else: self._dirlog=arg return self._dirlog # }}}2 # cabecera_log: Cabecera del fichero de logs {{{2 ## Cabecera del fichero de logs ## \param self - ## \param arg Texto de cabecera del fichero def cabecera_log(self,arg=None): if (arg!=None): self._cabecera_log=arg return self._cabecera_log # }}}2 # log_error: Loguea un error {{{2 ## Loguea un error ## \param self - ## \param mensaje Mensaje del error ## \param valor Valor a entregar con el error, ayuda a establecer prioridades o niveles (Por defecto: Ninguno) def log_error(self,mensaje,valor=None): self.log("ERROR",mensaje,valor) # }}}2 # log_warning: Loguea un aviso {{{2 ## Loguea un aviso ## \param self - ## \param mensaje Mensaje del aviso ## \param valor Valor a entregar con el aviso, ayuda a establecer prioridades o niveles (Por defecto: Ninguno) def log_warning(self,mensaje,valor=None): self.log("WARNING",mensaje,valor) # }}}2 # log_debug: Loguea un mensaje de depuración {{{2 ## Loguea un mensaje de depuracion ## \param self - ## \param mensaje Mensaje de depuracion ## \param valor Valor a entregar con el mensaje de depuracion, ayuda a establecer prioridades o niveles (Por defecto: Ninguno) def log_debug(self,mensaje,valor=None): self.log("DEBUG",mensaje,valor) # }}}2 # log: Loguea un mensaje {{{2 ## Loguea un mensaje ## \param self - ## \param tipo Tipo de mensaje que se va a loguear ## \param mensaje Mensaje de depuracion ## \param valor Valor a entregar con el mensaje, ayuda a establecer prioridades o niveles (Por defecto: Ninguno) def log(self,tipo,mensaje,valor=None): # Declaro el nombre de esta clase clase=self.CLASSDEBUG() # Lanzo el logueo self.debug("LOG_%s: %s (%s)" % (tipo,mensaje,valor)) # Chequeo que la config da positivo self.check_default() # Obtiene el directorio de logs destinos=self.valor("dirlog") # Obtiene la cabecera cabecera=self.valor("cabecera_log") # Obtiene el nombre de la clase debug=self.CLASSDEBUG # Control de tipo if (tipo=="ERROR"): tipo="E" elif (tipo=="WARNING"): tipo="W" elif (tipo=="DEBUG"): tipo="D" else: raise IOError,"%s<-%s: El tipo entregado a la funcion de log es incorrecto. Se entrego: %s. Solo son validos: ERROR, WARNING y DEBUG" % (clase,debug,tipo) # Control de valor if (valor==None): valor='-' # Obtiene la fecha actual ahora=time.time() # Genero el nombre del fichero fichero="%s_%s.log" % (cabecera,ahora) # Abre el fichero destino for destino in destinos: try: FILE=open("%s%s" % (destino,fichero),"a") FILE.write("%s %s %s\n" % (tipo,valor,mensaje)) FILE.close() except Exception,e: raise IOError,"%s<-%s: Error accediendo al fichero de log %s%s: %s" % (clase,debug,destino,fichero,e) # }}}2 # }}}1 # Comprueba si una variables esta configurada o no {{{1 ## \internal ## Comprueba si una variable esta configurada o no ## \param self - ## \param var Nombre de la variable a comprobar def isset(self,var): variable="_%s" % (var) variables=vars(self) return (variable in variables) # }}}1 # Checker {{{1 # Checker function {{{2 ## Funcion que chequea si una variable ha sido declarada o no. ## \param self - ## \param variable Nombre de la variable a comprobar def _check(self,variable): if not self.isset(variable): #raise IOError, print "%s: Variable %s no declarada. Terminada ejecuccion." % (self.__CLASSDEBUG,variable) sys.exit() # }}}2 # Para clases que no declaran check() {{{2 ## Metodo check definido para clases que no necesitan declarar ninguna restriccion en check() ## \param self - def check(self): self.check_default() # }}}2 ## Comprueba que el conjunto minimo de datos requeridos por la clase han sido declarados por el usuario: \n ## \param self def check_default(self): pass # }}}1 # ### DEFAULTCONFIG ### ############################### ## \internal ## Configuracion por defecto ## \version 27/01/2007 0052 Szczecin class DEFAULTCONFIG(CLASE): # Constructor {{{1 ## Constructor de configuracion ## \param self - ## \param debug Nombre de la clase que hereda de esta (para debuging) def __init__(self,debug=None): CLASE.__init__(self,"CONFIG",None,debug) # }}}1 # Chequeo por defecto {{{1 ## Comprueba que el conjunto minimo de datos requeridos por la clase han sido declarados por el usuario: \n ## - dirlog() ## - cabecera_log() ## \param self - def check_default(self): self._check("dirlog") self._check("cabecera_log") # }}}1 # ### BASE ### ######################################## ## \internal ## Clase base ## \version 27/01/2007 0052 Szczecin class BASE(CLASE): # Constructor {{{1 ## Constructor de clase estandar ## \param self - ## \param id ID del objeto que se crea ## \param debug Nombre de la clase que hereda de esta (para debuging) def __init__(self,id,debug=None): CLASE.__init__(self,"BASE",id,debug) # }}}1 # Devuelve el valor de una variable {{{1 ## \internal ## Devuelve el valor de una variable (de la configuracion de la clase o en su defecto de la configuracion por defecto) ## \param self - ## \param nombre Nombre de la variable a extraer su valor def valor(self,nombre): if self.isset(nombre): return eval("self.%s()" % (nombre)) else: if (eval("self._default_config.isset(\"%s\")" % (nombre))): return eval("self._default_config.%s()" % (nombre)) else: print "%s: Variable %s no declarada. Terminada ejecuccion." % (self.__CLASSDEBUG,nombre) sys.exit() # }}}1 # Chequeo por defecto {{{1 ## Comprueba que el conjunto minimo de datos requeridos por la clase han sido declarados por el usuario: \n ## \param self def check_default(self): pass # }}}1