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 |