~openerp-dev/openobject-server/trunk-bug-723424-gpa

« back to all changes in this revision

Viewing changes to openerp/modules/loading.py

  • Committer: Vo Minh Thu
  • Date: 2011-08-09 12:00:57 UTC
  • mfrom: (3524.3.6 cleanup-create-db)
  • Revision ID: vmt@openerp.com-20110809120057-h5x68x1gd1ykeu36
[MERGE] some cleaning in module loading code, especially logging.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
"""
26
26
 
27
 
import os, sys, imp
28
 
from os.path import join as opj
 
27
import base64
 
28
import imp
29
29
import itertools
 
30
import logging
 
31
import os
 
32
import re
 
33
import sys
 
34
import zipfile
30
35
import zipimport
31
36
 
 
37
from cStringIO import StringIO
 
38
from os.path import join as opj
 
39
from zipfile import PyZipFile, ZIP_DEFLATED
 
40
 
 
41
 
32
42
import openerp
33
 
 
 
43
import openerp.modules.db
 
44
import openerp.modules.graph
 
45
import openerp.modules.migration
 
46
import openerp.netsvc as netsvc
34
47
import openerp.osv as osv
 
48
import openerp.pooler as pooler
 
49
import openerp.release as release
35
50
import openerp.tools as tools
36
51
import openerp.tools.osutil as osutil
 
52
 
37
53
from openerp.tools.safe_eval import safe_eval as eval
38
 
import openerp.pooler as pooler
39
54
from openerp.tools.translate import _
40
 
 
41
 
import openerp.netsvc as netsvc
42
 
 
43
 
import zipfile
44
 
import openerp.release as release
45
 
 
46
 
import re
47
 
import base64
48
 
from zipfile import PyZipFile, ZIP_DEFLATED
49
 
from cStringIO import StringIO
50
 
 
51
 
import logging
52
 
 
53
 
import openerp.modules.db
54
 
import openerp.modules.graph
55
 
import openerp.modules.migration
56
 
 
57
55
from openerp.modules.module import \
58
56
    get_modules, get_modules_with_version, \
59
57
    load_information_from_description_file, \
81
79
       :param skip_modules: optional list of module names (packages) which have previously been loaded and can be skipped
82
80
       :return: list of modules that were installed or updated
83
81
    """
 
82
    logger = logging.getLogger('init.load')
84
83
    def process_sql_file(cr, fp):
85
84
        queries = fp.read().split(';')
86
85
        for query in queries:
88
87
            if new_query:
89
88
                cr.execute(new_query)
90
89
 
91
 
    def load_init_xml(cr, module_name, idref, mode):
92
 
        _load_data(cr, module_name, idref, mode, 'init_xml')
93
 
 
94
 
    def load_update_xml(cr, module_name, idref, mode):
95
 
        _load_data(cr, module_name, idref, mode, 'update_xml')
96
 
 
97
 
    def load_demo_xml(cr, module_name, idref, mode):
98
 
        _load_data(cr, module_name, idref, mode, 'demo_xml')
99
 
 
100
 
    def load_data(cr, module_name, idref, mode):
101
 
        _load_data(cr, module_name, idref, mode, 'data')
102
 
 
103
 
    def load_demo(cr, module_name, idref, mode):
104
 
        _load_data(cr, module_name, idref, mode, 'demo')
105
 
 
106
 
    def load_test(cr, module_name, idref, mode):
 
90
    load_init_xml = lambda *args: _load_data(cr, *args, kind='init_xml')
 
91
    load_update_xml = lambda *args: _load_data(cr, *args, kind='update_xml')
 
92
    load_demo_xml = lambda *args: _load_data(cr, *args, kind='demo_xml')
 
93
    load_data = lambda *args: _load_data(cr, *args, kind='data')
 
94
    load_demo = lambda *args: _load_data(cr, *args, kind='demo')
 
95
 
 
96
    def load_test(module_name, idref, mode):
107
97
        cr.commit()
108
98
        if not tools.config.options['test_disable']:
109
99
            try:
110
100
                _load_data(cr, module_name, idref, mode, 'test')
111
101
            except Exception, e:
112
 
                logging.getLogger('test').exception('Tests failed to execute in module %s', module_name)
 
102
                logging.getLogger('init.test').exception(
 
103
                    'Tests failed to execute in module %s', module_name)
113
104
            finally:
114
105
                if tools.config.options['test_commit']:
115
106
                    cr.commit()
126
117
 
127
118
        """
128
119
        for filename in package.data[kind]:
129
 
            log = logging.getLogger('init')
130
 
            log.info("module %s: loading %s", module_name, filename)
 
120
            logger.info("module %s: loading %s", module_name, filename)
131
121
            _, ext = os.path.splitext(filename)
132
122
            pathname = os.path.join(module_name, filename)
133
123
            fp = tools.file_open(pathname)
153
143
 
154
144
    processed_modules = []
155
145
    loaded_modules = []
156
 
    statusi = 0
157
146
    pool = pooler.get_pool(cr.dbname)
158
147
    migrations = openerp.modules.migration.MigrationManager(cr, graph)
159
 
    logger.notifyChannel('init', netsvc.LOG_DEBUG, 'loading %d packages..' % len(graph))
 
148
    logger.debug('loading %d packages...', len(graph))
160
149
 
161
150
    # register, instantiate and initialize models for each modules
162
 
    for package in graph:
 
151
    for index, package in enumerate(graph):
163
152
        module_name = package.name
164
153
        module_id = package.id
165
154
 
166
155
        if skip_modules and module_name in skip_modules:
167
156
            continue
168
157
 
169
 
        logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: loading objects' % package.name)
 
158
        logger.info('module %s: loading objects', package.name)
170
159
        migrations.migrate_module(package, 'pre')
171
160
        register_module_classes(package.name)
172
161
        models = pool.instanciate(package.name, cr)
174
163
        if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
175
164
            init_module_models(cr, package.name, models)
176
165
 
177
 
        status['progress'] = float(statusi) / len(graph)
 
166
        status['progress'] = float(index) / len(graph)
178
167
 
179
168
        # Can't put this line out of the loop: ir.module.module will be
180
169
        # registered by init_module_models() above.
193
182
            if package.state=='to upgrade':
194
183
                # upgrading the module information
195
184
                modobj.write(cr, 1, [module_id], modobj.get_values_from_terp(package.data))
196
 
            load_init_xml(cr, module_name, idref, mode)
197
 
            load_update_xml(cr, module_name, idref, mode)
198
 
            load_data(cr, module_name, idref, mode)
 
185
            load_init_xml(module_name, idref, mode)
 
186
            load_update_xml(module_name, idref, mode)
 
187
            load_data(module_name, idref, mode)
199
188
            if hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed'):
200
 
                status['progress'] = (float(statusi)+0.75) / len(graph)
201
 
                load_demo_xml(cr, module_name, idref, mode)
202
 
                load_demo(cr, module_name, idref, mode)
 
189
                status['progress'] = (index + 0.75) / len(graph)
 
190
                load_demo_xml(module_name, idref, mode)
 
191
                load_demo(module_name, idref, mode)
203
192
                cr.execute('update ir_module_module set demo=%s where id=%s', (True, module_id))
204
193
 
205
194
                # launch tests only in demo mode, as most tests will depend
206
195
                # on demo data. Other tests can be added into the regular
207
196
                # 'data' section, but should probably not alter the data,
208
197
                # as there is no rollback.
209
 
                load_test(cr, module_name, idref, mode)
 
198
                load_test(module_name, idref, mode)
210
199
 
211
200
            processed_modules.append(package.name)
212
201
 
224
213
                    delattr(package, kind)
225
214
 
226
215
        cr.commit()
227
 
        statusi += 1
228
216
 
229
217
    cr.commit()
230
218