devtools/__init__.py
branchstable
changeset 5994 97c55baefa0c
parent 5754 51179e0bb250
child 6164 ceb6951f9d2f
equal deleted inserted replaced
5976:00b1b6b906cf 5994:97c55baefa0c
    19 
    19 
    20 """
    20 """
    21 __docformat__ = "restructuredtext en"
    21 __docformat__ = "restructuredtext en"
    22 
    22 
    23 import os
    23 import os
       
    24 import sys
    24 import logging
    25 import logging
    25 from datetime import timedelta
    26 from datetime import timedelta
    26 from os.path import (abspath, join, exists, basename, dirname, normpath, split,
    27 from os.path import (abspath, join, exists, basename, dirname, normpath, split,
    27                      isfile, isabs)
    28                      isfile, isabs)
    28 
    29 
   179     cube_appobject_path = TestServerConfiguration.cube_appobject_path | TwistedConfiguration.cube_appobject_path
   180     cube_appobject_path = TestServerConfiguration.cube_appobject_path | TwistedConfiguration.cube_appobject_path
   180 
   181 
   181     def available_languages(self, *args):
   182     def available_languages(self, *args):
   182         return ('en', 'fr', 'de')
   183         return ('en', 'fr', 'de')
   183 
   184 
   184     def ext_resources_file(self):
       
   185         """return instance's external resources file"""
       
   186         return join(self.apphome, 'data', 'external_resources')
       
   187 
       
   188     def pyro_enabled(self):
   185     def pyro_enabled(self):
   189         # but export PYRO_MULTITHREAD=0 or you get problems with sqlite and threads
   186         # but export PYRO_MULTITHREAD=0 or you get problems with sqlite and
       
   187         # threads
   190         return True
   188         return True
   191 
   189 
   192 
   190 
   193 class ApptestConfiguration(BaseApptestConfiguration):
   191 class ApptestConfiguration(BaseApptestConfiguration):
   194 
   192 
   208     driver = sources['system']['db-driver']
   206     driver = sources['system']['db-driver']
   209     if driver == 'sqlite':
   207     if driver == 'sqlite':
   210         init_test_database_sqlite(config)
   208         init_test_database_sqlite(config)
   211     elif driver == 'postgres':
   209     elif driver == 'postgres':
   212         init_test_database_postgres(config)
   210         init_test_database_postgres(config)
   213     elif driver == 'sqlserver2005':
       
   214         init_test_database_sqlserver2005(config)
       
   215     else:
   211     else:
   216         raise ValueError('no initialization function for driver %r' % driver)
   212         raise ValueError('no initialization function for driver %r' % driver)
   217     config._cubes = None # avoid assertion error
   213     config._cubes = None # avoid assertion error
   218     repo, cnx = in_memory_cnx(config, unicode(sources['admin']['login']),
   214     repo, cnx = in_memory_cnx(config, unicode(sources['admin']['login']),
   219                               password=sources['admin']['password'] or 'xxx')
   215                               password=sources['admin']['password'] or 'xxx')
   225 def reset_test_database(config):
   221 def reset_test_database(config):
   226     """init a test database for a specific driver"""
   222     """init a test database for a specific driver"""
   227     driver = config.sources()['system']['db-driver']
   223     driver = config.sources()['system']['db-driver']
   228     if driver == 'sqlite':
   224     if driver == 'sqlite':
   229         reset_test_database_sqlite(config)
   225         reset_test_database_sqlite(config)
   230     elif driver in ('sqlserver2005', 'postgres'):
   226     elif driver == 'postgres':
   231         # XXX do something with dump/restore ?
   227         init_test_database_postgres(config)
   232         print 'resetting the database is not done for', driver
       
   233         print 'you should handle it manually'
       
   234     else:
   228     else:
   235         raise ValueError('no reset function for driver %r' % driver)
   229         raise ValueError('no reset function for driver %r' % driver)
   236 
   230 
   237 
   231 
   238 ### postgres test database handling ############################################
   232 ### postgres test database handling ############################################
   239 
   233 
   240 def init_test_database_postgres(config):
   234 def init_test_database_postgres(config):
   241     """initialize a fresh postgresql databse used for testing purpose"""
   235     """initialize a fresh postgresql databse used for testing purpose"""
   242     if config.init_repository:
   236     from logilab.database import get_db_helper
   243         from cubicweb.server import init_repository
   237     from cubicweb.server import init_repository
   244         init_repository(config, interactive=False, drop=True)
   238     from cubicweb.server.serverctl import (createdb, system_source_cnx,
   245 
   239                                            _db_sys_cnx)
   246 ### sqlserver2005 test database handling ############################################
   240     source = config.sources()['system']
       
   241     dbname = source['db-name']
       
   242     templdbname = dbname + '_template'
       
   243     helper = get_db_helper('postgres')
       
   244     # connect on the dbms system base to create our base
       
   245     dbcnx = _db_sys_cnx(source, 'CREATE DATABASE and / or USER', verbose=0)
       
   246     cursor = dbcnx.cursor()
       
   247     try:
       
   248         if dbname in helper.list_databases(cursor):
       
   249             cursor.execute('DROP DATABASE %s' % dbname)
       
   250         if not templdbname in helper.list_databases(cursor):
       
   251             source['db-name'] = templdbname
       
   252             createdb(helper, source, dbcnx, cursor)
       
   253             dbcnx.commit()
       
   254             cnx = system_source_cnx(source, special_privs='LANGUAGE C', verbose=0)
       
   255             templcursor = cnx.cursor()
       
   256             # XXX factorize with db-create code
       
   257             helper.init_fti_extensions(templcursor)
       
   258             # install plpythonu/plpgsql language if not installed by the cube
       
   259             langs = sys.platform == 'win32' and ('plpgsql',) or ('plpythonu', 'plpgsql')
       
   260             for extlang in langs:
       
   261                 helper.create_language(templcursor, extlang)
       
   262             cnx.commit()
       
   263             templcursor.close()
       
   264             cnx.close()
       
   265             init_repository(config, interactive=False)
       
   266             source['db-name'] = dbname
       
   267     except:
       
   268         dbcnx.rollback()
       
   269         # XXX drop template
       
   270         raise
       
   271     createdb(helper, source, dbcnx, cursor, template=templdbname)
       
   272     dbcnx.commit()
       
   273     dbcnx.close()
       
   274 
       
   275 ### sqlserver2005 test database handling #######################################
   247 
   276 
   248 def init_test_database_sqlserver2005(config):
   277 def init_test_database_sqlserver2005(config):
   249     """initialize a fresh sqlserver databse used for testing purpose"""
   278     """initialize a fresh sqlserver databse used for testing purpose"""
   250     if config.init_repository:
   279     if config.init_repository:
   251         from cubicweb.server import init_repository
   280         from cubicweb.server import init_repository