diff options
| author | P. Christeas, O. Dony <> | 2010-11-25 15:22:19 +0100 |
|---|---|---|
| committer | Olivier Dony <odo@openerp.com> | 2010-11-25 15:22:19 +0100 |
| commit | 6a69f37cf063525734645fe2d76e2b6ad7792ee5 (patch) | |
| tree | 86849f688569004bc7dc80ba4e222dbbe7ecaa69 /bin/addons/base/module | |
| parent | f4c509bcfb2ca305c889a1bd57d4fd0e8cb6b7a0 (diff) | |
| parent | 897ba61b4b12110e574f86fd414220ae53328761 (diff) | |
[MERGE] many improvements regarding translations, logging, reports, http, speed
bzr revid: odo@openerp.com-20101125142219-8bkqfboyuslzpvyo
Diffstat (limited to 'bin/addons/base/module')
4 files changed, 63 insertions, 48 deletions
diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py index 81985332157..1dc507da2f3 100644 --- a/bin/addons/base/module/module.py +++ b/bin/addons/base/module/module.py @@ -27,7 +27,6 @@ import urllib import zipimport import addons -import netsvc import pooler import release import tools @@ -41,7 +40,7 @@ class module_category(osv.osv): _name = "ir.module.category" _description = "Module Category" - def _module_nbr(self,cr,uid, ids, prop, unknow_none,context): + def _module_nbr(self,cr,uid, ids, prop, unknow_none, context): cr.execute('SELECT category_id, COUNT(*) \ FROM ir_module_module \ WHERE category_id IN %(ids)s \ @@ -82,13 +81,13 @@ class module(osv.osv): 'module %s', name, exc_info=True) return info - def _get_latest_version(self, cr, uid, ids, field_name=None, arg=None, context={}): + def _get_latest_version(self, cr, uid, ids, field_name=None, arg=None, context=None): res = dict.fromkeys(ids, '') for m in self.browse(cr, uid, ids): res[m.id] = self.get_module_info(m.name).get('version', '') return res - def _get_views(self, cr, uid, ids, field_name=None, arg=None, context={}): + def _get_views(self, cr, uid, ids, field_name=None, arg=None, context=None): res = {} model_data_obj = self.pool.get('ir.model.data') view_obj = self.pool.get('ir.ui.view') @@ -99,37 +98,36 @@ class module(osv.osv): for m in mlist: mnames[m.name] = m.id res[m.id] = { - 'menus_by_module':'', - 'reports_by_module':'', - 'views_by_module': '' + 'menus_by_module':[], + 'reports_by_module':[], + 'views_by_module': [] } view_id = model_data_obj.search(cr,uid,[('module','in', mnames.keys()), ('model','in',('ir.ui.view','ir.actions.report.xml','ir.ui.menu'))]) for data_id in model_data_obj.browse(cr,uid,view_id,context): # We use try except, because views or menus may not exist try: - key = data_id['model'] + key = data_id.model if key=='ir.ui.view': - try: - v = view_obj.browse(cr,uid,data_id.res_id) - aa = v.inherit_id and '* INHERIT ' or '' - res[mnames[data_id.module]]['views_by_module'] += aa + v.name + ' ('+v.type+')\n' - except Exception: - self.__logger.debug( - 'Unknown error while browsing ir.ui.view[%s]', - data_id.res_id, exc_info=True) + v = view_obj.browse(cr,uid,data_id.res_id) + aa = v.inherit_id and '* INHERIT ' or '' + res[mnames[data_id.module]]['views_by_module'].append(aa + v.name + '('+v.type+')') elif key=='ir.actions.report.xml': - res[mnames[data_id.module]]['reports_by_module'] += report_obj.browse(cr,uid,data_id.res_id).name + '\n' + res[mnames[data_id.module]]['reports_by_module'].append(report_obj.browse(cr,uid,data_id.res_id).name) elif key=='ir.ui.menu': - try: - m = menu_obj.browse(cr,uid,data_id.res_id) - res[mnames[data_id.module]]['menus_by_module'] += m.complete_name + '\n' - except Exception: - self.__logger.debug( - 'Unknown error while browsing ir.ui.menu[%s]', - data_id.res_id, exc_info=True) - except KeyError: + res[mnames[data_id.module]]['menus_by_module'].append(menu_obj.browse(cr,uid,data_id.res_id).complete_name) + except KeyError, e: + self.__logger.warning( + 'Data not found for reference %s[%s:%s.%s]', data_id.model, + data_id.res_id, data_id.model, data_id.name, exc_info=True) pass + except Exception, e: + self.__logger.warning('Unknown error while browsing %s[%s]', + data_id.model, data_id.res_id, exc_info=True) + pass + for key, value in res.iteritems(): + for k, v in res[key].iteritems() : + res[key][k] = "\n".join(sorted(v)) return res _columns = { @@ -180,16 +178,21 @@ class module(osv.osv): } _defaults = { - 'state': lambda *a: 'uninstalled', - 'demo': lambda *a: False, - 'license': lambda *a: 'AGPL-3', + 'state': 'uninstalled', + 'demo': False, + 'license': 'AGPL-3', 'web': False, } _order = 'name' + def _name_uniq_msg(self, cr, uid, ids, context=None): + return _('The name of the module must be unique !') + def _certificate_uniq_msg(self, cr, uid, ids, context=None): + return _('The certificate ID of the module must be unique !') + _sql_constraints = [ - ('name_uniq', 'unique (name)', 'The name of the module must be unique !'), - ('certificate_uniq', 'unique (certificate)', 'The certificate ID of the module must be unique !') + ('name_uniq', 'UNIQUE (name)',_name_uniq_msg ), + ('certificate_uniq', 'UNIQUE (certificate)',_certificate_uniq_msg ) ] def unlink(self, cr, uid, ids, context=None): @@ -266,14 +269,14 @@ class module(osv.osv): demo = demo or mdemo return demo - def button_install(self, cr, uid, ids, context={}): + def button_install(self, cr, uid, ids, context=None): return self.state_update(cr, uid, ids, 'to install', ['uninstalled'], context) - def button_install_cancel(self, cr, uid, ids, context={}): + def button_install_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state': 'uninstalled', 'demo':False}) return True - def button_uninstall(self, cr, uid, ids, context={}): + def button_uninstall(self, cr, uid, ids, context=None): for module in self.browse(cr, uid, ids): cr.execute('''select m.state,m.name from @@ -289,7 +292,7 @@ class module(osv.osv): self.write(cr, uid, ids, {'state': 'to remove'}) return True - def button_uninstall_cancel(self, cr, uid, ids, context={}): + def button_uninstall_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state': 'installed'}) return True @@ -325,7 +328,7 @@ class module(osv.osv): self.button_install(cr, uid, to_install, context=context) return True - def button_upgrade_cancel(self, cr, uid, ids, context={}): + def button_upgrade_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state': 'installed'}) return True def button_update_translations(self, cr, uid, ids, context=None): @@ -418,7 +421,9 @@ class module(osv.osv): zimp.load_module(mod.name) return res - def _update_dependencies(self, cr, uid, id, depends=[]): + def _update_dependencies(self, cr, uid, id, depends=None): + if depends is None: + depends = [] for d in depends: cr.execute('INSERT INTO ir_module_module_dependency (module_id, name) values (%s, %s)', (id, d)) @@ -441,8 +446,8 @@ class module(osv.osv): categs = categs[1:] self.write(cr, uid, [id], {'category_id': p_id}) - def update_translations(self, cr, uid, ids, filter_lang=None, context={}): - logger = netsvc.Logger() + def update_translations(self, cr, uid, ids, filter_lang=None, context=None): + logger = logging.getLogger('i18n') if not filter_lang: pool = pooler.get_pool(cr.dbname) lang_obj = pool.get('res.lang') @@ -462,13 +467,18 @@ class module(osv.osv): if len(lang) > 5: raise osv.except_osv(_('Error'), _('You Can Not Load Translation For language Due To Invalid Language/Country Code')) iso_lang = tools.get_iso_codes(lang) - f = os.path.join(modpath, 'i18n', iso_lang + '.po') - if not os.path.exists(f) and iso_lang.find('_') != -1: - f = os.path.join(modpath, 'i18n', iso_lang.split('_')[0] + '.po') + f = addons.get_module_resource(mod.name, 'i18n', iso_lang + '.po') + # Implementation notice: we must first search for the full name of + # the language derivative, like "en_UK", and then the generic, + # like "en". + if (not f) and '_' in iso_lang: + f = addons.get_module_resource(mod.name, 'i18n', iso_lang.split('_')[0] + '.po') iso_lang = iso_lang.split('_')[0] - if os.path.exists(f): - logger.notifyChannel("i18n", netsvc.LOG_INFO, 'module %s: loading translation file for language %s' % (mod.name, iso_lang)) + if f: + logger.info('module %s: loading translation file for language %s', mod.name, iso_lang) tools.trans_load(cr.dbname, f, lang, verbose=False, context=context) + else: + logger.warning('module %s: no translation for language %s', mod.name, iso_lang) def check(self, cr, uid, ids, context=None): logger = logging.getLogger('init') @@ -537,7 +547,7 @@ class module_dependency(osv.osv): _name = "ir.module.module.dependency" _description = "Module dependency" - def _state(self, cr, uid, ids, name, args, context={}): + def _state(self, cr, uid, ids, name, args, context=None): result = {} mod_obj = self.pool.get('ir.module.module') for md in self.browse(cr, uid, ids): diff --git a/bin/addons/base/module/wizard/base_language_install.py b/bin/addons/base/module/wizard/base_language_install.py index 9cdae41ad2b..f7b469f85ed 100644 --- a/bin/addons/base/module/wizard/base_language_install.py +++ b/bin/addons/base/module/wizard/base_language_install.py @@ -38,7 +38,9 @@ class base_language_install(osv.osv_memory): 'state': 'init', 'overwrite': False } - def lang_install(self, cr, uid, ids, context): + def lang_install(self, cr, uid, ids, context=None): + if context is None: + context = {} language_obj = self.browse(cr, uid, ids)[0] lang = language_obj.lang if lang: diff --git a/bin/addons/base/module/wizard/base_module_upgrade.py b/bin/addons/base/module/wizard/base_module_upgrade.py index de9df1ec3e0..d712b3ccf77 100644 --- a/bin/addons/base/module/wizard/base_module_upgrade.py +++ b/bin/addons/base/module/wizard/base_module_upgrade.py @@ -20,6 +20,7 @@ ############################################################################## import pooler +import wizard from osv import osv, fields class base_module_upgrade(osv.osv_memory): @@ -80,7 +81,7 @@ class base_module_upgrade(osv.osv_memory): res = mod_obj.read(cr, uid, ids, ['name','state'], context) return {'module_info': '\n'.join(map(lambda x: x['name']+' : '+x['state'], res))} - def upgrade_module(self, cr, uid, ids, context): + def upgrade_module(self, cr, uid, ids, context=None): pool = pooler.get_pool(cr.dbname) mod_obj = self.pool.get('ir.module.module') data_obj = self.pool.get('ir.model.data') diff --git a/bin/addons/base/module/wizard/base_update_translations.py b/bin/addons/base/module/wizard/base_update_translations.py index b413e9d7093..6b329cf1212 100644 --- a/bin/addons/base/module/wizard/base_update_translations.py +++ b/bin/addons/base/module/wizard/base_update_translations.py @@ -35,7 +35,7 @@ class base_update_translations(osv.osv_memory): lang_obj=pooler.get_pool(cr.dbname).get('res.lang') ids=lang_obj.search(cr, uid, [('code', '=', lang_code)]) if not ids: - raise osv.except_osv(_('No language with code "%s" exists') % lang_code) + raise osv.except_osv(_('Error!'), _('No language with code "%s" exists') % lang_code) lang = lang_obj.browse(cr, uid, ids[0]) return lang.name def act_cancel(self, cr, uid, ids, context=None): @@ -51,12 +51,14 @@ class base_update_translations(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} def default_get(self, cr, uid, fields, context=None): + if context is None: + context = {} res = super(base_update_translations, self).default_get(cr, uid, fields, context=context) if context.get('active_model') != "res.lang": return res - record_id = context and context.get('active_id', False) or False + record_id = context.get('active_id', False) or False if record_id: lang = self.pool.get('res.lang').browse(cr, uid, record_id).code res.update(lang=lang) |
