[ADD] Makefile and quality_integration_server module for Integration server
bzr revid: hmo@hmo-tinyerp-20090820133521-udjbwhbjnzkdlfhl
This commit is contained in:
parent
e76e46f247
commit
6a05a3c778
|
@ -0,0 +1,43 @@
|
||||||
|
# -*- makefile -*-
|
||||||
|
|
||||||
|
addons-path := bin/addons/
|
||||||
|
root-path := bin/
|
||||||
|
port := 8069
|
||||||
|
net_port := 8070
|
||||||
|
module := base
|
||||||
|
database := terp
|
||||||
|
language := fr_FR
|
||||||
|
i18n-import := bin/addons/base/i18n/fr_FR.po
|
||||||
|
interrogation_file := bin/addons/quality_integration_server/base_quality_interrogation.py
|
||||||
|
login := admin
|
||||||
|
password := admin
|
||||||
|
|
||||||
|
start:
|
||||||
|
python $(interrogation_file) start-server --root-path=$(root-path) --addons-path=$(addons-path) --port=$(port)
|
||||||
|
|
||||||
|
create-db:
|
||||||
|
python $(interrogation_file) create-db --database=$(database) --root-path=$(root-path) --addons-path=$(addons-path) --port=$(port) --login=$(login) --password=$(password)
|
||||||
|
|
||||||
|
drop-db:
|
||||||
|
python $(interrogation_file) drop-db --database=$(database) --root-path=$(root-path) --addons-path=$(addons-path) --port=$(port)
|
||||||
|
|
||||||
|
install-module:
|
||||||
|
python $(interrogation_file) install-module --modules=$(module) --database=$(database) --root-path=$(root-path) --addons-path=$(addons-path) --port=$(port) --login=$(login) --password=$(password)
|
||||||
|
|
||||||
|
upgrade-module:
|
||||||
|
python $(interrogation_file) upgrade-module --modules=$(module) --database=$(database) --root-path=$(root-path) --addons-path=$(addons-path) --port=$(port) --login=$(login) --password=$(password)
|
||||||
|
|
||||||
|
|
||||||
|
install-translation:
|
||||||
|
python $(interrogation_file) install-translation --database=$(database) --translate-in=$(i18n-import) --port=$(port) --login=$(login) --password=$(password) --root-path=$(root-path) --addons-path=$(addons-path)
|
||||||
|
|
||||||
|
|
||||||
|
version:
|
||||||
|
python bin/openerp-server.py --version
|
||||||
|
|
||||||
|
check-quality:
|
||||||
|
python $(interrogation_file) check-quality --database=$(database) --modules=$(module) --port=$(port) --login=$(login) --password=$(password) --addons-path=$(addons-path) --root-path=$(root-path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,296 @@
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Management Solution
|
||||||
|
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
import xmlrpclib
|
||||||
|
import ConfigParser
|
||||||
|
import optparse
|
||||||
|
import sys
|
||||||
|
import thread
|
||||||
|
import threading
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import pickle
|
||||||
|
import base64
|
||||||
|
|
||||||
|
admin_passwd = 'admin'
|
||||||
|
|
||||||
|
def start_server(root_path, port, addons_path):
|
||||||
|
if root_path:
|
||||||
|
root_path += '/'
|
||||||
|
os.system('python '+root_path+'openerp-server.py --pidfile=openerp.pid --port=%s --no-netrpc --addons-path=%s' %(str(port),addons_path))
|
||||||
|
def clean():
|
||||||
|
if os.path.isfile('openerp.pid'):
|
||||||
|
ps = open('openerp.pid')
|
||||||
|
if ps:
|
||||||
|
pid = int(ps.read())
|
||||||
|
ps.close()
|
||||||
|
if pid:
|
||||||
|
os.kill(pid,9)
|
||||||
|
|
||||||
|
def login(uri, dbname, user, pwd):
|
||||||
|
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/common')
|
||||||
|
uid = conn.login(dbname, user, pwd)
|
||||||
|
return 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 = 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'
|
||||||
|
datas = {'form':{}}
|
||||||
|
while state!='end':
|
||||||
|
res = conn.execute(dbname, uid, pwd, wiz_id, datas, state, {})
|
||||||
|
if 'datas' in res:
|
||||||
|
datas['form'].update( res['datas'].get('form',{}) )
|
||||||
|
if res['type']=='form':
|
||||||
|
for field in res['fields'].keys():
|
||||||
|
datas['form'][field] = res['fields'][field].get('value', False)
|
||||||
|
state = res['state'][-1][0]
|
||||||
|
trans_obj = open(trans_in)
|
||||||
|
datas['form'].update({
|
||||||
|
'name': lang,
|
||||||
|
'code': lang,
|
||||||
|
'data' : base64.encodestring(trans_obj.read())
|
||||||
|
})
|
||||||
|
trans_obj.close()
|
||||||
|
elif res['type']=='action':
|
||||||
|
state = res['state']
|
||||||
|
|
||||||
|
|
||||||
|
def check_quality(uri, user, pwd, dbname, modules):
|
||||||
|
uid = login(uri, dbname, user, pwd)
|
||||||
|
if uid:
|
||||||
|
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
|
||||||
|
qualityresult = {}
|
||||||
|
final = {}
|
||||||
|
test_detail = {}
|
||||||
|
for module in modules:
|
||||||
|
quality_result = 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 += "<oi>"
|
||||||
|
for x,y,detail in quality_result['check_detail_ids']:
|
||||||
|
if detail.get('detail') != '':
|
||||||
|
test = detail.get('name')
|
||||||
|
score = round(float(detail.get('score',0)),2)
|
||||||
|
html += "<li><a href=\"#%s\">%s (%.2f)</a></li>"%(test,test,score)
|
||||||
|
detail_html +="<a name=\"%s\"><h3>%s (Score : %s)</h3>%s</a>"%(test,test,score,detail.get('detail'))
|
||||||
|
detail_html +='''<a href="#TOP">Go to Top</a>'''
|
||||||
|
test_detail[test] = (score,detail.get('detail',''))
|
||||||
|
html += "</oi>%s</body></html></html></html></html></html>"%(detail_html)
|
||||||
|
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
|
||||||
|
else:
|
||||||
|
print 'Login Failed...'
|
||||||
|
clean()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def wait(id,url=''):
|
||||||
|
progress=0.0
|
||||||
|
sock2 = xmlrpclib.ServerProxy(url+'/db')
|
||||||
|
while not progress==1.0:
|
||||||
|
progress,users = sock2.get_progress(admin_passwd, id)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def create_db(uri, dbname, user='admin', pwd='admin', lang='en_US'):
|
||||||
|
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db')
|
||||||
|
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
|
||||||
|
wiz_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
|
||||||
|
login_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/common')
|
||||||
|
db_list = conn.list()
|
||||||
|
if dbname not in db_list:
|
||||||
|
id = conn.create(admin_passwd, dbname, True, lang)
|
||||||
|
wait(id,uri)
|
||||||
|
uid = login_conn.login(dbname, user, pwd)
|
||||||
|
|
||||||
|
wiz_id = wiz_conn.create(dbname, uid, user, 'base_setup.base_setup')
|
||||||
|
|
||||||
|
state = 'init'
|
||||||
|
datas = {'form':{}}
|
||||||
|
|
||||||
|
while state!='config':
|
||||||
|
res = 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():
|
||||||
|
datas['form'][field] = datas['form'].get(field,False)
|
||||||
|
state = res['state'][-1][0]
|
||||||
|
datas['form'].update({
|
||||||
|
'profile': -1
|
||||||
|
})
|
||||||
|
elif res['type']=='state':
|
||||||
|
state = res['state']
|
||||||
|
res = wiz_conn.execute(dbname, uid, pwd, wiz_id, datas, state, {})
|
||||||
|
install_module(uri, dbname, ['base_module_quality'],user,pwd)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def drop_db(uri, dbname):
|
||||||
|
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db')
|
||||||
|
db_list = conn.list()
|
||||||
|
if dbname in db_list:
|
||||||
|
conn.drop(admin_passwd, dbname)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def install_module(uri, dbname, modules, user='admin', pwd='admin'):
|
||||||
|
uid = login(uri, dbname, user, pwd)
|
||||||
|
if uid:
|
||||||
|
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
|
||||||
|
wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
|
||||||
|
module_ids = obj_conn.execute(dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)])
|
||||||
|
obj_conn.execute(dbname, uid, pwd, 'ir.module.module', 'button_install', module_ids)
|
||||||
|
wiz_id = wizard_conn.create(dbname, uid, pwd, 'module.upgrade.simple')
|
||||||
|
state = 'init'
|
||||||
|
datas = {}
|
||||||
|
#while state!='menu':
|
||||||
|
while state!='end':
|
||||||
|
res = wizard_conn.execute(dbname, uid, pwd, wiz_id, datas, state, {})
|
||||||
|
if state == 'init':
|
||||||
|
state = 'start'
|
||||||
|
elif state == 'start':
|
||||||
|
state = 'end'
|
||||||
|
return True
|
||||||
|
|
||||||
|
def upgrade_module(uri, dbname, modules, user='admin', pwd='admin'):
|
||||||
|
uid = login(uri, dbname, user, pwd)
|
||||||
|
if uid:
|
||||||
|
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
|
||||||
|
wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
|
||||||
|
module_ids = obj_conn.execute(dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)])
|
||||||
|
obj_conn.execute(dbname, uid, pwd, 'ir.module.module', 'button_upgrade', module_ids)
|
||||||
|
wiz_id = wizard_conn.create(dbname, uid, pwd, 'module.upgrade.simple')
|
||||||
|
state = 'init'
|
||||||
|
datas = {}
|
||||||
|
#while state!='menu':
|
||||||
|
while state!='end':
|
||||||
|
res = wizard_conn.execute(dbname, uid, pwd, wiz_id, datas, state, {})
|
||||||
|
if state == 'init':
|
||||||
|
state = 'start'
|
||||||
|
elif state == 'start':
|
||||||
|
state = 'end'
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
usage = """%prog command [options]
|
||||||
|
|
||||||
|
Basic Commands:
|
||||||
|
start-server Start Server
|
||||||
|
create-db Create new database
|
||||||
|
drop-db Drop database
|
||||||
|
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.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("--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("--translate-in", dest="translate_in",
|
||||||
|
help="specify .po files to import translation terms")
|
||||||
|
(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")
|
||||||
|
|
||||||
|
def die(cond, msg):
|
||||||
|
if cond:
|
||||||
|
print msg
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
die(opt.modules and (not opt.db_name),
|
||||||
|
"the modules option cannot be used without the database (-d) option")
|
||||||
|
|
||||||
|
die(opt.translate_in and (not opt.db_name),
|
||||||
|
"the translate-in option cannot be used without the database (-d) option")
|
||||||
|
|
||||||
|
options = {
|
||||||
|
'addons-path' : opt.addons_path or 'addons',
|
||||||
|
'root-path' : opt.root_path or '',
|
||||||
|
'translate-in': opt.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 '',
|
||||||
|
}
|
||||||
|
|
||||||
|
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 []
|
||||||
|
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()
|
||||||
|
print 'Please wait 20 sec to start server....',uri
|
||||||
|
time.sleep(20)
|
||||||
|
if command == 'create-db':
|
||||||
|
create_db(uri, options['database'], options['login'], options['pwd'])
|
||||||
|
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':
|
||||||
|
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'])
|
||||||
|
clean()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
except xmlrpclib.Fault, e:
|
||||||
|
print e.faultString
|
||||||
|
clean()
|
||||||
|
sys.exit(1)
|
||||||
|
except Exception, e:
|
||||||
|
print e
|
||||||
|
clean()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue