diff -r 7a2e2a3c3b0c -r a7f3245e1728 server/migractions.py --- a/server/migractions.py Thu Oct 06 10:13:24 2011 +0200 +++ b/server/migractions.py Thu Oct 06 16:15:16 2011 +0200 @@ -50,7 +50,7 @@ from yams.schema2sql import eschema2sql, rschema2sql from yams.schema import RelationDefinitionSchema -from cubicweb import AuthenticationError, ExecutionError +from cubicweb import CW_SOFTWARE_ROOT, AuthenticationError, ExecutionError from cubicweb.selectors import is_instance from cubicweb.schema import (ETYPE_NAME_MAP, META_RTYPES, VIRTUAL_RTYPES, PURE_VIRTUAL_RTYPES, @@ -350,9 +350,14 @@ """cached constraint types mapping""" return ss.cstrtype_mapping(self._cw) - def exec_event_script(self, event, cubepath=None, funcname=None, - *args, **kwargs): - if cubepath: + def cmd_exec_event_script(self, event, cube=None, funcname=None, + *args, **kwargs): + """execute a cube event scripts `migration/.py` where event + is one of 'precreate', 'postcreate', 'preremove' and 'postremove'. + """ + assert event in ('precreate', 'postcreate', 'preremove', 'postremove') + if cube: + cubepath = self.config.cube_dir(cube) apc = osp.join(cubepath, 'migration', '%s.py' % event) else: apc = osp.join(self.config.migration_scripts_dir(), '%s.py' % event) @@ -372,7 +377,16 @@ if self.config.free_wheel: self.cmd_reactivate_verification_hooks() - def install_custom_sql_scripts(self, directory, driver): + def cmd_install_custom_sql_scripts(self, cube=None): + """install a cube custom sql scripts `schema/*..sql` where + depends on the instance main database backend (eg 'postgres', + 'mysql'...) + """ + driver = self.repo.system_source.dbdriver + if cube is None: + directory = osp.join(CW_SOFTWARE_ROOT, 'schemas') + else: + directory = self.config.cube_dir(cube) sql_scripts = [] for fpath in glob(osp.join(directory, '*.sql.%s' % driver)): newname = osp.basename(fpath).replace('.sql.%s' % driver, @@ -659,10 +673,9 @@ new = set() # execute pre-create files driver = self.repo.system_source.dbdriver - for pack in reversed(newcubes): - cubedir = self.config.cube_dir(pack) - self.install_custom_sql_scripts(osp.join(cubedir, 'schema'), driver) - self.exec_event_script('precreate', cubedir) + for cube in reversed(newcubes): + self.cmd_install_custom_sql_scripts(cube) + self.cmd_exec_event_script('precreate', cube) # add new entity and relation types for rschema in newcubes_schema.relations(): if not rschema in self.repo.schema: @@ -685,8 +698,8 @@ self.cmd_add_relation_definition(str(fromtype), rschema.type, str(totype)) # execute post-create files - for pack in reversed(newcubes): - self.exec_event_script('postcreate', self.config.cube_dir(pack)) + for cube in reversed(newcubes): + self.cmd_exec_event_script('postcreate', cube) self.commit() def cmd_remove_cube(self, cube, removedeps=False): @@ -698,8 +711,8 @@ removedcubes_schema = self.config.load_schema(construction_mode='non-strict') reposchema = self.repo.schema # execute pre-remove files - for pack in reversed(removedcubes): - self.exec_event_script('preremove', self.config.cube_dir(pack)) + for cube in reversed(removedcubes): + self.cmd_exec_event_script('preremove', cube) # remove cubes'entity and relation types for rschema in fsschema.relations(): if not rschema in removedcubes_schema and rschema in reposchema: @@ -720,7 +733,7 @@ str(fromtype), rschema.type, str(totype)) # execute post-remove files for cube in reversed(removedcubes): - self.exec_event_script('postremove', self.config.cube_dir(cube)) + self.cmd_exec_event_script('postremove', cube) self.rqlexec('DELETE CWProperty X WHERE X pkey %(pk)s', {'pk': u'system.version.'+cube}, ask_confirm=False) self.commit()