[IMP] code refactoring

This commit is contained in:
Gery Debongnie 2014-07-17 11:14:31 +02:00
parent 242e28abf9
commit 06fe91b443

View File

@ -14,6 +14,7 @@ import simplejson
import subprocess import subprocess
import time import time
import sys import sys
from collections import OrderedDict
import dateutil.parser import dateutil.parser
import requests import requests
@ -456,20 +457,22 @@ class runbot_build(osv.osv):
def create(self, cr, uid, values, context=None): def create(self, cr, uid, values, context=None):
build_id = super(runbot_build, self).create(cr, uid, values, context=context) build_id = super(runbot_build, self).create(cr, uid, values, context=context)
build = self.browse(cr, uid, build_id)
extra_info = {'sequence' : build_id} extra_info = {'sequence' : build_id}
for build in self.browse(cr, uid, [build_id]): # detect duplicate
domain = [ domain = [
('repo_id','=',build.repo_id.duplicate_id.id), ('repo_id','=',build.repo_id.duplicate_id.id),
('name', '=', build.name), ('name', '=', build.name),
('duplicate_id', '=', False), ('duplicate_id', '=', False),
('result', '!=', 'skipped') ('result', '!=', 'skipped')
] ]
duplicate_ids = self.search(cr, uid, domain) print domain
if len(duplicate_ids): duplicate_ids = self.search(cr, uid, domain)
duplicate_id = duplicate_ids[0] print duplicate_ids
extra_info.update({'state': 'duplicate', 'duplicate_id': duplicate_id}) if len(duplicate_ids):
self.write(cr, uid, [duplicate_id], {'duplicate_id': build_id}) extra_info.update({'state': 'duplicate', 'duplicate_id': duplicate_ids[0]})
self.write(cr, uid, [duplicate_ids[0]], {'duplicate_id': build_id})
self.write(cr, uid, [build_id], extra_info, context=context) self.write(cr, uid, [build_id], extra_info, context=context)
def reset(self, cr, uid, ids, context=None): def reset(self, cr, uid, ids, context=None):
@ -860,61 +863,58 @@ class runbot_event(osv.osv):
class RunbotController(http.Controller): class RunbotController(http.Controller):
def common(self, cr, uid):
registry, cr, uid, context = request.registry, request.cr, request.uid, request.context
repo_obj = registry['runbot.repo']
v = {}
ids = repo_obj.search(cr, uid, [], order='id')
v['repos'] = repo_obj.browse(cr, uid, ids)
v['s2h'] = s2human
return v
@http.route(['/runbot', '/runbot/repo/<model("runbot.repo"):repo>'], type='http', auth="public", website=True) @http.route(['/runbot', '/runbot/repo/<model("runbot.repo"):repo>'], type='http', auth="public", website=True)
def repo(self, repo=None, search='', limit='100', refresh='', **post): def repo(self, repo=None, search='', limit='100', refresh='', **post):
registry, cr, uid = request.registry, request.cr, 1 registry, cr, uid = request.registry, request.cr, 1
branch_obj = registry['runbot.branch'] branch_obj = registry['runbot.branch']
build_obj = registry['runbot.build'] build_obj = registry['runbot.build']
icp = registry['ir.config_parameter'] icp = registry['ir.config_parameter']
workers = icp.get_param(cr, uid, 'runbot.workers', default=6) repo_obj = registry['runbot.repo']
running_max = icp.get_param(cr, uid, 'runbot.running_max', default=75)
pending_total = build_obj.search_count(cr, uid, [('state','=','pending')]) repo_ids = repo_obj.search(cr, uid, [], order='id')
testing_total = build_obj.search_count(cr, uid, [('state','=','testing')]) repos = repo_obj.browse(cr, uid, repo_ids)
running_total = build_obj.search_count(cr, uid, [('state','=','running')]) if not repo and repos:
repo = repos[0]
context = {
'repos': repos,
'repo': repo,
's2h': s2human,
'workers': icp.get_param(cr, uid, 'runbot.workers', default=6),
'running_max': icp.get_param(cr, uid, 'runbot.running_max', default=75),
'pending_total': build_obj.search_count(cr, uid, [('state','=','pending')]),
'testing_total': build_obj.search_count(cr, uid, [('state','=','testing')]),
'running_total': build_obj.search_count(cr, uid, [('state','=','running')]),
'limit': limit,
'search': search,
'refresh': refresh,
}
context = self.common(cr, uid)
# repo
if not repo and context['repos']:
repo = context['repos'][0]
if repo: if repo:
# filters # filters
dom = [('repo_id','=',repo.id)] filters = {key: post.get(key, '1') for key in ['pending', 'testing', 'running', 'done']}
filters = {} domain = [('repo_id','=',repo.id)]
for k in ['pending','testing','running','done']: domain += [('state', '!=', key) for key, value in filters.iteritems() if value == '0']
filters[k] = post.get(k, '1')
if filters[k] == '0':
dom += [('state','!=',k)]
if search: if search:
dom += [('dest','ilike',search)] domain += [('dest','ilike',search)]
context['filters'] = filters context['filters'] = filters
qu = QueryURL('/runbot/repo/'+slug(repo), search=search, limit=limit, refresh=refresh, **filters) qu = QueryURL('/runbot/repo/'+slug(repo), search=search, limit=limit, refresh=refresh, **filters)
context['qu'] = qu context['qu'] = qu
build_ids = build_obj.search(cr, uid, dom + [('branch_id.sticky','=',True)])
build_ids += build_obj.search(cr, uid, dom + [('branch_id.sticky','=',False)], limit=int(limit))
branch_ids = [] build_ids = build_obj.search(cr, uid, domain + [('branch_id.sticky','=',False)], limit=int(limit))
# builds and branches, order on join SQL is needed branch_ids = branch_obj.search(cr, uid, [('sticky', '=', True)])
q = """
SELECT br.id FROM runbot_branch br INNER JOIN runbot_build bu ON br.id=bu.branch_id WHERE bu.id in %s
ORDER BY br.sticky DESC, CASE WHEN br.sticky THEN br.branch_name END, bu.sequence DESC
"""
if build_ids: if build_ids:
q = """
SELECT br.id FROM runbot_branch br INNER JOIN runbot_build bu ON br.id=bu.branch_id WHERE bu.id in %s
ORDER BY bu.sequence DESC
"""
cr.execute(q, (tuple(build_ids),)) cr.execute(q, (tuple(build_ids),))
for br in cr.fetchall(): branch_ids += OrderedDict.fromkeys(br[0] for br in cr.fetchall()).keys()
if br[0] not in branch_ids:
branch_ids.append(br[0])
branches = branch_obj.browse(cr, uid, branch_ids, context=request.context) branches = branch_obj.browse(cr, uid, branch_ids, context=request.context)
context['branches'] = [] context['branches'] = []
for branch in branches: for branch in branches:
build_ids = build_obj.search(cr, uid, [('branch_id','=',branch.id)], limit=4) build_ids = build_obj.search(cr, uid, [('branch_id','=',branch.id)], limit=4)
branch.builds = build_obj.browse(cr, uid, build_ids, context=request.context) branch.builds = build_obj.browse(cr, uid, build_ids, context=request.context)
@ -925,17 +925,6 @@ class RunbotController(http.Controller):
context['running'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','running')]) context['running'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','running')])
context['pending'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','pending')]) context['pending'] = build_obj.search_count(cr, uid, [('repo_id','=',repo.id), ('state','=','pending')])
context.update({
'search': search,
'limit': limit,
'refresh': refresh,
'repo': repo,
'workers': workers,
'running_max': running_max,
'pending_total': pending_total,
'running_total': running_total,
'testing_total': testing_total,
})
return request.render("runbot.repo", context) return request.render("runbot.repo", context)
@http.route(['/runbot/build/<build_id>'], type='http', auth="public", website=True) @http.route(['/runbot/build/<build_id>'], type='http', auth="public", website=True)