Skip to content

Instantly share code, notes, and snippets.

@felipe-prenholato
Created September 23, 2011 15:36
Show Gist options
  • Save felipe-prenholato/1237681 to your computer and use it in GitHub Desktop.
Save felipe-prenholato/1237681 to your computer and use it in GitHub Desktop.
LOG_DEBUG = logging.DEBUG # 10
LOG_INFO = logging.INFO # 20
LOG_WARN = logging.WARN # 30
LOG_ERROR = logging.ERROR # 40
LOG_CRITICAL = logging.CRITICAL # 50
LOG_STOPED = 59
LOG_FINISHED = 60
LOG_OPTIONS = (
(LOG_DEBUG,u"DEBUG"),
(LOG_INFO,u"Info"),
(LOG_WARN,u"Alerta"),
(LOG_ERROR,u"Erro"),
(LOG_CRITICAL,u"Erro crítico"),
(LOG_STOPED,u"Parado pelo usuário"),
(LOG_FINISHED,u"Finalizado")
)
class RHImportAlreadyFinished(Exception):
pass
class RHImport(models.Model):
session_key = models.CharField('session key', max_length=40)
user = models.ForeignKey(User,related_name="rh_imports")
import_file = models.FileField(upload_to='rh/imports/')
date_start = models.DateTimeField(auto_now=False,null=True,blank=True,default=None)
date_finish = models.DateTimeField(auto_now=False,null=True,blank=True,default=None)
finished_as = models.IntegerField(choices=LOG_OPTIONS[4:],null=True,default=0)
class Meta:
ordering = ('date_start',)
def __unicode__(self):
return u"%s em %s: %s" % (self.user, self.date_start, self.get_finished_as_display())
def save(self):
if self.finished_as:
self.date_finish=datetime.datetime.now()
super(RHImport,self).save()
def _add(self,level,msg,changes=u''):
if not self.pk:
self.save()
if not self.finished_as:
entry = self.logs.create(rh_import=self,level=level,msg=msg,changes=changes)
if level in (LOG_CRITICAL,LOG_STOPED,LOG_FINISHED):
self.finished_as = level
self.save()
else:
raise RHImportAlreadyFinished,u"Once finished with CRITICAL, STOPED or FINISHED you can't log more entries."
def debug(self,*args,**kwargs):
return self._add(LOG_DEBUG,*args,**kwargs)
def info(self,*args,**kwargs):
return self._add(LOG_INFO,*args,**kwargs)
def warn(self,*args,**kwargs):
return self._add(LOG_WARN,*args,**kwargs)
def error(self,*args,**kwargs):
return self._add(LOG_ERROR,*args,**kwargs)
def critical(self,*args,**kwargs):
return self._add(LOG_CRITICAL,*args,**kwargs)
def stoped(self,*args,**kwargs):
return self._add(LOG_STOPED,*args,**kwargs)
def finished(self,*args,**kwargs):
return self._add(LOG_FINISHED,*args,**kwargs)
class RHImportLog(models.Model):
rh_import = models.ForeignKey(RHImport,related_name='logs')
level = models.IntegerField(choices=LOG_OPTIONS)
date = models.DateTimeField(auto_now_add=True)
msg = models.TextField()
changes = models.TextField() # a place to store json changes :)
class Meta:
ordering = ('rh_import','date')
def __unicode__(self):
return u"(Import %s) %s :: %s :: %s" % (self.rh_import.pk,self.date,self.get_level_display().upper(),self.msg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment