devtools/__init__.py
branchstable
changeset 7722 fb231d62adda
parent 7536 29961a416faa
child 7765 6f6253e44bdd
equal deleted inserted replaced
7720:4df02855f4b3 7722:fb231d62adda
   655 ### sqlite test database handling ##############################################
   655 ### sqlite test database handling ##############################################
   656 
   656 
   657 class SQLiteTestDataBaseHandler(TestDataBaseHandler):
   657 class SQLiteTestDataBaseHandler(TestDataBaseHandler):
   658     DRIVER = 'sqlite'
   658     DRIVER = 'sqlite'
   659 
   659 
       
   660     __TMPDB = set()
       
   661 
       
   662     @classmethod
       
   663     def _cleanup_all_tmpdb(cls):
       
   664         for dbpath in cls.__TMPDB:
       
   665             cls._cleanup_database(dbpath)
       
   666 
       
   667 
       
   668 
       
   669     def __init__(self, *args, **kwargs):
       
   670         super(SQLiteTestDataBaseHandler, self).__init__(*args, **kwargs)
       
   671         # use a dedicated base for each process.
       
   672         if 'global-db-name' not in self.system_source:
       
   673             self.system_source['global-db-name'] = self.system_source['db-name']
       
   674             process_db = self.system_source['db-name'] + str(os.getpid())
       
   675             self.__TMPDB.add(process_db)
       
   676             self.system_source['db-name'] = process_db
       
   677 
   660     @staticmethod
   678     @staticmethod
   661     def _cleanup_database(dbfile):
   679     def _cleanup_database(dbfile):
   662         try:
   680         try:
   663             os.remove(dbfile)
   681             os.remove(dbfile)
   664             os.remove('%s-journal' % dbfile)
   682             os.remove('%s-journal' % dbfile)
   665         except OSError:
   683         except OSError:
   666             pass
   684             pass
       
   685 
       
   686     @property
       
   687     def dbname(self):
       
   688         return self.system_source['global-db-name']
   667 
   689 
   668     def absolute_dbfile(self):
   690     def absolute_dbfile(self):
   669         """absolute path of current database file"""
   691         """absolute path of current database file"""
   670         dbfile = join(self._ensure_test_backup_db_dir(),
   692         dbfile = join(self._ensure_test_backup_db_dir(),
   671                       self.config.sources()['system']['db-name'])
   693                       self.config.sources()['system']['db-name'])
   704         """initialize a fresh sqlite databse used for testing purpose"""
   726         """initialize a fresh sqlite databse used for testing purpose"""
   705         # initialize the database
   727         # initialize the database
   706         from cubicweb.server import init_repository
   728         from cubicweb.server import init_repository
   707         self._cleanup_database(self.absolute_dbfile())
   729         self._cleanup_database(self.absolute_dbfile())
   708         init_repository(self.config, interactive=False)
   730         init_repository(self.config, interactive=False)
       
   731 
       
   732 import atexit
       
   733 atexit.register(SQLiteTestDataBaseHandler._cleanup_all_tmpdb)
   709 
   734 
   710 
   735 
   711 def install_sqlite_patch(querier):
   736 def install_sqlite_patch(querier):
   712     """This patch hotfixes the following sqlite bug :
   737     """This patch hotfixes the following sqlite bug :
   713        - http://www.sqlite.org/cvstrac/tktview?tn=1327,33
   738        - http://www.sqlite.org/cvstrac/tktview?tn=1327,33