Use user/passwd/host/port for postgres tools

bzr revid: ced-b9871220aebafa28ae4738dbb9f8abaaa3b6e975
This commit is contained in:
ced 2007-10-08 11:30:42 +00:00
parent f34bf82a43
commit b51bc55e0f
1 changed files with 63 additions and 27 deletions

View File

@ -72,10 +72,15 @@ class db(netsvc.Service):
self.actions[id] = {'clean': False}
cmd = ['createdb', '--quiet', '--encoding=unicode']
if tools.config['db_user']:
res = tools.exec_pg_command('createdb', '--quiet', '--encoding=unicode', '--username='+tools.config['db_user'], db_name)
else:
res = tools.exec_pg_command('createdb', '--quiet', '--encoding=unicode', db_name)
cmd.append('--username=' + tools.config['db_user'])
if tools.config['db_host']:
cmd.append('--host=' + tools.config['db_host'])
if tools.config['db_port']:
cmd.append('--port=' + tools.config['db_port'])
cmd.append(db_name)
res = tools.exec_pg_command(*tuple(cmd))
if not res:
class DBInitialize(object):
def __call__(self, serv, id, db_name, demo, lang):
@ -139,33 +144,50 @@ class db(netsvc.Service):
def drop(self, password, db_name):
security.check_super(password)
pooler.close_db(db_name)
if tools.config['db_user']:
res = tools.exec_pg_command('dropdb', '--quiet', '--username='+tools.config['db_user'], db_name)
else:
res = tools.exec_pg_command('dropdb', '--quiet', db_name)
logger = netsvc.Logger()
cmd = ['dropdb', '--quiet']
if tools.config['db_user']:
cmd.append('--username=' + tools.config['db_user'])
if tools.config['db_host']:
cmd.append('--host=' + tools.config['db_host'])
if tools.config['db_port']:
cmd.append('--port=' + tools.config['db_port'])
cmd.append(db_name)
res = tools.exec_pg_command(*tuple(cmd))
if res:
logger.notifyChannel("web-service", netsvc.LOG_ERROR, 'DROP DB: %s failed' % (db_name,))
logger.notifyChannel("web-service", netsvc.LOG_ERROR,
'DROP DB: %s failed' % (db_name,))
raise Exception, "Couldn't drop database"
else:
logger.notifyChannel("web-services", netsvc.LOG_INFO, 'DROP DB: %s' % (db_name))
logger.notifyChannel("web-services", netsvc.LOG_INFO,
'DROP DB: %s' % (db_name))
return True
def dump(self, password, db_name):
security.check_super(password)
cmd = ['pg_dump', '--format=c']
if tools.config['db_user']:
args = ('pg_dump', '--format=c', '-U', tools.config['db_user'], db_name)
else:
args = ('pg_dump', '--format=c', db_name)
stdin, stdout = tools.exec_pg_command_pipe(*args)
cmd.append('--username=' + tools.config['db_user'])
if tools.config['db_host']:
cmd.append('--host=' + tools.config['db_host'])
if tools.config['db_port']:
cmd.append('--port=' + tools.config['db_port'])
cmd.append(db_name)
stdin, stdout = tools.exec_pg_command_pipe(*tuple(cmd))
stdin.close()
data = stdout.read()
res = stdout.close()
logger = netsvc.Logger()
if res:
logger.notifyChannel("web-service", netsvc.LOG_ERROR, 'DUMP DB: %s failed\n%s' % (db_name, data))
logger.notifyChannel("web-service", netsvc.LOG_ERROR,
'DUMP DB: %s failed\n%s' % (db_name, data))
raise Exception, "Couldn't dump database"
logger.notifyChannel("web-services", netsvc.LOG_INFO, 'DUMP DB: %s' % (db_name))
logger.notifyChannel("web-services", netsvc.LOG_INFO,
'DUMP DB: %s' % (db_name))
return base64.encodestring(data)
def restore(self, password, db_name, data):
@ -173,16 +195,29 @@ class db(netsvc.Service):
res = True
if self.db_exist(db_name):
raise Exception, "Database already exists"
else:
if tools.config['db_user']:
args = ('createdb', '--quiet', '--encoding=unicode', '--username='+tools.config['db_user'], db_name)
args2 = ('pg_restore', '-U', tools.config['db_user'], '-d %s' % db_name)
else:
args = ('createdb', '--quiet', '--encoding=unicode', db_name)
args2 = ('pg_restore', '-d %s' % db_name)
res = tools.exec_pg_command(*args)
if not res:
cmd = ['createdb', '--quiet', '--encoding=unicode']
if tools.config['db_user']:
cmd.append('--username=' + tools.config['db_user'])
if tools.config['db_host']:
cmd.append('--host=' + tools.config['db_host'])
if tools.config['db_port']:
cmd.append('--port=' + tools.config['db_port'])
cmd.append(db_name)
args = tuple(cmd)
cmd = ['pg_restore']
if tools.config['db_user']:
cmd.append('--username=' + tools.config['db_user'])
if tools.config['db_host']:
cmd.append('--host=' + tools.config['db_host'])
if tools.config['db_port']:
cmd.append('--port=' + tools.config['db_port'])
cmd.append('--dbname=' + db_name)
args2 = tuple(cmd)
res = tools.exec_pg_command(*args)
if not res:
buf=base64.decodestring(data)
if os.name == "nt":
tmpfile = (os.environ['TMP'] or 'C:\\') + os.tmpnam()
@ -198,7 +233,8 @@ class db(netsvc.Service):
if res:
raise Exception, "Couldn't restore database"
logger = netsvc.Logger()
logger.notifyChannel("web-services", netsvc.LOG_INFO, 'RESTORE DB: %s' % (db_name))
logger.notifyChannel("web-services", netsvc.LOG_INFO,
'RESTORE DB: %s' % (db_name))
return True
raise Exception, "Couldn't create database"
@ -217,7 +253,7 @@ class db(netsvc.Service):
db_user = tools.config["db_user"]
if not db_user and os.name == 'posix':
import pwd
db_user = pwd.getpwuid(os.getuid())[0]
db_user = pwd.getpwuid(os.getuid())[0]
if not db_user:
cr.execute("select usename from pg_user where usesysid=(select datdba from pg_database where datname=%s)", (tools.config["db_name"],))
res = cr.fetchone()
@ -235,7 +271,7 @@ class db(netsvc.Service):
def change_admin_password(self, old_password, new_password):
security.check_super(old_password)
tools.config['admin_passwd'] = new_password
tools.config['admin_passwd'] = new_password
tools.config.save()
return True