diff --git a/trytond/modules/__init__.py b/trytond/modules/__init__.py index 2201e62575..5615b9fb13 100644 --- a/trytond/modules/__init__.py +++ b/trytond/modules/__init__.py @@ -90,9 +90,6 @@ class Node(Singleton): node.depth = max(self.depth + 1, node.depth) if node not in self.all_childs(): self.childs.append(node) - for attr in ('init', 'update'): - if hasattr(self, attr): - setattr(node, attr, True) self.childs.sort(key=operator.attrgetter('name')) def all_childs(self): @@ -128,9 +125,7 @@ class Node(Singleton): res += '%s`-> %s' % (' ' * depth, child.pprint(depth + 1)) return res -def create_graph(module_list, force=None): - if force is None: - force = [] +def create_graph(module_list): graph = Graph() packages = [] @@ -177,12 +172,6 @@ def create_graph(module_list, force=None): graph.add_node(package, all_deps) node = Node(package, graph) node.info = info - for kind in ('init', 'update'): - if (package in CONFIG[kind]) \ - or (('all' in CONFIG[kind]) \ - and (package != 'test')) \ - or (kind in force): - setattr(node, kind, True) else: later.add(package) packages.append((package, deps, xdep, info)) @@ -195,6 +184,15 @@ def create_graph(module_list, force=None): raise Exception('%s unmet dependencies: %s' % (package, missings)) return graph, packages, later + +def is_module_to_install(module): + for kind in ('init', 'update'): + if 'all' in CONFIG[kind] and module != 'test': + return True + elif module in CONFIG[kind]: + return True + return False + def load_module_graph(graph, pool, lang=None): if lang is None: lang = [CONFIG['language']] @@ -204,12 +202,10 @@ def load_module_graph(graph, pool, lang=None): cursor = Transaction().cursor modules = [x.name for x in graph] - cursor.execute('SELECT name, state FROM ir_module_module ' \ - 'WHERE name in (' + ','.join(('%s',) * len(modules)) + ')', - modules) - module2state = {} - for name, state in cursor.fetchall(): - module2state[name] = state + cursor.execute('SELECT name, state FROM ir_module_module ' + 'WHERE name in (' + ','.join(('%s',) * len(modules)) + ')', + modules) + module2state = dict(cursor.fetchall()) for package in graph: module = package.name @@ -219,10 +215,8 @@ def load_module_graph(graph, pool, lang=None): sys.stdout.flush() objects = pool.instanciate(module) package_state = module2state.get(module, 'uninstalled') - if hasattr(package, 'init') \ - or hasattr(package, 'update') \ - or (package_state in ('to install', 'to upgrade')): - + if (is_module_to_install(module) + or package_state in ('to install', 'to upgrade')): for type in objects.keys(): for obj in objects[type]: logger.info('%s:init %s' % (module, obj._name)) @@ -236,23 +230,10 @@ def load_module_graph(graph, pool, lang=None): for filename in package.info.get('xml', []): filename = filename.replace('/', os.sep) - mode = 'update' - if hasattr(package, 'init') or package_state == 'to install': - mode = 'init' logger.info('%s:loading %s' % (module, filename)) - ext = os.path.splitext(filename)[1] - if ext == '.sql': - if mode == 'init': - with tools.file_open(OPJ(module, filename)) as fp: - queries = fp.read().split(';') - for query in queries: - new_query = ' '.join(query.split()) - if new_query: - cursor.execute(new_query) - else: - # Feed the parser with xml content: - with tools.file_open(OPJ(module, filename)) as fp: - tryton_parser.parse_xmlstream(fp) + # Feed the parser with xml content: + with tools.file_open(OPJ(module, filename)) as fp: + tryton_parser.parse_xmlstream(fp) modules_todo.append((module, list(tryton_parser.to_delete))) @@ -271,23 +252,23 @@ def load_module_graph(graph, pool, lang=None): "WHERE name = %s", (package.name,)) module2state[package.name] = 'installed' - # Create missing reports - from trytond.report import Report - report_obj = pool.get('ir.action.report') - report_ids = report_obj.search([ - ('module', '=', module), - ]) - report_names = pool.object_name_list(type='report') - for report in report_obj.browse(report_ids): - report_name = report.report_name - if report_name not in report_names: - report = object.__new__(Report) - report._name = report_name - pool.add(report, type='report') - report.__init__() - cursor.commit() + # Create missing reports + from trytond.report import Report + report_obj = pool.get('ir.action.report') + report_ids = report_obj.search([ + ('module', '=', module), + ]) + report_names = pool.object_name_list(type='report') + for report in report_obj.browse(report_ids): + report_name = report.report_name + if report_name not in report_names: + report = object.__new__(Report) + report._name = report_name + pool.add(report, type='report') + report.__init__() + for model_name in models_to_update_history: model = pool.get(model_name) if model._history: @@ -384,7 +365,6 @@ def load_modules(database_name, pool, update=False, lang=None): Transaction().reset_context()) with contextmanager: cursor = Transaction().cursor - force = [] if update: if 'all' in CONFIG['init']: cursor.execute("SELECT name FROM ir_module_module " \ @@ -404,7 +384,7 @@ def load_modules(database_name, pool, update=False, lang=None): for module in CONFIG['update'].keys(): if CONFIG['update'][module]: module_list.append(module) - graph = create_graph(module_list, force)[0] + graph = create_graph(module_list)[0] try: load_module_graph(graph, pool, lang) @@ -430,8 +410,8 @@ def load_modules(database_name, pool, update=False, lang=None): cursor.commit() res = False - module_obj = pool.get('ir.module.module') - module_obj.update_list() + module_obj = pool.get('ir.module.module') + module_obj.update_list() cursor.commit() Cache.resets(database_name) return res diff --git a/trytond/pool.py b/trytond/pool.py index 24ed2fe186..fdada6f114 100644 --- a/trytond/pool.py +++ b/trytond/pool.py @@ -96,10 +96,8 @@ class Pool(object): def init(self, update=False, lang=None): ''' Init pool - - :param database_name: the database name - :param update: a boolean to proceed to update - :param lang: a list of language code to be updated + Set update to proceed to update + lang is a list of language code to be updated ''' logger = logging.getLogger('pool') logger.info('init pool for "%s"' % self.database_name) diff --git a/trytond/server.py b/trytond/server.py index 2475d27956..0496e5e0c9 100644 --- a/trytond/server.py +++ b/trytond/server.py @@ -120,15 +120,18 @@ class TrytonServer(object): cursor.close() for db_name in CONFIG["db_name"]: - cursor = Database(db_name).connect().cursor() - try: - if not cursor.test(): - raise Exception("'%s' is not a Tryton database!" % db_name) - cursor.execute('SELECT code FROM ir_lang ' \ - 'WHERE translatable') - lang = [x[0] for x in cursor.fetchall()] - finally: - cursor.close() + if update: + cursor = Database(db_name).connect().cursor() + try: + if not cursor.test(): + raise Exception("'%s' is not a Tryton database!" % db_name) + cursor.execute('SELECT code FROM ir_lang ' \ + 'WHERE translatable') + lang = [x[0] for x in cursor.fetchall()] + finally: + cursor.close() + else: + lang = None Pool(db_name).init(update=update, lang=lang) for kind in ('init', 'update'):