[MERGE] synchronous db-creation call, significantly simplified db creation code
also removed custom blockUI and error management hooks since it's now a perfectly standard RPC call and webclient is already available bzr revid: xmo@openerp.com-20120309140536-21u2ked9oc7eaie5
This commit is contained in:
commit
6501553263
|
@ -357,13 +357,8 @@ class Database(openerpweb.Controller):
|
|||
dbs = [i for i in dbs if re.match(r, i)]
|
||||
return {"db_list": dbs}
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def progress(self, req, password, id):
|
||||
return req.session.proxy('db').get_progress(password, id)
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def create(self, req, fields):
|
||||
|
||||
params = dict(map(operator.itemgetter('name', 'value'), fields))
|
||||
create_attrs = (
|
||||
params['super_admin_pwd'],
|
||||
|
@ -373,17 +368,7 @@ class Database(openerpweb.Controller):
|
|||
params['create_admin_pwd']
|
||||
)
|
||||
|
||||
try:
|
||||
return req.session.proxy("db").create(*create_attrs)
|
||||
except xmlrpclib.Fault, e:
|
||||
if e.faultCode and isinstance(e.faultCode, str)\
|
||||
and e.faultCode.split(':')[0] == 'AccessDenied':
|
||||
return {'error': e.faultCode, 'title': 'Database creation error'}
|
||||
return {
|
||||
'error': "Could not create database '%s': %s" % (
|
||||
params['db_name'], e.faultString),
|
||||
'title': 'Database creation error'
|
||||
}
|
||||
return req.session.proxy("db").create_database(*create_attrs)
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def drop(self, req, fields):
|
||||
|
|
|
@ -344,44 +344,6 @@ openerp.web.Database = openerp.web.OldWidget.extend(/** @lends openerp.web.Datab
|
|||
});
|
||||
return result;
|
||||
},
|
||||
/**
|
||||
* Waits until the new database is done creating, then unblocks the UI and
|
||||
* logs the user in as admin
|
||||
*
|
||||
* @param {Number} db_creation_id identifier for the db-creation operation, used to fetch the current installation progress
|
||||
* @param {Object} info info fields for this database creation
|
||||
* @param {String} info.db name of the database being created
|
||||
* @param {String} info.password super-admin password for the database
|
||||
*/
|
||||
wait_for_newdb: function (db_creation_id, info) {
|
||||
var self = this;
|
||||
self.rpc('/web/database/progress', {
|
||||
id: db_creation_id,
|
||||
password: info.password
|
||||
}, function (result) {
|
||||
var progress = result[0];
|
||||
// I'd display a progress bar, but turns out the progress status
|
||||
// the server report kind-of blows goats: it's at 0 for ~75% of
|
||||
// the installation, then jumps to 75%, then jumps down to either
|
||||
// 0 or ~40%, then back up to 75%, then terminates. Let's keep that
|
||||
// mess hidden behind a not-very-useful but not overly weird
|
||||
// message instead.
|
||||
if (progress < 1) {
|
||||
setTimeout(function () {
|
||||
self.wait_for_newdb(db_creation_id, info);
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
var admin = result[1][0];
|
||||
setTimeout(function () {
|
||||
self.widget_parent.do_login(
|
||||
info.db, admin.login, admin.password);
|
||||
self.stop();
|
||||
self.unblockUI();
|
||||
});
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Blocks UI and replaces $.unblockUI by a noop to prevent third parties
|
||||
* from unblocking the UI
|
||||
|
@ -421,23 +383,19 @@ openerp.web.Database = openerp.web.OldWidget.extend(/** @lends openerp.web.Datab
|
|||
self.$option_id.find("form[name=create_db_form]").validate({
|
||||
submitHandler: function (form) {
|
||||
var fields = $(form).serializeArray();
|
||||
self.blockUI();
|
||||
self.rpc("/web/database/create", {'fields': fields}, function(result) {
|
||||
if (result.error) {
|
||||
self.unblockUI();
|
||||
self.display_error(result);
|
||||
return;
|
||||
}
|
||||
if (self.db_list) {
|
||||
self.db_list.push(self.to_object(fields)['db_name']);
|
||||
self.db_list.sort();
|
||||
self.widget_parent.set_db_list(self.db_list);
|
||||
}
|
||||
|
||||
var form_obj = self.to_object(fields);
|
||||
self.wait_for_newdb(result, {
|
||||
password: form_obj['super_admin_pwd'],
|
||||
db: form_obj['db_name']
|
||||
});
|
||||
self.widget_parent.do_login(
|
||||
form_obj['db_name'],
|
||||
'admin',
|
||||
form_obj['create_admin_pwd']);
|
||||
self.stop();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue