-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ADD] Makefile and quality_integration_server module for Integration …
…server bzr revid: hmo@hmo-tinyerp-20090820133521-udjbwhbjnzkdlfhl
- Loading branch information
Harshad Modi
committed
Aug 20, 2009
1 parent
e76e46f
commit 6a05a3c
Showing
2 changed files
with
339 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
|
||
|
||
|
||
|
296 changes: 296 additions & 0 deletions
296
bin/addons/quality_integration_server/base_quality_interrogation.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
|
||
|
||
|