Xavier (Open ERP) has proposed merging
lp:~openerp-dev/openobject-server/trunk-cleanup-db-creation-xmo into
lp:openobject-server.
Requested reviews:
Vo Minh Thu (OpenERP) (vmt-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-cleanup-db-creation-xmo/+merge/70040
Code cleanups to db creation, including usage of `logging` instead of netsvc in
older code
--
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-cleanup-db-creation-xmo/+merge/70040
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-server/trunk-cleanup-db-creation-xmo.
=== modified file 'openerp/modules/loading.py'
--- openerp/modules/loading.py 2011-07-12 13:33:43 +0000
+++ openerp/modules/loading.py 2011-08-01 16:08:55 +0000
@@ -24,36 +24,34 @@
"""
-import os, sys, imp
-from os.path import join as opj
+import base64
+import imp
import itertools
+import logging
+import os
+import re
+import sys
+import zipfile
import zipimport
+from cStringIO import StringIO
+from os.path import join as opj
+from zipfile import PyZipFile, ZIP_DEFLATED
+
+
import openerp
-
+import openerp.modules.db
+import openerp.modules.graph
+import openerp.modules.migration
+import openerp.netsvc as netsvc
import openerp.osv as osv
+import openerp.pooler as pooler
+import openerp.release as release
import openerp.tools as tools
import openerp.tools.osutil as osutil
+
from openerp.tools.safe_eval import safe_eval as eval
-import openerp.pooler as pooler
from openerp.tools.translate import _
-
-import openerp.netsvc as netsvc
-
-import zipfile
-import openerp.release as release
-
-import re
-import base64
-from zipfile import PyZipFile, ZIP_DEFLATED
-from cStringIO import StringIO
-
-import logging
-
-import openerp.modules.db
-import openerp.modules.graph
-import openerp.modules.migration
-
from openerp.modules.module import \
get_modules, get_modules_with_version, \
load_information_from_description_file, \
@@ -81,6 +79,7 @@
:param skip_modules: optional list of module names (packages) which have previously been loaded and can be skipped
:return: list of modules that were installed or updated
"""
+ logger = logging.getLogger('init.load')
def process_sql_file(cr, fp):
queries = fp.read().split(';')
for query in queries:
@@ -88,28 +87,20 @@
if new_query:
cr.execute(new_query)
- def load_init_xml(cr, module_name, idref, mode):
- _load_data(cr, module_name, idref, mode, 'init_xml')
-
- def load_update_xml(cr, module_name, idref, mode):
- _load_data(cr, module_name, idref, mode, 'update_xml')
-
- def load_demo_xml(cr, module_name, idref, mode):
- _load_data(cr, module_name, idref, mode, 'demo_xml')
-
- def load_data(cr, module_name, idref, mode):
- _load_data(cr, module_name, idref, mode, 'data')
-
- def load_demo(cr, module_name, idref, mode):
- _load_data(cr, module_name, idref, mode, 'demo')
-
- def load_test(cr, module_name, idref, mode):
+ load_init_xml = lambda *args: _load_data(cr, *args, kind='init_xml')
+ load_update_xml = lambda *args: _load_data(cr, *args, kind='update_xml')
+ load_demo_xml = lambda *args: _load_data(cr, *args, kind='demo_xml')
+ load_data = lambda *args: _load_data(cr, *args, kind='data')
+ load_demo = lambda *args: _load_data(cr, *args, kind='demo')
+
+ def load_test(module_name, idref, mode):
cr.commit()
if not tools.config.options['test_disable']:
try:
_load_data(cr, module_name, idref, mode, 'test')
except Exception, e:
- logging.getLogger('test').exception('Tests failed to execute in module %s', module_name)
+ logging.getLogger('init.test').exception(
+ 'Tests failed to execute in module %s', module_name)
finally:
if tools.config.options['test_commit']:
cr.commit()
@@ -126,8 +117,7 @@
"""
for filename in package.data[kind]:
- log = logging.getLogger('init')
- log.info("module %s: loading %s", module_name, filename)
+ logger.info("module %s: loading %s", module_name, filename)
_, ext = os.path.splitext(filename)
pathname = os.path.join(module_name, filename)
fp = tools.file_open(pathname)
@@ -153,20 +143,19 @@
processed_modules = []
loaded_modules = []
- statusi = 0
pool = pooler.get_pool(cr.dbname)
migrations = openerp.modules.migration.MigrationManager(cr, graph)
- logger.notifyChannel('init', netsvc.LOG_DEBUG, 'loading %d packages..' % len(graph))
+ logger.debug('loading %d packages...', len(graph))
# register, instantiate and initialize models for each modules
- for package in graph:
+ for index, package in enumerate(graph):
module_name = package.name
module_id = package.id
if skip_modules and module_name in skip_modules:
continue
- logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: loading objects' % package.name)
+ logger.info('module %s: loading objects', package.name)
migrations.migrate_module(package, 'pre')
register_module_classes(package.name)
models = pool.instanciate(package.name, cr)
@@ -174,7 +163,7 @@
if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
init_module_models(cr, package.name, models)
- status['progress'] = float(statusi) / len(graph)
+ status['progress'] = float(index) / len(graph)
# Can't put this line out of the loop: ir.module.module will be
# registered by init_module_models() above.
@@ -193,20 +182,20 @@
if package.state=='to upgrade':
# upgrading the module information
modobj.write(cr, 1, [module_id], modobj.get_values_from_terp(package.data))
- load_init_xml(cr, module_name, idref, mode)
- load_update_xml(cr, module_name, idref, mode)
- load_data(cr, module_name, idref, mode)
+ load_init_xml(module_name, idref, mode)
+ load_update_xml(module_name, idref, mode)
+ load_data(module_name, idref, mode)
if hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed'):
- status['progress'] = (float(statusi)+0.75) / len(graph)
- load_demo_xml(cr, module_name, idref, mode)
- load_demo(cr, module_name, idref, mode)
+ status['progress'] = (index + 0.75) / len(graph)
+ load_demo_xml(module_name, idref, mode)
+ load_demo(module_name, idref, mode)
cr.execute('update ir_module_module set demo=%s where id=%s', (True, module_id))
# launch tests only in demo mode, as most tests will depend
# on demo data. Other tests can be added into the regular
# 'data' section, but should probably not alter the data,
# as there is no rollback.
- load_test(cr, module_name, idref, mode)
+ load_test(module_name, idref, mode)
processed_modules.append(package.name)
@@ -224,7 +213,6 @@
delattr(package, kind)
cr.commit()
- statusi += 1
cr.commit()
=== modified file 'openerp/service/web_services.py'
--- openerp/service/web_services.py 2011-06-23 09:04:57 +0000
+++ openerp/service/web_services.py 2011-08-01 16:08:55 +0000
@@ -20,13 +20,17 @@
##############################################################################
import base64
+import locale
+import logging
import os
+import platform
import security
+import sys
import thread
import threading
import time
-import sys
-import platform
+import traceback
+from cStringIO import StringIO
from openerp.tools.translate import _
import openerp.netsvc as netsvc
import openerp.pooler as pooler
@@ -34,9 +38,6 @@
import openerp.sql_db as sql_db
import openerp.tools as tools
import openerp.modules
-import locale
-import logging
-from cStringIO import StringIO
#.apidoc title: Exported Service methods
#.apidoc module-mods: member-order: bysource
@@ -84,6 +85,41 @@
finally:
cr.close()
+ def _initialize_db(self, serv, id, db_name, demo, lang, user_password='admin'):
+ cr = None
+ try:
+ serv.actions[id]['progress'] = 0
+ cr = sql_db.db_connect(db_name).cursor()
+ openerp.modules.db.initialize(cr) # TODO this should be removed as it is done by pooler.restart_pool.
+ tools.config['lang'] = lang
+ cr.commit()
+ cr.close()
+
+ pool = pooler.restart_pool(db_name, demo, serv.actions[id],
+ update_module=True)[1]
+
+ cr = sql_db.db_connect(db_name).cursor()
+
+ if lang:
+ modobj = pool.get('ir.module.module')
+ mids = modobj.search(cr, 1, [('state', '=', 'installed')])
+ modobj.update_translations(cr, 1, mids, lang)
+
+ cr.execute('UPDATE res_users SET password=%s, context_lang=%s, active=True WHERE login=%s', (
+ user_password, lang, 'admin'))
+ cr.execute('SELECT login, password, name ' \
+ ' FROM res_users ' \
+ ' ORDER BY login')
+ serv.actions[id].update(users=cr.dictfetchall(), clean=True)
+ cr.commit()
+ cr.close()
+ except Exception, e:
+ serv.actions[id].update(clean=False, exception=e)
+ logging.getLogger('db.create').exception('CREATE DATABASE failed:')
+ serv.actions[id]['traceback'] = traceback.format_exc()
+ if cr:
+ cr.close()
+
def exp_create(self, db_name, demo, lang, user_password='admin'):
self.id_protect.acquire()
self.id += 1
@@ -94,52 +130,8 @@
self._create_empty_database(db_name)
- class DBInitialize(object):
- def __call__(self, serv, id, db_name, demo, lang, user_password='admin'):
- cr = None
- try:
- serv.actions[id]['progress'] = 0
- cr = sql_db.db_connect(db_name).cursor()
- openerp.modules.db.initialize(cr) # TODO this should be removed as it is done by pooler.restart_pool.
- tools.config['lang'] = lang
- cr.commit()
- cr.close()
-
- pool = pooler.restart_pool(db_name, demo, serv.actions[id],
- update_module=True)[1]
-
- cr = sql_db.db_connect(db_name).cursor()
-
- if lang:
- modobj = pool.get('ir.module.module')
- mids = modobj.search(cr, 1, [('state', '=', 'installed')])
- modobj.update_translations(cr, 1, mids, lang)
-
- cr.execute('UPDATE res_users SET password=%s, context_lang=%s, active=True WHERE login=%s', (
- user_password, lang, 'admin'))
- cr.execute('SELECT login, password, name ' \
- ' FROM res_users ' \
- ' ORDER BY login')
- serv.actions[id]['users'] = cr.dictfetchall()
- serv.actions[id]['clean'] = True
- cr.commit()
- cr.close()
- except Exception, e:
- serv.actions[id]['clean'] = False
- serv.actions[id]['exception'] = e
- import traceback
- e_str = StringIO()
- traceback.print_exc(file=e_str)
- traceback_str = e_str.getvalue()
- e_str.close()
- netsvc.Logger().notifyChannel('web-services', netsvc.LOG_ERROR, 'CREATE DATABASE\n%s' % (traceback_str))
- serv.actions[id]['traceback'] = traceback_str
- if cr:
- cr.close()
- logger = netsvc.Logger()
- logger.notifyChannel("web-services", netsvc.LOG_INFO, 'CREATE DATABASE: %s' % (db_name.lower()))
- dbi = DBInitialize()
- create_thread = threading.Thread(target=dbi,
+ logging.getLogger('db.create').info('CREATE DATABASE %s', db_name.lower())
+ create_thread = threading.Thread(target=self._initialize_db,
args=(self, id, db_name, demo, lang, user_password))
create_thread.start()
self.actions[id]['thread'] = create_thread
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp