server/utils.py
branchstable
changeset 6765 b922e3a817e9
parent 6427 c8a5ac2d1eaa
child 7573 c8f8762c986d
equal deleted inserted replaced
6764:b2c1b481f310 6765:b922e3a817e9
    18 """Some utilities for the CubicWeb server."""
    18 """Some utilities for the CubicWeb server."""
    19 __docformat__ = "restructuredtext en"
    19 __docformat__ = "restructuredtext en"
    20 
    20 
    21 import sys
    21 import sys
    22 import string
    22 import string
       
    23 import logging
    23 from threading import Timer, Thread
    24 from threading import Timer, Thread
    24 from getpass import getpass
    25 from getpass import getpass
    25 from random import choice
    26 from random import choice
    26 
    27 
    27 from cubicweb.server import SOURCE_TYPES
    28 from cubicweb.server import SOURCE_TYPES
   127                              (interval, func_name(func)))
   128                              (interval, func_name(func)))
   128         self.interval = interval
   129         self.interval = interval
   129         def auto_restart_func(self=self, func=func, args=args):
   130         def auto_restart_func(self=self, func=func, args=args):
   130             try:
   131             try:
   131                 func(*args)
   132                 func(*args)
       
   133             except:
       
   134                 logger = logging.getLogger('cubicweb.repository')
       
   135                 logger.exception('Unhandled exception in LoopTask %s', self.name)
       
   136                 raise
   132             finally:
   137             finally:
   133                 self.start()
   138                 self.start()
   134         self.func = auto_restart_func
   139         self.func = auto_restart_func
   135         self.name = func_name(func)
   140         self.name = func_name(func)
   136 
   141 
   156     """
   161     """
   157     def __init__(self, target, running_threads):
   162     def __init__(self, target, running_threads):
   158         def auto_remove_func(self=self, func=target):
   163         def auto_remove_func(self=self, func=target):
   159             try:
   164             try:
   160                 func()
   165                 func()
       
   166             except:
       
   167                 logger = logging.getLogger('cubicweb.repository')
       
   168                 logger.exception('Unhandled exception in RepoThread %s', self._name)
       
   169                 raise
   161             finally:
   170             finally:
   162                 self.running_threads.remove(self)
   171                 self.running_threads.remove(self)
   163         Thread.__init__(self, target=auto_remove_func)
   172         Thread.__init__(self, target=auto_remove_func)
   164         self.running_threads = running_threads
   173         self.running_threads = running_threads
   165         self._name = func_name(target)
   174         self._name = func_name(target)