Use user/passwd/host/port for postgres tools
authorced <>
Mon, 8 Oct 2007 11:30:42 +0000 (11:30 +0000)
committerced <>
Mon, 8 Oct 2007 11:30:42 +0000 (11:30 +0000)
bzr revid: ced-b9871220aebafa28ae4738dbb9f8abaaa3b6e975

bin/service/web_services.py

index 05c2249..ec1da9a 100644 (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