diff options
| author | HDA (OpenERP) <hda@tinyerp.com> | 2009-10-01 17:38:20 +0530 |
|---|---|---|
| committer | HDA (OpenERP) <hda@tinyerp.com> | 2009-10-01 17:38:20 +0530 |
| commit | eefe57c93ec8705cbdaa1d510c2df5024d3f0b41 (patch) | |
| tree | 2aadcf39ae088d8411b44f1cca0fbf2e634c8c8e /bin/addons/quality_integration_server/base_quality_interrogation.py | |
| parent | d514c8c694cfbea01c74d7b2b254ff9d08efed36 (diff) | |
| parent | 92df67814c628cb475ebd5fd4921c4bed570f31b (diff) | |
[MERGE]
bzr revid: hda@tinyerp.com-20091001120820-2tke1hk1ixd7nbb8
Diffstat (limited to 'bin/addons/quality_integration_server/base_quality_interrogation.py')
| -rwxr-xr-x | bin/addons/quality_integration_server/base_quality_interrogation.py | 229 |
1 files changed, 142 insertions, 87 deletions
diff --git a/bin/addons/quality_integration_server/base_quality_interrogation.py b/bin/addons/quality_integration_server/base_quality_interrogation.py index a50e12f5391..b79c8a5ff77 100755 --- a/bin/addons/quality_integration_server/base_quality_interrogation.py +++ b/bin/addons/quality_integration_server/base_quality_interrogation.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution +# OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved # $Id$ # @@ -37,26 +37,36 @@ waittime = 10 wait_count = 0 wait_limit = 12 +def to_decode(s): + try: + return s.encode('utf-8') + except UnicodeError: + try: + return s.encode('latin') + except UnicodeError: + try: + return s.decode('ascii') + except UnicodeError: + return s + def start_server(root_path, port, addons_path): - if root_path: - root_path += '/' - os.system('python2.5 '+root_path+'openerp-server.py --pidfile=openerp.pid --port=%s --no-netrpc --addons-path=%s' %(str(port),addons_path)) + os.system('python2.5 %sopenerp-server.py --pidfile=openerp.pid --port=%s --no-netrpc --addons-path=%s' %(root_path, str(port), addons_path)) def clean(): if os.path.isfile('openerp.pid'): - ps = open('openerp.pid') + ps = open('openerp.pid') if ps: pid = int(ps.read()) - ps.close() - if pid: + ps.close() + if pid: os.kill(pid,9) - + def execute(connector, method, *args): global wait_count res = False - try: + try: res = getattr(connector,method)(*args) - except socket.error,e: - if e.args[0] == 111: + except socket.error,e: + if e.args[0] == 111: if wait_count > wait_limit: print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds."%(wait_limit) clean() @@ -68,24 +78,23 @@ def execute(connector, method, *args): else: raise e wait_count = 0 - return res - + return res def login(uri, dbname, user, pwd): conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/common') - uid = execute(conn,'login',dbname, user, pwd) + uid = execute(conn,'login',dbname, user, pwd) return uid -def import_translate(uri, user, pwd, dbname, translate_in): - uid = login(uri, dbname, user, pwd) - if uid: +def import_translate(uri, user, pwd, dbname, translate_in): + uid = login(uri, dbname, user, pwd) + if uid: conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard') wiz_id = execute(conn,'create',dbname, uid, pwd, 'module.lang.import') for trans_in in translate_in: - lang,ext = os.path.splitext(trans_in.split('/')[-1]) - state = 'init' + lang,ext = os.path.splitext(trans_in.split('/')[-1]) + state = 'init' datas = {'form':{}} - while state!='end': + while state!='end': res = execute(conn,'execute',dbname, uid, pwd, wiz_id, datas, state, {}) if 'datas' in res: datas['form'].update( res['datas'].get('form',{}) ) @@ -101,41 +110,49 @@ def import_translate(uri, user, pwd, dbname, translate_in): }) trans_obj.close() elif res['type']=='action': - state = res['state'] - - -def check_quality(uri, user, pwd, dbname, modules): + state = res['state'] + + +def check_quality(uri, user, pwd, dbname, modules, quality_logs): uid = login(uri, dbname, user, pwd) + quality_logs += 'quality-logs' if uid: conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object') - qualityresult = {} - final = {} - test_detail = {} - for module in modules: + final = {} + for module in modules: + qualityresult = {} + test_detail = {} quality_result = execute(conn,'execute', dbname, uid, pwd,'module.quality.check','check_quality',module) detail_html = '' - html = '''<html><html><html><html><body><a name="TOP"></a>''' - html +="<h1> Module : %s </h1>"%(quality_result['name']) - html += "<h2> Final score : %s</h2>"%(quality_result['final_score']) + html = '''<html><body><a name="TOP"></a>''' + html +="<h1> Module: %s </h1>"%(quality_result['name']) + html += "<h2> Final score: %s</h2>"%(quality_result['final_score']) html += "<div id='tabs'>" html += "<ul>" - for x,y,detail in quality_result['check_detail_ids']: + for x,y,detail in quality_result['check_detail_ids']: test = detail.get('name') + msg = detail.get('message','') score = round(float(detail.get('score',0)),2) html += "<li><a href=\"#%s\">%s</a></li>"%(test.replace(' ','-'),test) - detail_html +="<div id=\"%s\"><h3>%s (Score : %s)</h3>%s</div>"%(test.replace(' ','-'),test,score,detail.get('detail')) - test_detail[test] = (score,detail.get('detail','')) - html += "</ul>%s</body></html></html></html></html></html>"%(detail_html) - html += "</div>" - final[quality_result['name']] = (quality_result['final_score'],html,test_detail) - - fp = open('quality_log.pck','wb') - pck_obj = pickle.dump(final,fp) - fp.close() - print "LOG PATH%s"%(os.path.realpath('quality_log.pck')) - return final + detail_html +='''<div id=\"%s\"><h3>%s (Score : %s)</h3><font color=red><h5>%s</h5></font>%s</div>'''%(test.replace(' ', '-'), test, score, msg, detail.get('detail', '')) + test_detail[test] = (score,msg,detail.get('detail','')) + html += "</ul>" + html += "%s"%(detail_html) + html += "</div></body></html>" + if not os.path.isdir(quality_logs): + os.mkdir(quality_logs) + fp = open('%s/%s.html'%(quality_logs,module),'wb') + fp.write(to_decode(html)) + fp.close() + #final[quality_result['name']] = (quality_result['final_score'],html,test_detail) + + #fp = open('quality_log.pck','wb') + #pck_obj = pickle.dump(final,fp) + #fp.close() + #print "LOG PATH%s"%(os.path.realpath('quality_log.pck')) + return True else: - print 'Login Failed...' + print 'Login Failed...' clean() sys.exit(1) @@ -156,76 +173,101 @@ def create_db(uri, dbname, user='admin', pwd='admin', lang='en_US'): login_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/common') db_list = execute(conn, 'list') if dbname not in db_list: - id = execute(conn,'create',admin_passwd, dbname, True, lang) + id = execute(conn,'create',admin_passwd, dbname, True, lang) wait(id,uri) - uid = login_conn.login(dbname, user, pwd) + uid = login_conn.login(dbname, user, pwd) wiz_id = execute(wiz_conn,'create', dbname, uid, user, 'base_setup.base_setup') state = 'init' datas = {'form':{}} - while state!='config': + while state!='config': res = execute(wiz_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {}) if state=='init': datas['form'].update( res['datas'] ) if res['type']=='form': - for field in res['fields'].keys(): + for field in res['fields'].keys(): datas['form'][field] = datas['form'].get(field,False) state = res['state'][-1][0] datas['form'].update({ - 'profile': -1 + 'profile': -1 }) elif res['type']=='state': state = res['state'] res = execute(wiz_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {}) - install_module(uri, dbname, ['base_module_quality'],user,pwd) + install_module(uri, dbname, ['base_module_quality'],user=user,pwd=pwd) return True def drop_db(uri, dbname): conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db') db_list = execute(conn,'list') if dbname in db_list: - execute(conn, 'drop', admin_passwd, dbname) + execute(conn, 'drop', admin_passwd, dbname) return True -def install_module(uri, dbname, modules, user='admin', pwd='admin'): +def make_links(uri, uid, dbname, source, destination, module, user, pwd): + if module in ('base','quality_integration_server'): + return True + if not os.path.islink(destination + '/' + module): + if not os.path.isdir(destination + '/' + module): + for path in source: + if os.path.isdir(path + '/' + module): + os.symlink(path + '/' + module, destination + '/' + module) + obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object') + execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'update_list') + module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','=',module)]) + if len(module_ids): + data = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'read', module_ids[0],['name','dependencies_id']) + dep_datas = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module.dependency', 'read', data['dependencies_id'],['name']) + for dep_data in dep_datas: + make_links(uri, uid, dbname, source, destination, dep_data['name'], user, pwd) + return True + return False + +def install_module(uri, dbname, modules, addons='', extra_addons='', user='admin', pwd='admin'): uid = login(uri, dbname, user, pwd) - if uid: + if extra_addons: + extra_addons = extra_addons.split(',') + if uid: + if addons and extra_addons: + for module in modules: + make_links(uri, uid, dbname, extra_addons, addons, module, user, pwd) + obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object') wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard') - module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)]) - execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'button_install', module_ids) + module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)]) + execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'button_install', module_ids) wiz_id = execute(wizard_conn, 'create', dbname, uid, pwd, 'module.upgrade.simple') state = 'init' datas = {} #while state!='menu': - while state!='end': - res = execute(wizard_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {}) + while state!='end': + res = execute(wizard_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {}) if state == 'init': state = 'start' elif state == 'start': - state = 'end' + state = 'end' return True def upgrade_module(uri, dbname, modules, user='admin', pwd='admin'): uid = login(uri, dbname, user, pwd) - if uid: + if uid: obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object') - wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard') - module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)]) - execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'button_upgrade', module_ids) + wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard') + module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)]) + execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'button_upgrade', module_ids) wiz_id = execute(wizard_conn, 'create', dbname, uid, pwd, 'module.upgrade.simple') state = 'init' datas = {} #while state!='menu': - while state!='end': - res = execute(wizard_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {}) + while state!='end': + res = execute(wizard_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {}) if state == 'init': state = 'start' elif state == 'start': - state = 'end' - + state = 'end' + return True @@ -238,28 +280,32 @@ Basic Commands: start-server Start Server create-db Create new database drop-db Drop database - install-module Install module + install-module Install module upgrade-module Upgrade module install-translation Install translation file check-quality Calculate quality and dump quality result into quality_log.pck using pickle """ -parser = optparse.OptionParser(usage) +parser = optparse.OptionParser(usage) parser.add_option("--modules", dest="modules", help="specify modules to install or check quality") parser.add_option("--addons-path", dest="addons_path", help="specify the addons path") +parser.add_option("--quality-logs", dest="quality_logs", help="specify the path of quality logs files which has to stores") parser.add_option("--root-path", dest="root_path", help="specify the root path") parser.add_option("-p", "--port", dest="port", help="specify the TCP port", type="int") -parser.add_option("-d", "--database", dest="db_name", help="specify the database name") -parser.add_option("--login", dest="login", help="specify the User Login") -parser.add_option("--password", dest="pwd", help="specify the User Password") +parser.add_option("-d", "--database", dest="db_name", help="specify the database name") +parser.add_option("--login", dest="login", help="specify the User Login") +parser.add_option("--password", dest="pwd", help="specify the User Password") parser.add_option("--translate-in", dest="translate_in", help="specify .po files to import translation terms") +parser.add_option("--extra-addons", dest="extra_addons", + help="specify extra_addons and trunkCommunity modules path ") + (opt, args) = parser.parse_args() if len(args) != 1: parser.error("incorrect number of arguments") command = args[0] if command not in ('start-server','create-db','drop-db','install-module','upgrade-module','check-quality','install-translation'): - parser.error("incorrect command") + parser.error("incorrect command") def die(cond, msg): if cond: @@ -274,38 +320,47 @@ die(opt.translate_in and (not opt.db_name), options = { 'addons-path' : opt.addons_path or 'addons', + 'quality-logs' : opt.quality_logs or '', 'root-path' : opt.root_path or '', - 'translate-in': opt.translate_in, - 'port' : opt.port or 8069, + 'translate-in': [], + 'port' : opt.port or 8069, 'database': opt.db_name or 'terp', 'modules' : opt.modules or [], 'login' : opt.login or 'admin', 'pwd' : opt.pwd or '', + 'extra-addons':opt.extra_addons or [] } options['modules'] = opt.modules and map(lambda m: m.strip(), opt.modules.split(',')) or [] -options['translate_in'] = opt.translate_in and map(lambda m: m.strip(), opt.translate_in.split(',')) or [] +# Hint:i18n-import=purchase:ar_AR.po+sale:fr_FR.po,nl_BE.po +if opt.translate_in: + translate = opt.translate_in + for module_name,po_files in map(lambda x:tuple(x.split(':')),translate.split('+')): + for po_file in po_files.split(','): + po_link = '%s/%s/i18n/%s'%(options['addons-path'], module_name, po_file) + options['translate-in'].append(po_link) + uri = 'http://localhost:' + str(options['port']) server_thread = threading.Thread(target=start_server, args=(options['root-path'], options['port'], options['addons-path'])) -try: - server_thread.start() - if command == 'create-db': +try: + server_thread.start() + if command == 'create-db': create_db(uri, options['database'], options['login'], options['pwd']) - if command == 'drop-db': + if command == 'drop-db': drop_db(uri, options['database']) - if command == 'install-module': - install_module(uri, options['database'], options['modules'], options['login'], options['pwd']) - if command == 'upgrade-module': + if command == 'install-module': + install_module(uri, options['database'], options['modules'],options['addons-path'],options['extra-addons'],options['login'], options['pwd']) + if command == 'upgrade-module': upgrade_module(uri, options['database'], options['modules'], options['login'], options['pwd']) if command == 'check-quality': - check_quality(uri, options['login'], options['pwd'], options['database'], options['modules']) - if command == 'install-translation': - import_translate(uri, options['login'], options['pwd'], options['database'], options['translate_in']) + check_quality(uri, options['login'], options['pwd'], options['database'], options['modules'], options['quality-logs']) + if command == 'install-translation': + import_translate(uri, options['login'], options['pwd'], options['database'], options['translate-in']) clean() sys.exit(0) - + except xmlrpclib.Fault, e: print e.faultString clean() @@ -315,4 +370,4 @@ except Exception, e: clean() sys.exit(1) -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
